diff --git a/docs/integrations/data-ingestion/clickpipes/kafka/index.md b/docs/integrations/data-ingestion/clickpipes/kafka/index.md index 7022039e647..d02835dbce0 100644 --- a/docs/integrations/data-ingestion/clickpipes/kafka/index.md +++ b/docs/integrations/data-ingestion/clickpipes/kafka/index.md @@ -15,9 +15,9 @@ keywords: ['Kafka ClickPipes', 'Apache Kafka', 'streaming ingestion', 'real-time | Page | Description | |-----|-----| -| [Reference](/integrations/clickpipes/kafka/reference) | Details supported formats, sources, delivery semantics, authentication and experimental features supported by Kafka ClickPipes | -| [Schema registries for Kafka ClickPipe](/integrations/clickpipes/kafka/schema-registries) | How to integrate for ClickPipes with a schema registry for schema management | | [Creating your first Kafka ClickPipe](/integrations/clickpipes/kafka/create-your-first-kafka-clickpipe) | Step-by-step guide to creating your first Kafka ClickPipe. | -| [Kafka ClickPipes FAQ](/integrations/clickpipes/kafka/faq) | Frequently asked questions about ClickPipes for Kafka | +| [Schema registries for Kafka ClickPipe](/integrations/clickpipes/kafka/schema-registries) | How to integrate for ClickPipes with a schema registry for schema management | +| [Reference](/integrations/clickpipes/kafka/reference) | Details supported formats, sources, delivery semantics, authentication and experimental features supported by Kafka ClickPipes | | [Best practices](/integrations/clickpipes/kafka/best-practices) | Details best practices to follow when working with Kafka ClickPipes | +| [Kafka ClickPipes FAQ](/integrations/clickpipes/kafka/faq) | Frequently asked questions about ClickPipes for Kafka | \ No newline at end of file diff --git a/gt-lock.json b/gt-lock.json index 1f746dd8d5f..cdefa5bb847 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-29T08:14:39.271Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.272Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.272Z" + } } }, "24bb0ca99917fdfda706556c75c640db16b12f966ea7bd58e1e9a8bdf4be5146": { "40c867ec4bd9ff53ca41f19ef2fb11bce1cd4d6f82211f50a350bacfd56350a1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.286Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.286Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.280Z" } } }, "2f81498e8b60c281ca710a3a25f611bf79424982fa85bce630e1d4182f252536": { "e5431d96bed4f0f93b507ffa84836d28b1d715ac31c199864a10370ec3b6f040": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.276Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.257Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.279Z" } } }, "37e1e1dcfe884bd88e97aa22d6ed7fc14323b326449d12f0a5644f15bd4ba087": { "bd75344d33495d82bb1ddbeeb77d5b1f53a6ecb5f788cb9eadaa606a67b5ba96": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.284Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.287Z" } } }, "49041ac358e6a0f1cdae73923da607add5f9d37fe3320250b5457924d09bcecc": { "d61c6739096f5de9a1f340500324926cc206fe878ab16df77def05d0ba746d3c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-29T08:14:39.287Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.284Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.281Z" } } }, "4abc97ebd23c7b3dacc0e18e77499272b51b908bd0c2a7a823d153d3c00f7613": { "7817d141aff4e4b1ceaca87c554c551bc1add23bd534611e2704fba56223fbfe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.285Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.281Z" } } }, "4e7333f7ff430819ccfae5b1f2b2ee97508f58db11c3e67c31430385b0618503": { "1a899ad20af5d3dc3c495e6ddc0c3ff5aacc9df838675e487a6910da0a531675": { "jp": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.275Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.279Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.278Z" } } }, "6f13745927dfcaff0a5b759cdfc9dc47aba26e811ab26776ee363cd821f7d585": { "be6c5629590606c77cd44d60b8cb153a6e8b1ae6d9f710967b3ea692cfc8cb6d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.281Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.282Z" } } }, "8ad40f5399ed36401edb12df869b1d441ff2d635581938c63d4f0a611fb977ae": { "16565c6a0928275a3a601a45f18823227dc886a00aad5531244bec633d3e8af4": { "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.296Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.297Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.280Z" } } }, "a3ea3f0c344313a1d3ad7969f1c82ef13af419e6eec98da91153c8735fd46730": { "df3510130e5bdcdacd162718bb228e62987c548fea96f8a9e94123cc6b9a78d5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.276Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.276Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.275Z" } } }, "b4b7e3ea48cb57c88168d17bf4d4f7d74e58a613803386d3229332939508c542": { "67faf8569421939ba33d4c9fdc3b64f28fcc3bc298cc8c8b43a29bf3499a6898": { "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.297Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.280Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.297Z" } } }, "bed5256b181dbcf92c02187749ebbf45c60b6bbfdee1789c1848984b6be1d78d": { "614647c380ff18e7b1672f19190809fcf15ba05429ff7f93a33f6c77255ba9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.282Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.286Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.282Z" } } }, "c2811557e4f56ffd6e37b0f9f6558971e9d45005c22c3c19ebaef586f1591687": { "b9aea39ae1b4e63fef7a92d27750dfc746ac0ac174e77a895050ed0d24ff1ea7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.257Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.277Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.275Z" } } }, @@ -218,403 +229,403 @@ }, "a4c073207b34a9e6e51079c57f0e06190c406d676367e982df527e7379cf105d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.269Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.270Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.269Z" } } }, "d59e7e7594ae44f151cb9c65dc0cf67dc9998af7e3a974cffc3d0f0dabce2e18": { "7f90a5a780c1bb26935f70fb9cdd36714ca975e36d84b530b0b75f565410ba0a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.277Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.278Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.279Z" } } }, "d89bc73ed23da882f0c45593180a3989cb6844bd38d6496ab6cb5ab328d51083": { "42fe50c1e729beb1bfa14d29e80c4f579a068ebbfa39aa1ffe25b2bb963a815a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-29T08:14:39.299Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.298Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.297Z" } } }, "e8ae18c3678baf91b2255e5eab22effc78193c605230851316718cfb95063b2c": { "b8eaf5b30dc66a5bf4e27198f07863a95cd60a2e8b15d9fe7e86cc6f6eb603a7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-29T08:14:39.298Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.297Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.298Z" } } }, "e92405c74b1c19a280775296a5640f2c7646bfabd9d6af48d6359d9a4f09c9d8": { "c9015dfa533bb72f0fe4f1f5a455b0a5497c12b645e908ee88d9686adff07027": { "jp": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.281Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-29T08:14:39.287Z" } } }, "ea04f6329e37f5487414c9b64a5e1602d705f1fc914807a5e16d95932f4ded16": { "c2794c8cfb2c5d8f3ad408c1a6ee6d92accd0948ff2682cca78897d7cef83daf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.277Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.278Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.277Z" } } }, "ed828a4311942b25614d0fd962b572a6dc329c0d92a3891dce42290c1d8324f1": { "78977a9c19b7aa2ba08361a0d6ca3390d032f6997a67d280a40d8974f768bb52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.279Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.065Z" + "updatedAt": "2025-11-29T08:14:39.274Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.067Z" + "updatedAt": "2025-11-29T08:14:39.279Z" } } }, "ef555d903b99c706a7fbc048a6888f3d3743693968bc76912f338d53af846b0c": { "c84825f7cf888bad7b7b5ec57d4a3941f8dc40c7526398600864fd18a77516ef": { "zh": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.283Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.285Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.664Z" + "updatedAt": "2025-11-29T08:14:39.282Z" } } }, "fb2a4bdb7f2883fa7ac9878a6d4e978def652c408e4ef95784547eef9e313dbb": { "20e4763f0f7057430907de10bf00a918aa2e762becf34af686b125a9da4fe458": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.256Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.256Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.066Z" + "updatedAt": "2025-11-29T08:14:39.278Z" } } }, "22760d417a52c66f14bee182587d458d0737a616dd14cb09748b4c725fc5809f": { "c6ca08107fa6822548ad3adc5de4b6fdf1d9860224c2cd62047f42bce72b1c12": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.399Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.399Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.417Z" } } }, "3e38c1623307fe1538f034436996c45b6ce42cebe6a35b146ba34a354e7b226a": { "7d9c49d88230712b6849bcab6640651373295cad7888223291eb46da868626e3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.428Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.424Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.423Z" } } }, "434f73c99193146064105db19ce337122de0d78915918472d56f5393dc41a913": { "07acf0a2f2bf2cdedbe6696ce78f98b197df5722eecc5a214cf1d15173619bb2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.433Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.398Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.399Z" } } }, "4fa6a5d68016ad855e418c2e88b5a37793256913a0caceaf33014edf61107509": { "1ed9748c6ebe33e1898f694a866a318e321540cc9186ac29b7621da0715118c5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.428Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.430Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.421Z" } } }, "5dcaaaf5a4d53dc33da6680731d152b4a88a8d4e9c6058a18e521c7629865fb2": { "11c49d7827257644d730176fb691cb3d9705b0b2caafb1ee0ef7b70e70446275": { "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.413Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.414Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.415Z" } } }, "6687b017941230cd05da5ec3d3b0b3a66c8da07927fdb43f62a2732581460749": { "df9979ccd3ace6a4ab1b704d9d4b233c9092cf3e747331f0d940179f918f015b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.301Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-29T08:14:39.299Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.301Z" } } }, "69aa1e22d1867f2dd9082998e597234169f92ed3ba4c3d6af26b34ffa82e4a48": { "aea97333102d80bfe523bef5b3932706938c1ab2307337cf20451a0633f0d7a0": { "jp": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.419Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.398Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.414Z" } } }, "78ae413a62554c8c5ae5ac8301b68726066573d500bb6c8caabdecefd781bb3f": { "754657766dba43bf89b81e0a5c15e318411e3d1782280b5ae5d185edc97b8e9b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.398Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.381Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.417Z" } } }, "7c0a1f3dadfd423b5f66993109c1e8bde0a0b4ff555067d9e6cd275bdaa7a391": { "ef65d65a01188f23ada0aa6a4be2fd11257542de621c6ad17c666a4b0b2aabf4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.432Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.431Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.431Z" } } }, "8d9acd4ed372d08f28519dfb01b6900545df9f42502ac21f0ef6bd86b724c724": { "3ca361084040c6efbaef261b3b4c88e38d022539f3e58645a4023be45b9ed7f2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.430Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.422Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.418Z" } } }, "902fba8b39d6b163ee66698d8bd12433740962a53ec93d756ebdc9d11cc5c531": { "dc72366dcf698c0d7f7b5eed229fd9a7dbb9776362cc9399cf927769376a9098": { "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.413Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.414Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.414Z" } } }, "9414d7ed4d45271d4677e8083e81b7732a750c4dcd8dc182b14ce11749a9ec63": { "55348a4fc23db936f15885093540b12ab2d7159c2a91617e4058fef961a3c4ea": { "jp": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-29T08:14:39.300Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.672Z" + "updatedAt": "2025-11-29T08:14:39.300Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.301Z" } } }, "9ac02f1c2289520aeb58725683781053f5ba6bf828b2e8585540596060f1f416": { "ae1a2a308feb0c5c6d10c67047a4b5867fd643296e4e816743b7e2e297fa0f5b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.416Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.416Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.400Z" } } }, "9c7cf003973e27e4edaecd818b57b1e653cdfc8e936c45c67e314eb7123327be": { "1bca9e04eb1cf2d68b948ebb6ff7b813d50c8faada3f1ee2a8c561e9d96d6882": { "jp": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.302Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.302Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.665Z" + "updatedAt": "2025-11-29T08:14:39.285Z" } } }, "9d1a4cd9443c6b88ad09c86205631318b2554cff25df4445681bef27a63f1923": { "6349c4d8161b7c14d291e4b3a1c44b280c0eb9f067739c2cbeccc19c6800a2de": { "ru": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.431Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.432Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.429Z" } } }, "abe1e09771cc949a765515b0f1ae2d0c4a6ab90fceae133c7ea3efdc49fb65a6": { "3a86b5256b89e144630a5cab1fb1ee8cee76bb30374fd9a861dacc440a7b8bd9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.400Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.381Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.381Z" } } }, "ad7599fbe857ed33f8231ed240a179e73c2e77cfa5e658ffca7502e66d2eeb8d": { "fadc1396d5e8d2ef81e08c49dd8a08b01468ff70c1b1463a692904b2403b88dc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.415Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.415Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.415Z" } } }, "b299c52ac5ef4f3399408a89f700027a4da61547b988cd85ef190b1cd544d809": { "ab3b1379019677d4f056b27b40d79c7a1d368792ecee4e8e04d9224e7f40f825": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.426Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.421Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.427Z" } } }, "b776eb4f7e91ceadeb1cd902e4a72be31912c8f40357421634f01d720427d7cf": { "a157eb7d7ffd46e8626bd3b8ed555fd32deed480e675bf80cec9536c2cc53b70": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.423Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.419Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.428Z" } } }, "d294fb78df318396bfabb26180e94ed0286f348799a54a338dbcac4df2d501a8": { "2c1ad0e8f79ff31317243d7b0ba63abc05a794bb4cf50ddf3ab6a05a73136433": { "jp": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.416Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.906Z" + "updatedAt": "2025-11-29T08:14:39.415Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.907Z" + "updatedAt": "2025-11-29T08:14:39.416Z" } } }, "fb88079d51f44c0605f104c400878c73b1676f5d7360de0915e1f533962516d7": { "83b74506a046cca4bef2d9a75f263d66bc8cbdf6902a726a083fb24ba240c90a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.431Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.425Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.421Z" } } }, "08c0c301774aaa88b81ec6aa095f55e7824eafa1cbace5b623dc7c79a65127d2": { "69fd950d01a73a4628cd2ff26fd88bc864432af7ec9c2a0b214e105e41696130": { "jp": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.420Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.429Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.422Z" } } }, @@ -632,299 +643,299 @@ }, "9c5e775eb155a68364a368b61b5125ad1624928bd6d74c078e880457d501c280": { "jp": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-29T08:14:39.440Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-29T08:14:39.440Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-29T08:14:39.440Z" } } }, "3a3e4cf73cd863c0103607437eb8b4f6836337cfd7e83bdd562015c4ed9cdd6d": { "086e3e89b5951923ddf12df84d937ba158991125876b5f6d842de358bbe8b3fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.443Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.443Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.446Z" } } }, "4603feefc1d42187f8cdc33b837b161e0fc3b5c8376d6cd191411f0dd562ad31": { "a1d7bce3db202c9b4687ae92810df1230088ea23aa2c8009af476b02206e65cc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.915Z" + "updatedAt": "2025-11-29T08:14:39.436Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.707Z" + "updatedAt": "2025-11-29T08:14:39.439Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:39.437Z" } } }, "490be0352814516ee6591ee5f8e07875e2139020d864d540140e0fa494298d5d": { "d23d41d10643691da14255ad0f85c7b97475432325af1c17be68df9efc12be5a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.433Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.433Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.433Z" } } }, "55b28fab1ba94c3606d033461bcc70376b43d613080d008d80ef6eeee311b377": { "256a3209f20639b3de6006d270d351fa95df57bd7f581ffda6773fd8eba690c7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.450Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.443Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.444Z" } } }, "617059ab9b90c50e356730de729f0ae69ee3763a1e279dd764ff91a7fb180dcc": { "d57355b7ce2374ff50888d99d345884771d8478a28a50565e264c7183444541e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.451Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.446Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.445Z" } } }, "752a92de3795a78c42039024533716b1bebd226dc5c16f6d9e6c32db92868aa9": { "3a70208f4d63a66f6cafa72e823a27c94a0b217c643d65060e75846cf03db29d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.453Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.455Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.456Z" } } }, "7c8202b183dd3bd51127bf5cff1d877fc101a710d10076050d3769cec7237315": { "cce8610caf1b6ee18be42bc4b4573a409a2178a60d7e7fdf9aa312bb9a0e96af": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.446Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.427Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.430Z" } } }, "7d8c9d047aa047d949a0099bf7badab51bf4cbb1242283616136def6a2087241": { "ae00c1636361dff35e6ca1fc517dd76ec664cbc4f992d5bcfebb7e2a76f626c4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.426Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.428Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.424Z" } } }, "828d49017ac2a72d1fb53055bb4787df9014bcdf6914a82ba88ded05b27ec9d4": { "9d68c2d46ac27369e5a5becf238948336518cad4fd978e7648cd41b1f743b1b1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.458Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.460Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.458Z" } } }, "9970d9a6d501f36cf179c0419231b9d795a4c633dddeb9b278e8ba7a601a3f30": { "5509618b18f9e3d905b42bcca3ca87b185e363a986c08a3c7adaa67ea9d4602e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.429Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.912Z" + "updatedAt": "2025-11-29T08:14:39.430Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.908Z" + "updatedAt": "2025-11-29T08:14:39.418Z" } } }, "a1bad3f4a716dc84c050e5be3e8486b6c74375173ac25b4b6faa1e07928f68dc": { "2ea331fabd4829ebc7e1af163a669bd7da7ebae75dc79796126ab275fd4d3c95": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.422Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.421Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.913Z" + "updatedAt": "2025-11-29T08:14:39.432Z" } } }, "b5fa886fabf17ebc48a6ca47fc6a8992d00da4b99785793543e0d888695a2688": { "259e7cbd211ad2a2649e5a8f0da300650ca51664a447e45289d100bfcdfc34d1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.417Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.417Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.452Z" } } }, "c1a7d6a20f956b50b1038cee0a820dd57189fc686d14660b023d1fc67ab2e1e9": { "dbc44ae26a03c1b8c3405262a6dd56a831c655163c2cd640d1e27879c8e4aead": { "jp": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.434Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.432Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.914Z" + "updatedAt": "2025-11-29T08:14:39.434Z" } } }, "c369c0aa928f8264daf73b2cb8b5d20b0f760cd84c596ca63fb6e80bf182b3ac": { "081e5ae543866b5886ecf7decd8d4a80af7f854626b8b8136631cf04a6c7a9f8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.448Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.444Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.444Z" } } }, "c6c433287e0c8c560d8ccfdb9dab1b764948e7aad08d8083787ea5a2ba4ffa25": { "3fa66f5214cb83c0d151b0adefad829fdec772c62100ad8be67b2c2d29a51136": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.457Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.451Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.455Z" } } }, "cee9dba64ce2a735e188505d45af71b74c5cd69ece6c6e7512832d84898157a2": { "ba71fb39dc5dad8ed0cc9385af226ee8ccfe87b891afdfae44d4b68d6a6800ce": { "jp": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.445Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.447Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.418Z" } } }, "f03ea3286759068addb766b5b98317ea84803343105fd081b75322828bf9d201": { "8049194481456bef5558bf7d7d6cc3b522680055cc050dd06c21001990efaa95": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.423Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.419Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.427Z" } } }, "f820ad66299aa0044ecdcc3298f5727903d52ea9ce19686054f70d9df707a8ec": { "1c6d8e151f574eb1c808a7932e470939d01ddf3adbd9a088012790d70765d510": { "jp": { - "updatedAt": "2025-11-26T07:24:18.910Z" + "updatedAt": "2025-11-29T08:14:39.424Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.426Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.420Z" } } }, "fe8dc3e8a42089566aa7dbdc1b163232b94dab755cd8f716e5050a20b9da71be": { "8e5a24d4923c146d3ff29a36c8d08b801a6681568d413d11ee21ab25c5a588ff": { "jp": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.425Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.909Z" + "updatedAt": "2025-11-29T08:14:39.420Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.911Z" + "updatedAt": "2025-11-29T08:14:39.425Z" } } }, "1468ae293b5d12d0ded8668dbb023988cbdb44ac496923a1ef6653864352d921": { "99c4f7270820d4fdcb92c4d24d5487f3eaa377c46e721e913d45645dba75a74f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.470Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.471Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.471Z" } } }, "1c112808a954d78a709e3ae05703950bc5804f9e55e3e98efd93efb0f0f879e0": { "a0ef058ccb99a1b138a4a98ffca0037cb2b496f227c55108b8beef337ba82d66": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.455Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.448Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.447Z" } } }, "2317505b4b1b1557458b6ec9caf09937e43cf133543d04e2637e9cd6e0693bc2": { "8b6d58a1ca1a770a40180a524a20350aef1a747a1a0f59ef6bd9eb53764a7d1b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.472Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.470Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.471Z" } } }, @@ -939,694 +950,705 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.083Z" } + }, + "8f390179712abdfde1d16a03f079c6ebbbd781d3f020e59b2ef3af3be4bb0205": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.706Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.707Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.707Z" + } } }, "3371d95238c92603c162eaed8138395ca44e47b22ad969c5099f7e599ec16c22": { "2a161bba41a266518443feea5a759cf299dbc3fdeb7b00fd74b546abae68dff0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.456Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.457Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.455Z" } } }, "34148aef91a7ca42367acb2003b2045d6893d713fd20c6ef4a4a8fe6b505125c": { "0df15707cc19ce74ec40c00d884f8f77eb33786d03f5831e131804575fce02b5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.461Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.460Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.460Z" } } }, "5c385581f9c65edaaae75a74b6646a142de547cd3f20a408953b75ba33586e2c": { "8dc4eb869f4a048ed04d5883545cce095cb2df351eba54b486a29c615fe29cb3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.453Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.442Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.452Z" } } }, "650a560be33079fccc4800a89f7ceabf7333009b1cfb0105d0e77b22a9afd9c8": { "609636eeb62cf3a4bd5ce284becb34bda3b97c2382d2dfd89320e13d69bf22d7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.441Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.693Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:39.473Z" } } }, "66edaa5c8dc32a1f831593b8a49a8f90c9de66304dbe8e78969217a73f2200c0": { "3a20ac6682c2e8633f0f56d7c381698dc85b1777367c924c9a05d2c329c4fda0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.454Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.450Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.452Z" } } }, "67113cbc50d80beb99c25a836c1c97bf312030d10537561666f2d9afcf9f3145": { "bc5d1e200e64a767369cc0ffad68cd1dc62da9a6230b0c00c0c10c90dcbef298": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.451Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.452Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.450Z" } } }, "6986025ddfdb6e69c9d68bae98e09599b7bd5252a433fe1c14839522e57376a7": { "6a07a797478a7c19aa592d19f3fd5211e2bae00db7fd3cef33b175016a1b1b29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.453Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.454Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.454Z" } } }, "8e1acaa9709e95b6354d4bb719b069fee08bc3794641756333aba5003eb9475d": { "e8f0f6277f744012426a53a6027257e33c4b16cb2ca45dda3d90d4b73b3d4c5b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.712Z" + "updatedAt": "2025-11-29T08:14:39.457Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.711Z" + "updatedAt": "2025-11-29T08:14:39.453Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.451Z" } } }, "a5aac8ce0e37bc2df7af5f69708607c2c9b46cbe068e3172847b3191394faffe": { "38d2828e9bd727652c3233af76ea089e954aba2db55328f8cf1f43ca609f19ff": { "jp": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.470Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.471Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.470Z" } } }, "af5c9aba153f2323766f5c2833f6dfb1a669b295e319d579f4546ea448e8d7e7": { "0d9634f2d0d51799480d3e5d225d816eb09fdf75e544bf3b04b2fe1385fb9619": { "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.710Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.710Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.709Z" } } }, "b01e9e50dff0d52b1c86ddcce64d477f77a182599c27ebb6752763a0c4cf1884": { "4bf15471d437e48ecaf706869ad9127730c8b915f392e00ca4b38372ff596b01": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.459Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.458Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.458Z" } } }, "b721aaf83ea7701a82587311ffcd215fa0fddd0ac9d459193fd26188e0680183": { "906c00a6ef80e7715d21aae24374b2b2d044fcdc7b9d5c6c2c7341ecd0753821": { "jp": { - "updatedAt": "2025-11-26T07:24:02.708Z" + "updatedAt": "2025-11-29T08:14:39.442Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.445Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.709Z" + "updatedAt": "2025-11-29T08:14:39.445Z" } } }, "de08ffcb57e92eb891276970020672bdbe190e2ad13861a7a5a14fe04f7eff24": { "b11091547782b23a3e69aa42aa789855dc525b51b00a033b1cffebdd4f69711f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.473Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.472Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.472Z" } } }, "ea2d038b6989e3982d873c583fb3c15212b691b2e747de62d4d28c3e4b11a23d": { "68f32501aba4af446aa28658a6859e797a66b66f975249f4a21ec435c8e2e471": { "jp": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:39.474Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:39.474Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.715Z" + "updatedAt": "2025-11-29T08:14:39.473Z" } } }, "f56b183aebaa9c102a1630d41b724bdd0ef7984c2f5be9f15f51bb83994e0265": { "0e4b6a498cb6259a81c3b89b57fc27d109c9f7c4517473e5f6371c0a4d14e7e7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.715Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.717Z" } } }, "f80606d0e748135944fda4f0b2bd5df8b58807fb2f4c06c85b06e12fca82e935": { "2aa54fbd8a8eef1da3872abeaa7ad8858d0e7a55684ee9afd514540bcb055f29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.460Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.459Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.713Z" + "updatedAt": "2025-11-29T08:14:39.459Z" } } }, "f90130006ab67f0f1f9729094d7e71d602684a6c03306792b40387ebeda24cbd": { "044f9d08748a2a48a556c183ed0bada874cc4ce848cad6b1bf87fba782fe7d9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.710Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.708Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.708Z" } } }, "fff1cff77ce23873924a1766144be6a0a4bc145a4beaf1c7902459c008cbd536": { "6b16dc8b034758efca2a7dec7fe695e186e4ef2f750e4a6ba872d28a906012b3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.448Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.449Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.710Z" + "updatedAt": "2025-11-29T08:14:39.449Z" } } }, "0007ef5eb0fc8520aeab373a05b58e2db16ece5be3074e20646fd984e7bb2153": { "534ae688e369810666e881d18767610a7df7671083edd5debe450d3827e074c5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.481Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.705Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.483Z" } } }, "05fa5078290d9319b91e520b8d624cd018e97d963be0d0e1cd22ca7e37e899e9": { "4a4c4d4b7b75c17db47caabac407cb6678d38f795ad11e688adfe6762b928d79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.714Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.714Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.712Z" } } }, "16a9baec9aea4c6dd78355c05288783f630be08b0af1a257fb205b45c7adc066": { "b1a72f898456e3c08b49f6f0e73a4fc33fa3bad39fab513c1db89294a3fb923a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.481Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.477Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.479Z" } } }, "24203d0280dc684588776442ac330a354e834de5789e13b7f7068042627350dc": { "19fc846b48f319f018e4f670ace8976874e318a091bb09940eed158a6c8e8569": { "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.534Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.535Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.526Z" } } }, "2fa693bc37b3a10adc8d79217e3b09168dc83b1d1e169414c8ff196815fec6f9": { "9e33b9e6995d58fab1e0c61f6a5436f2184d7c49af88577359d93f178ead07d6": { "jp": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.530Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.537Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.544Z" } } }, "437aab42be9088c95b44d049c562b541333adb34c7167b0341f25eeb6f1da633": { "673a9dec5d05173b117bf71c194bcbd9250ea1e8e6162c76a5ac07819b4a0314": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.713Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.714Z" } } }, "4d14e175d2ad5b7f1f59197782ca672764811be0a7694da0d93c40a71707c218": { "2f6f3975ac07a17d2e6c12809f029b5fcecdc238f96cab5409c924b908db77fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.478Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.479Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.480Z" } } }, "57e4e9dfa0451001fd8054b08c62e1b7e7899bf69d75440b300be4c4a727b99e": { "37f3dda8e8d9a3dd2ccbec3bdd564d2de4200f5a0108f14e3cb3cbe1f05fbe96": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.482Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.479Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.482Z" } } }, "60e6b2c95bf2975a8ad16addf92ca2f2b8ef9b6f0267eedb1b1609cf83bd7bf0": { "8b24d0eebf933022f5b7646dbd76005a200ed0eb134c91ef2ce37429b92f838e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.504Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.505Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.504Z" } } }, "666059b00db591c1a56ce4963af6165fb3c9b12689bc7bd2d002ad9f8261acdb": { "60035e65e48fd5fdb3a14661c3ac4811bb8496f2b211e4fe284e3d6b420921c0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.534Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.541Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.541Z" } } }, "7431d11049418c30c908694305424392c5e608ecfdf0bd5bb5e82ff877dd01f3": { "3c1e299227977efd8ca6ccf93ac2673c11fbfdfe441a0d0784400200278822ac": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.502Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.502Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.501Z" } } }, "7cad50f4cd617547f24613bf26b7d92863268b13a23a167f7afafe1105d9b80d": { "fc4b5c37a2e9cd403b127f9b0e95af107c0815b1c7bb98e1eebae04bc96ad554": { "jp": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.477Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:39.475Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.476Z" } } }, "8b1e7b5824a25229b63b6cae491572266d76a2f3619bbb37de99f10f9cb281d7": { "b39b1a9501a0d4efe97c7c462447f2f7f762c085e32781115e4e01abed9470bf": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.484Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.484Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.483Z" } } }, "a3a1fbd31e0aaa187d657bd8045fa61bc9f31995880bcb5d5758a3e184f5ecb5": { "28ea6e40b848e91414d2d23698b6689414783f37c844f3f15e49942c2f8d0f73": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.713Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.711Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.712Z" } } }, "adb57f6c330a361767cc8e018fdeac391e70be9310b007ddc867750c55383217": { "6bffe63c913aa6f222b1d3f7660678d89871583dfc5b85a5472e73ccd48f0852": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.543Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.534Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.538Z" } } }, "b0f947d3a4638d92601c813f2511beb5008821e82e066594946d2230ae518888": { "e2d7964de87a21a4f56589f9ef750a5f70e553620f06ce8ed541c52c8e2fd182": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:39.476Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.478Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.480Z" } } }, "b581e8a0971d1d07fd92c09611201fbc0ec1f2ad10e9a9e9462297b6dbe79f67": { "49ae124d0469e31fa1e3318ed468a02b4e75af99b0ad807441a4e18f29afb644": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:39.476Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.718Z" + "updatedAt": "2025-11-29T08:14:39.478Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.709Z" } } }, "c5ec668978bc00da55afaed8bf387ab8e40f7e8cc8a5c3c85b6528469658dbac": { "2760c235bba120190e9792afc2791f4b14241f22634e6dcfd806b0f0c8a2f30f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.083Z" + "updatedAt": "2025-11-29T08:14:49.711Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.708Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.082Z" + "updatedAt": "2025-11-29T08:14:49.709Z" } } }, "d0878e46ea2d9748ef2ef35fa15820d74801d2e823a8c466520717410dca0e30": { "34f3e7285aa8956a7287c85c05fbbc6f82a3d73d51e58594a18dd7c4e673674b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.543Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.536Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.504Z" } } }, "d84d842f939c18587480808dae2c357d93b19f0503165ffbbb5df5723ed8d18f": { "78c6fc1825dfef395f2920f37ae3b83e7a55e08e381e14e11ade4b0633972ca7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.719Z" + "updatedAt": "2025-11-29T08:14:39.481Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.729Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:39.475Z" } } }, "e16fa51bab7c52534a6634130d4aa9d5f4eaf5a9199be40465cc25c632091ca6": { "9a45c83991713cae83ff2b9ff52e3fac9bc7cf89dc4ce06aee3062459ba62f83": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.535Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.530Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.531Z" } } }, "00385c907824ee916e1d2ab90ec1343952049a30fbb273cd705e54e19e5e54dd": { "a1e228059158c6496d116286e96a0ffb78b193d02679d41dffd889c4ae3f4ae5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.545Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.544Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.545Z" } } }, "2026a346cf904938db3b958bccd4a5998e0f9c3e806206b6a7de6c5a43e41346": { "99e01b88c76b26cea06cf6daf392581a33f358c37c5d4b5081a274912cfb4fdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.526Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.528Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.524Z" } } }, "2283119a59e486c7e332715c4be76c78e6606cc8fef66284fa0397e91f6e9842": { "89e926971a9cb3deeda49f638cbf8679ad56a009190bf99db1a5f7d3b55c106e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.523Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.527Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.523Z" } } }, "3b5e4827235bde4cab69ea0d512c4769c70579291411c713544bf464dec162c8": { "e5ffb2aae3eda69d46997485801b157c3e85f0837446fbd682ac417320b69197": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.536Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.528Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.529Z" } } }, "51a4e1d93b002b635941f3a0b969d77f5e76ffcf3ab01cc6c0302553a48f2dea": { "e3cf07cdc5c67cae3f9a9be2ea541fbdda42c2a33f509a3d16926cfb4c4fa296": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.525Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.523Z" } } }, "51ffd052b5e18acec3f8c2fc6fc9f2de6d509c5f9b55c4e653df085e2f4cce96": { "e67a2d890c9d442e3c7a7f02a0d5c6afcdb1928ff906f575bbf304c7f7799b2f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.543Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.538Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.544Z" } } }, "58660987b73352ad4963dda3033196dbfd0c791f7ea7184da7b8ed72a70d23c7": { "e6384b2ee9b82af275d9a7823132ca573a701a7955a267deaca2eba7848c0139": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.556Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.541Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.540Z" } } }, "5ae00fffd365a54fbda628a19a927576375cc455c591c16a26e7ed16b919a10f": { "2c1fe0f08e90b42f0362e7d55eb555bccf6bc9522b4eee5aa410eecb5a6ff63a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.559Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.561Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.557Z" } } }, "62a28a91cc967d2076cb4a8ae68eb32bb7dc0a91eac1089fc166676f54731dc3": { "4fb613d98fb6ff221944b46d4a102b8b41af0362055b5e31a68dcbedb5e8be6b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.525Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.523Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.533Z" } } }, "62cac186a0d5d595a384019a8da0f2587e8ec388e9fa723441881ad21746e53e": { "5315f9a99c66f3565ee182e7d8faf811aa2e4a227524f9f573eb826dc8b5c51e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.527Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.540Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.526Z" } } }, "64c029683442a95f0d9971d2c2a2f011b21167a916369b96ea20390f74a96eb2": { "27ea13a9d6a87686196565d791a629223843e1c311b9bff9edf44c593e511703": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.563Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.561Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.554Z" } } }, "812c31122c49b26a28f2af399b63cac7fdb8dbff9b0eccb1a55146b1f53d9141": { "1ebe27a88b5652f04a87609b29cf3e09b5dc4ad9bfe9681936296ff736f2d7ce": { "jp": { - "updatedAt": "2025-11-26T07:24:02.734Z" + "updatedAt": "2025-11-29T08:14:39.533Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.539Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.537Z" } } }, "8aa6821981ce9839d00fc14d757392848b9750acc4bf8539c334cf2d5871f908": { "a27ad75b9e2993bcfc4ac7d0eda9c06a190e908e4e85725e849767c67999764d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.539Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.542Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.531Z" } } }, "8f6142d5329a13cb865837bf5f90f1676c0ed34132ae0b7413c66ad9fee106c2": { "b5efc55478dd9c26c80dffe9ed741b395f4d2368d8eee6c9c3149cd4fc4eebc1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.735Z" + "updatedAt": "2025-11-29T08:14:39.540Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.532Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.736Z" + "updatedAt": "2025-11-29T08:14:39.542Z" } } }, @@ -1646,494 +1668,494 @@ "afd2f2eebd8416c23bdeb683cdf48c7d32f86769fb59accaa3e0399bedfbc689": { "9b1791199c987e23d27abeedfa5722370720553cfd8a6405ee7112cebcc27c6d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.524Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.528Z" } } }, "b353f551e48bc3b4c88a7db0d857fefd25c028f8d05216430afdb76e3bd832b4": { "6d6603c2d993968e3e2fb68963df1f14bb64c291c769f84522294cc56cd80d73": { "jp": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.525Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.732Z" + "updatedAt": "2025-11-29T08:14:39.525Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.532Z" } } }, "ba6c4ca640fe7b3f714cda5b21aa83f56d6987a93c06b0f52403fcf16442d4a3": { "73a0749a7a37be27b2b679011c93ceeaf5407fff6130ef17dcbbbc612aee0d5f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.562Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.556Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.561Z" } } }, "c85686859f3f25046db0082f882182fadaaa53c9674e2b8421280d74f206eb40": { "add68d9d7c2384a1f4236b30131c64724392237b73f94a4430f8fd215046f46f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.557Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.565Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.564Z" } } }, "e58beba1ecf7893bfe1389d8eb8c6388801ea9f76c74eaadcbaa400a86832dc0": { "80e13888b6bfca7d175470bafcc2e30a1e88dcbbdaa15cac209fa66c4f44bddb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.558Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.557Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.560Z" } } }, "f437d5d62e24e71773573d12295d6070b2013b4f10635e752fc5e0c0c6f3d5b6": { "69df1b4df06653852e7ced5d6197d910291dedd2d1b27599cd5608fd1b4a5214": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.503Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.731Z" + "updatedAt": "2025-11-29T08:14:39.524Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.733Z" + "updatedAt": "2025-11-29T08:14:39.529Z" } } }, "03f61172ad909b158589d51b6d4f89a053de0b09127cf415c34413087bd48c4b": { "a5c008c72acddb7fec319268bb5dce0d0fb9a1f10d18c2c90a95d993d9f5a960": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.522Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.567Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.548Z" } } }, "0b7dab5f7a039f1859e3a70738566e228a8859b0025e472a76cd8fa2c67c6c28": { "1d8df38a053cb69ce2a27d4691e5cdfd13a6b160e9a02fa3f683e748d317ea48": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.563Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.565Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.553Z" } } }, "2864b967eeeaa7eaa2100c52550f0c77a534e954059ecfcc0991f21bc889bda3": { "feaa20d52a8757a137658d5066422bdbf2de0a87efa96000934a084ad78bfddf": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.566Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.522Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.522Z" } } }, "36663ad730f89d83d4a65b5956ac48db373b0bcfbd0f2bb4062dc5f3bcaf2839": { "8841bb2bfdc1346e286a40346e8503829d958b3bac30b715d775b50f451b49ee": { "jp": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.550Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.549Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.550Z" } } }, "374986e8dd5ccd248058ea18a5c0798d535a4a7501a33eff5fd9b80a782b7c15": { "7b0998df0969746e6c19524cb961e7ff6d7e59afe83c51976450a953fc8b3ffa": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.521Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.549Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.548Z" } } }, "3cb23211e097156c0f1a78ad405746a39a30a7fca3e113e221a2bbde60fc5c66": { "30bc5b33601dc47abebcade817fd66b12ac5351751c6ed875945668d80c959b2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.555Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.560Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.554Z" } } }, "6ce48a90c46614816b7c3a238012b7692f39fa7b3d52104f4f0f92d895004b22": { "7e344ba2b2f6753012aae6adc6fcc5f046670439fd5badb29bee696648c4a317": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.733Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.733Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.577Z" } } }, "707c0fedc72655fa1c912bcb76b320d66a9ab9c8fe5e939a4df2863fdd7f82b8": { "7c543d5ef5d836f674d6873f133f02c4ab70829715b347650c196ee93273deae": { "zh": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.576Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.546Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.547Z" } } }, "730dcd6bd51a2d8afa76fc973bedd9b4d7162629dcf690b192df4cac1fc39566": { "ed51d6c3026594d0ef90de441bf36dff57ad4a32048a288a0186952eb2f80596": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.580Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:49.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.545Z" } } }, "8c4b511502097e5142007ba6bf89d86ef9d582ca174f395180742175d5bd4f05": { "f3274830262e5f01f74d8474761446b9f8a9c83ae245d4cee233a6cd17284b39": { "jp": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.562Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.555Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.559Z" } } }, "8eeb2d38e63485d3f399d528cce00b3fa0310df2d513c8b5aed0077ee217c69c": { "87d6c2b8c54e666cd98b21f88f6b978a41ee92fbde390f5a595aae7d2c59164f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.731Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.546Z" } } }, "8efa94c2eaa8cf8e3ca888069c1494fbfe5679752549f9d0a41d641f2aad43da": { "481fbe7fef11ec970a0109b0e44e9a8165cf0e73e56a0466f038d0efcf74f657": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.734Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.575Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.733Z" } } }, "94747a3cb7498dd41f7f7aaed2f670f003087b3543cf7752be3b39b62c021927": { "f7bca2db0af5de7e2c67ebc1c65c226c309288e7f073d34318c2747b6d1e9327": { "jp": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.551Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.553Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.553Z" } } }, "9be36d6e2bdbfee1f50c6de39175a6e538f2d986429211ef53b12ab0e0031ef0": { "1dee3abbec10bfa0b3995067899a721e47f20ee051715db74e0ac726fa434d54": { "jp": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.567Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.569Z" } } }, "ba0db243d349404c81abcb5ac1b3df54c29742957ec4ab33b24830ddab68f7a2": { "1f879e7772ed8e095b07f85578bd401df3a64cd4e5498296092756cccd875121": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.558Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.552Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.553Z" } } }, "cb8f8c1219ce7a92277d5329ae659c90b78edb06139fda7cb67e9143f6a4f1a8": { "708faeaebbf5c4dabd6c9a9eb715cafd5178cbb6ceacc376b982a574ba6496b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.521Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.737Z" + "updatedAt": "2025-11-29T08:14:39.522Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.551Z" } } }, "cf42c21f80f60055d0087c0e795d8976b1d91223e0fe30f342746b23878b6c6d": { "6d3f845905f3f2b2a1be610957281c22628e8585866ee195f1e005cecbd69e88": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.564Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.566Z" } } }, "d0e7cc516637ef8ff263a061c7c16bafdf014cfae7ce60448c7e0fcce8c6dfd7": { "e57a30777e558c8d76cfdd0c7355a7d8d9e150e93787b8eaedcd4f95150f489f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:39.588Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.546Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.575Z" } } }, "dc560181da04dee98b254f616102cfdbf1969c4c794080bd3b5dd88e33f63287": { "f7b3da6309249ba57146453a20fb02f1da444cc9f6b9ff15796e49d19986d9d8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.564Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.741Z" + "updatedAt": "2025-11-29T08:14:39.563Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.554Z" } } }, "e390b76711ccf2a7eb5d962d037354b40ec5f4bd6b5e88c7a59d4fe98d2af88f": { "959a1807df034b8088bb146f4b89e2d5ea2dea86233fa18c9a28c35bbea95719": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.559Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.567Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.568Z" } } }, "f362b87c61313b355b28fda5f77765651cb599066809f44030b3c1010865fa5c": { "498198cf31ab4d64e31b4a2d37da8c4597bed364756e0feb2aad51f2859ac1fb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.740Z" + "updatedAt": "2025-11-29T08:14:39.558Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.739Z" + "updatedAt": "2025-11-29T08:14:39.552Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.738Z" + "updatedAt": "2025-11-29T08:14:39.551Z" } } }, "f5a9bb73dfebbd60d3ebe96194e16c204bbf24a1a4ad7b46bb262a754dac54b2": { "e78c91e1856bb6bb61d73c20e01d2f69ad12b8495c3f0d7fef84e1558681ea40": { "jp": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.568Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.568Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.742Z" + "updatedAt": "2025-11-29T08:14:39.565Z" } } }, "1370f12b87482a2e8d057a8b41e9ea94795da80127f778fde4628181bbdcc429": { "f8146d175696fd61b1124db8aa052124a23329de9472ab05df373240407f0ecd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.740Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:39.571Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.747Z" } } }, "25e58c45c99cdd21fc20a817b3bc1c4d1448cfd9024cc4ed56ae9462032d790b": { "6bb9f7de8fea38f23bfe3fefc31fa9cf8d67d55bb09bb2f9a1806c8d39795f52": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.581Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.587Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.588Z" } } }, "2f8b276c8b17327a8cd29e02e2e0215fcd7745a9618f81983784ed62a0124e22": { "fd3cd87bae11809fdfbaa52ebbe4afbe61f3cc9cca3ae69d12c598a97c478f9e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:49.730Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.572Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.572Z" } } }, "376f1f3d79070d024492b0852fcc46275cc6894795ef5c9378fe6a8039d04b64": { "57d1e9d86f14ce94f3b9606be0c45891a1cddf024b0cd28892082e2bebf224ff": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.747Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.749Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.738Z" } } }, "3b20b82fd209471b97a1109eecaadcd504d69c6421631143f81852d506036bfa": { "deab720ce649678d8772ed32576b254176937947561eccdb5dd266ddcf5b5d50": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:39.571Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.744Z" } } }, "5315751710a23b80f9bf1ed7f31831d089dbe93c3c8fb90d20b7744073d0bf57": { "a66560c3d607504cdffd12261e02d0e673e576056f78a84ca9ecdf329603c56d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.739Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.750Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.750Z" } } }, "8d92e8b825b034ea42c644cd23567811b46adb33b6d540b842b64c0196ff3b53": { "292f22bc13c3bd83386dc5ae82bec9ed457e6f79b25efab444ce03844d88e825": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.578Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.578Z" } } }, "9845c4be459de6543c79bb52ebef31089a7b6dde5c4bcbf294e6b614cb8b73ef": { "f7ab2f792dc532d79e54d2172ab842ea8bb45d24fbea3c48d921219d21bb9a5d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.576Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.572Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.580Z" } } }, "994f995f28518f9032c149f031eb9e817c8a85f3b0139de3abda3966eec97f40": { "0299673d875da310e70873db6a17323b8be0705c8b4b17c562c9e797b225acf4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.732Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.731Z" } } }, "9e812084882765188d8e23b9cfcbf9a3edeb29e9461a1cec110df416342b0289": { "e16e8324972fb51ec759f18c31f84b12438b5b468badc9732e3a35eecb40c277": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.746Z" } } }, @@ -2148,83 +2170,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.089Z" } + }, + "c1ad37c48321ab74d0fa77243447624e6c987f44ca3469a08d251c3e5a869de0": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.583Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.585Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.585Z" + } } }, "a9a515c52dba44d2cbab844922d2f769a5af11a34775d83c1bd8d9c97e4bb6f3": { "85a2a4117446131c96b792674a9cf5594566bfe0b7f1098d2210537e80d0fb0d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.744Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.745Z" } } }, "af360983b516284a69f939f103f1882eaf99d33139f9033142ae3561946f32c7": { "33be4cf9c98cef60c81c9a896da5f27cad1a7e71f69e85818494ce4b7ec03b2b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.587Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.586Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.582Z" } } }, "b204fb8610ce0fe2a5504ac8ae74eb658b2c80f1a1d885dc2b85d71bc34129bb": { "0aee55116dc7c452f61e8eb411e60595d3f877d5ebfa1d1c034f028155bf44bd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.573Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:49.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.577Z" } } }, "bf09040d678e6760987c57861f7d46d0c83dc84b582441fa87e7ac9756c76f6b": { "ee66bac04fe1df0381e777810c8adb5c9d16229f663ce7ef30a2a0506899ac5c": { "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.747Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.748Z" } } }, "c50d8bd0ecc6ee24b7f928b73255956cae71fabfe25096539cdb974c7f167191": { "f1fb2f5d8ab4009a1d0458d1d0604ea822a372927443fb49fae37168711e0dc8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.751Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.749Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.749Z" } } }, "cabd7d221b503f016f6d425976074155c6ab65f9918739e83cc1d703e06ce9c9": { "7ca705d224c1a2bae3bf661451d8d9ee2d0404abce117b56dcde2161981ea1cb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.581Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.578Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.747Z" + "updatedAt": "2025-11-29T08:14:39.580Z" } } }, @@ -2239,1630 +2272,1641 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.090Z" } + }, + "ef2a79c4910a450c4d299109576b26b3e4d3c1f0d7cbf8aec0cb3af68cf84848": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.583Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.584Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.584Z" + } } }, "d6382580d57e06e3adb4f63249975c1e63e439afb1528089085bb16be9e0bfd5": { "e66f44bf486dac3ec176125edd9a39b1b6741ccec945cdd42e270d60579a2194": { "jp": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.731Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.573Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.732Z" } } }, "dcbbbc894548f52a28f1dbe2761c66552c70c361ecde98f969015dcee3764a48": { "626e208c3631b5c7c63439845c92c76d534c35cdc0c557b51aac33578683ffb8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.746Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.734Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.738Z" } } }, "e3d2222cd9a6fac9acbf681cd3446dfd1fc4c2866524e4195206634d0d76acc6": { "7dd41862d4380d06fce8d5aee44728bdd5365a42f0ef1ef5d0a91b55cde5c29f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:39.586Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:39.585Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:39.582Z" } } }, "02291322e0d8f494b80f9d8e9c482282d8b548c6ae56afa37d022b164b99b054": { "14c2feb63b9f987820db166804e40ef404c44c5a695f647c2463bc6c7919d96e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.768Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.766Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.768Z" } } }, "13dade465ba8d6e7014eb44c3923f9c834a481123903922ddf6e33bb4ee775db": { "d6e6aa07741897774555a1f0eac0954dd331322344f830c9f304dbdca6fc532c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.775Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.775Z" } } }, "1e6a9268be90fc10ba5ab851817ae61b0167c3ce6990f2a5d9ebdb1ee6eec11d": { "986717639b58978e5f1cc565ca5bcaef17e4babedbaaace23e272cc8c401372c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.775Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.773Z" } } }, "290372a9e8da36b9b0dbc38f3a77bf8307b785738d5ba00a31fddfd12681d63a": { "435164419830229ab742e3ae11858464c9c8878bcf4a2bb3d6166ec4642f545e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.776Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.773Z" } } }, "2aca9c20ab8bbeb98fd4fbb9f62e8ae777bccbfb6417cbddb786afea95af4499": { "866097183364ceafca0351ea2755c4d597ff856cbd6ea28946d96c0d30d28ff7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.752Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.751Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.750Z" } } }, "381da73f1de48015917a484d7c2e45bb2557d1a326b8ff4560cb55a72d1de6ce": { "58f15d2dfce6c37907b066f99ba2b6b1bad2cefdd56e52bb79e7839fed922624": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.765Z" } } }, "40b25bc5f9906b1b6c1e3fb64539dfc6d270a427153142c668cd16a039ebcb00": { "957d995119871468184ae861bc8fb42689e205013b5a1a037710ce22110de58f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.768Z" } } }, "52853976e012785457c250daee6b0280f9e8e88fcbc6a4a02eaf7315f2758fc9": { "35936f5dd5b5ed9baf260d39b24862296fecf4c8c909f41e2a0999a8db0a3772": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.766Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.766Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.772Z" } } }, "5a2a174332bfb9a0cdf7cfe65d8e91568153937327d15d632b2c09aba2aba728": { "e8ae2af14396db3064dca28b82c864d44d320c9ce456d8e334f9b158902bf4fe": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.765Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.772Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.770Z" } } }, "5f3d913c7a8c4ceda7fa835ce07f7441c4f601788cc68210c993d3dda60335e4": { "758768db465ee7223ab470e594b649587b038bfaa85fe340aea1e4aa3c4bd92a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.762Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.760Z" } } }, "6312de56aa12f4e18450ee81ed026306d225a603f4e118425c63d475b267e36f": { "05a0d0bd2cfc6068766a3aeeefe69b1d78a4b4f120052aeaeddd00b384c6828c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.767Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.769Z" } } }, "6439efcca906a994e35faf64afc92947e6ce60d7db71c07200375b94c1ec08a0": { "b590592b2b9abba8d294cbb837fba6f0bf9ec95a8c5f2d979542c7f80d2cae21": { "jp": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.774Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.771Z" } } }, "645c6b21a98f21e01e529f7978413fd1fd62c80916d3b27f0533877e73361460": { "9190dd15a568419dc8f69602836e2291f52c2c494b8a21b5d535f8100ce666fd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.761Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.743Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.761Z" } } }, "81e55d728a63e9d9620a0aa9a0f3152c86d8f4228a2480791e9cad5a8de39a05": { "0a7dd0ec6b5989e1b77f3754697c20347971441c557b816d890bf2b9648ca561": { "jp": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.758Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.742Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.761Z" } } }, "99dad4c2046d97de9c9a10225dad41defe9ab46dd46ee1ebf18685fa87671a2e": { "06b367fa8b09d7fd9415ccb9f2fa0fb03df266adda026a80d2f81729bad14302": { "jp": { - "updatedAt": "2025-11-26T07:24:02.743Z" + "updatedAt": "2025-11-29T08:14:39.569Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.740Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.751Z" } } }, "9d3e2980fe828b01727089a5b229444dc083a28f187a3ec09ad16a7eb1eb6d78": { "27aa4e4f10c34b32aa528db752d7176b33e61894bc9750f14367f23ebacba5e8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.750Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.752Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.095Z" + "updatedAt": "2025-11-29T08:14:49.751Z" } } }, "c491de2fc423ab10dbad66f7c1ced660f15c3f92d3220edeb2ccd84ee9575232": { "6fd80c5323889b79422bdbfe9fd8a32fb4bc56870affd9f018e096ec38fde0cd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.776Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.920Z" + "updatedAt": "2025-11-29T08:14:49.776Z" } } }, "cd73972a4d037347d81b6309d5ebdd4973e65b4708a5a1c61e961a7e349f0783": { "9206b8172e5adaad17f8c6eb0cded1360735c838b0a3363c600dce6cc6abbcef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.759Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.742Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.742Z" } } }, "cd764deae766f8c6f6cfe6b576e74bb1f602bfacbb3821340a5850510d57a818": { "b6693ed657d428f4853a8fcd97aaa704f7a982e5e86c5fb8e5ce372b12c11e69": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.777Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.778Z" } } }, "fd4807eb1e777b66ccc79335d7b822af7ba8bb6dcbbf18e3ae8c53f548f20928": { "455e4d7b70315644264125e3a1e3a329d14b945c29bd48454b379b5247f97bdd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.918Z" + "updatedAt": "2025-11-29T08:14:49.769Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.917Z" + "updatedAt": "2025-11-29T08:14:49.766Z" } } }, "fdc92b085b658968ee987d63323feb976df8a0ac7995cde6f13318c84abd0c59": { "7843455825f9c1828f408c376329311aba7d3c1e14b345e73ef9ad5b93e5b005": { "jp": { - "updatedAt": "2025-11-26T07:24:18.919Z" + "updatedAt": "2025-11-29T08:14:49.772Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.747Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.094Z" + "updatedAt": "2025-11-29T08:14:49.745Z" } } }, "07722b6c1b943ed20bf3ff6d22b1b257d5a8695ae4b4553850f4bd4af3c5d2c7": { "2dcd7f352db514064395ba3b8d67b798124850b8ab716d08d01b773649c588b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:49.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.803Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.804Z" } } }, "1777f3ba683ace75433dd34468539a9e9d67ef87d9f67a65737e86954611e774": { "3acf5735b7405bf65c0204cd16078ddc21713f4e46ed2d0238fb8871eb19b84c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.789Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.780Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.788Z" } } }, "1d262ab176214afd2615461f6d7dcbc00bf893bd453c8cad2f9b625f5b34ed8e": { "2ba14b7281983a683a98e1fb919f7ee7317f7cf3b6fce775f1d12a76ea1e67e6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.786Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.795Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.780Z" } } }, "34dd8a3ad912132054af7846a7af1d6c6f27c8de9f83f63c9354d5a326b6a82c": { "8e8980f8eff31a76117d3215f17a1cba9a0ee6234c2cce918781f484742ac397": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.789Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.791Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.799Z" } } }, "3e5df6c1938919084ef3c24cc3aa0a9f834e4dc5475270adb64943fc1f2c818e": { "a27fbee07ebfb6548a8a222874fceb3def1e176c740f36e8bb3fa452c9d32b53": { "jp": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.797Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.797Z" } } }, "44b3f5422fc4c4f447ece76e0f8066bb34f3affc30e7419ca74089bfa8055925": { "b2e193e55be108c5582fcb93204b7255923583e86eda8e23c2ec5a7fb530f958": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.790Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.785Z" } } }, "4e56f5a34b33c4d6df45c30f812200b60d80663863d11d65cf1450dcca806457": { "4705c821297fd380138640ab626f9d4f597a2b1853b0c84c3688cc33f5d4dd5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.765Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.760Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.764Z" } } }, "80d3d6543dd83a7957930d9045025b4815c1307c41a15c290f7acf0eae734cda": { "41c8219de2e81a989c9aa442e0f7b45929280d651e3c0f00f28c5e946e5b9487": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.788Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.790Z" } } }, "92105bab40be708ce10315bc6e1bb96fe7701142a5cccef12ac85e9bd6c2ad0a": { "f2e5adfccb04fbdb23894f4f9466bac4d65302edaa3ab747b455eca21fec899a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.799Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.795Z" } } }, "98c24f1533f177815a78f76de8765482cd98558271c182e9ea70175821ff82db": { "59cffa3acd22af2478ea31099f73412223d91eb1301172207a61ac51e8cba72d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.755Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.781Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.754Z" } } }, "99393522afef2d07d814a10cdd78d55ffbbf63cbc84caf67a25cbbb6702d7b29": { "df2e38e726ad5701168a107a3233f7e582b27aaddc17196034ab06c247a2cbb1": { "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.796Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.782Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.798Z" } } }, "9c36f42318908cee7394ac7bdffe1f0b4dc78d18dafbeff49083e3a25b9a0c0d": { "e03b65e2958329c1310e8961f72be96a59122375e8ea0f5d7d4a488588e62cf4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.791Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.803Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.798Z" } } }, "a017ed6c9e204f49a926704a46e850a434a064d54ab74c5196dcbbbbf095a5f5": { "a2adde35cfc427e42fa09ac65d97536a831e1059c7400f85820e2263a1b87c36": { "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.754Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.784Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.796Z" } } }, "a02c9804673e90df5f360bc1d48dc4d9b7a2120b7b838de45da8f0bd5dcc7bfb": { "6dba5895ccf72ae7b5a8b301d42e25be067755be6a3b1a5bcb26acdc5cb58138": { "jp": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.756Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.756Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.758Z" } } }, "ae924afae0c519cbcd8b9677316f11c74c707cb0d60447e3f16db759e6be95d7": { "10c1fb6d0471791e0662f2e4888a314601486dae17ed953b398d3ded8b18d82c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.805Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.801Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.800Z" } } }, "bdf6a99d4e97b12fb653dbfa5271fb1f3f759447def3b014fa132fc4a51905e8": { "70ae38ea604bbab68a53eb544cbd0f2cdbeea7e09ac7cd839c84eef1978dec29": { "jp": { - "updatedAt": "2025-11-26T07:24:02.748Z" + "updatedAt": "2025-11-29T08:14:49.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.795Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.802Z" } } }, "d85329459d2d377bcf713c7d13c7c96bd1fdcdcc09d41a049d07f84aa752713e": { "92a31f97c45363963ebd5c9ef1e90cde5e6438c8474d31a5257818a31f192d43": { "jp": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.762Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.916Z" + "updatedAt": "2025-11-29T08:14:49.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.760Z" } } }, "e0a0f58749dbc99214f8d73d23e3e103bb972d6cb973f80440fb3b9b4b81c305": { "0f27725ca1d515bacca9b8aa1e23bb35c69b895c1d9563452e075aee634e4939": { "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.783Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.792Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.790Z" } } }, "e1027f068c086d68bcd19c94e1c760c747883dda4912d769a49634e99a298bf2": { "327dfaab66de7353575183e0fe7d40b596436f7254ab77cbe35383223ad4ff3a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.787Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.926Z" + "updatedAt": "2025-11-29T08:14:49.792Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.779Z" } } }, "ea52d1bf57d6eca260482d6e9db0b3e4ba187ca46f787a3ec41ccbabccdafc29": { "7792c45b9f12363c758a86312cea564fda8789130772fc2a238a348aa77232bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.741Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.097Z" + "updatedAt": "2025-11-29T08:14:49.758Z" } } }, "f2dd481c53ba67e19f970889ce242cd474c9da5ed1571b9d4f5878551ed45889": { "70876690558307749f06728cb6ac14fce7075dc54a6e8cf0695beae2917c50cb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.754Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.789Z" } } }, "f4deb9d37929966d7a5d1040cf9c1132679840850e80dd91a4e56e059568b817": { "e1dc787a6d679d3f64b0e02ce3b61001ea2f9d7a3aab736ee5ae17d2bc4a4c63": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.786Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.785Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.781Z" } } }, "046cf4465fa1fb7186678766ac47cbd78704f28064400523e5b59a245d53c970": { "b13281a5fbb00f880845872b5516d8f9e9039198c4bf031942d0ceec737def68": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.821Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.815Z" } } }, "0cdb3f54f81ff077472e66fb0a57247ee5bf3d2a93abeb493538e948840b724c": { "2beff12ea84429b1b15d3cd9ba939104aa74a91c9770800974ecc16582d6d010": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.817Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.820Z" } } }, "1ac7bdd9222c1e2ffa17fc544f1241b28da0cad7f185b619d29ac27e0aa8c077": { "3f8afe531fdd885aba914642b81b85afea758c6f849a7250bfeebc09887cc894": { "jp": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.789Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.927Z" + "updatedAt": "2025-11-29T08:14:49.796Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.925Z" + "updatedAt": "2025-11-29T08:14:49.787Z" } } }, "2a7b92dadf95743e702b18a30f74eb67e67fef5ea4124220e608f258c6950c9e": { "c66b9e2d0f4d5e382ea43aee7020fd1c7ff170725159ddc185d674bc64b0d24b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.812Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.813Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.813Z" } } }, "2f0873b2704cad58fd2172ec86c842a8262cb2a7c1e6cfbf1e9851fa843f4357": { "d4282945578d91a5ae49277f6ca146ca130e3b3df3c0341a5de3414625c2c903": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.824Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.818Z" } } }, "583a274e308afe89671f40f27b3be757e2c9e98eeb513765c802185f5ec14e29": { "17f1e539b1b6e7759a4aa628833db4667a7e74444abb42880111b4568a28ffe6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.778Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.813Z" } } }, "60a5d6b5624fc995f6807d15e66c5a5b6bc86dc212e1745ef8bef3f5dc15c3df": { "c3d809b05c72707e6bb1947b6db7f23f641f83155cd0f83a5e6deedee8d07adc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.821Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.816Z" } } }, "65c3d5357d49f1617e6e959d8e29071102eaf8d0d9e4d1c2fb7cad70b6173a35": { "4cc1991c7b87b22d25ccb176e3b79b021cdde65ce0a2f2e4414efe519cc65f89": { "jp": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.786Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.781Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.922Z" + "updatedAt": "2025-11-29T08:14:49.755Z" } } }, "6e5e66ee5bbbba58fcfeffbe0603dfd55d38dd278fbff14d70aa5595ee971bd7": { "c4a33214adceb28be9e704611bd58cf7f2b17ce705ec29ba0ffd552d82a3d73f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.815Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.812Z" } } }, "823e98e23e42535697ba133dc5c2d8b57c41a87124d772a59a7bbf545ac0dd84": { "d6ac975393106fe00f3edd51a065ab64a5e99a9aad622632a08705ff68ad4b36": { "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.827Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.827Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.829Z" } } }, "907c6e7bab21d938402f694e7407939915297c82eafd1730100c830df4918778": { "c3a2fac6bf16acdaf76f1ef65dc3317e37696c35df4e8526e1bb887fa5cfdeb2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.815Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.817Z" } } }, "9840f3c84ffc8a8f881de9eca8454a7e8de6c5bd5c30b6a27784816805453183": { "491cb45d3cfae94c2b0cdeaaaf82b4ad9d2198ed681060717d4f79378fc92714": { "jp": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.820Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.822Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.812Z" } } }, "acee1d54d44425817e527bc2a3215f623d6ebd68804cdb7f18541efb76fb830f": { "53b8019634b145bda892aa14cca4d68066dd9ed1223e68c1450a60c3d6af3368": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.812Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.824Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.820Z" } } }, "b66cad86246e7e672bea77de5487ab3238a0cbd0d829ebb54fd0e68f3cbcee09": { "9cf089c5df430ee74bddf608da84394fafc963e1bd03cd0e94fe2c6c179ecce7": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.814Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.815Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.822Z" } } }, "bc72b7a9222edd97db763cb5ebbf3a678bd9d11ef3bc3a2c28fd6797dd845434": { "ab1bcc3128e7fca61edfa8cb48cc7969450a097b52da47b30b191820f3c2d949": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.826Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.825Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.807Z" } } }, "cbf8d771d3e60af84970fcb0a9a3b216e9fa9d6604d8b59222876988a0f9a23c": { "05073dfddb68903600de4505e9ef4203c4b4f5979a1ad1001059a7e6a6c36293": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.823Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.811Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.818Z" } } }, "d259b209c3435b62d81021240a05134c0eea6d95e4ac914c175f7122e5bcdbb9": { "2336e34b998efec4cc83f0643bbd8fc97a4fb0afa00c3343a22139925e777a12": { "jp": { - "updatedAt": "2025-11-26T07:24:18.921Z" + "updatedAt": "2025-11-29T08:14:49.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.830Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.829Z" } } }, "e01a6937e1ad5b11af43515d1a1e66db9e6168b75b5528ca1b7b9d7f3c195868": { "2c6fc2afd47aebe8d703b5147ab0245326aebcd6663db747fdeae29badcd7caa": { "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.828Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.828Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.826Z" } } }, "eac642db564baa4ce1f75ca03dc5a23f44db2e588ad4390c7c3cb746e81f695a": { "4bcedeede08560e01db76c1f8f3c871bd8e8aebd281853aeef86bbc3841fd68e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.752Z" + "updatedAt": "2025-11-29T08:14:49.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.814Z" } } }, "f5ec5f1c0bd0776f9a2a7bff868a443e7cbb090161004e7da40277d9999a5e0f": { "1d3bbb34461ec824f8f745ff89fbbe7930bf3ca75ffcf25386fa8e097845e074": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.811Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.820Z" } } }, "faf7c1208ac6cebd805f74b867ef0352238bb675f4e78c25744706e43a0bbf35": { "067bee4f308eb8fb0ee42187bb88647c1df461930299cda269dae6be1e92e2b2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.782Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.923Z" + "updatedAt": "2025-11-29T08:14:49.783Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.924Z" + "updatedAt": "2025-11-29T08:14:49.787Z" } } }, "010f8d66bb60666d0d358628411eeb2b1df5cd86161855532ace6b686750bb2f": { "0feb62388a935eebc64bf1d2d0c742a3b9d17f4ae18ff4e0ed9f4fe6e68ce776": { "jp": { - "updatedAt": "2025-11-26T07:24:02.751Z" + "updatedAt": "2025-11-29T08:14:49.807Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-29T08:14:49.806Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-29T08:14:49.806Z" } } }, "050352a11ca817f5bab4911101cd95e7ae7dc5d8954cd551028380c728411a57": { "6cc2916b976989ba2663dd50f541fbe9751c56f179ac300fc3381ca3479e452b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.822Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.753Z" + "updatedAt": "2025-11-29T08:14:49.821Z" } } }, "09a42960aa106a95a5cbe49be7b12f9120aefe3ef067ddb1c1b026342239f3be": { "eb1dc019fb90478f30509956caa9e4f342a6e2b031332733edb6a6b927bc71e8": { "jp": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.839Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.840Z" } } }, "12be1e0f0e04bb9eee1f814b983cb24150e4b9b4f2e86f8c6cf33f7dd28edf16": { "25966e125c5b0d0e09bfbe0bb6c4eced38f8afae86050666be245c00bb7f240c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.810Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.810Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.832Z" } } }, "130f0cbb1d6c82f8ae457bc5d3dfde8dafaeebcec17cebf6c1ec40eb99cd1392": { "4b5db766a70f9027101f584180002e5dd6f63ed99aa3d036eafd61435ddb4812": { "jp": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-29T08:14:49.852Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-29T08:14:49.850Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.809Z" } } }, "30c2729724c6bee568ae40c9d3da452323fc101c8c757841c99647d3bf63f057": { "4eb3058a8a2fa3f5f9687fb24c64b384670b5101c5582da6a348ce515411116b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-29T08:14:49.854Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-29T08:14:49.854Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-29T08:14:49.853Z" } } }, "377591bbd1fd99159d49074a1492a22294d47fb29e338af9ccb456a44f4a181c": { "79d09c5dbf435fb10ca29153a98d5b635aee732c2aa61594fcc2f065989ce327": { "jp": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-29T08:14:49.850Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.749Z" + "updatedAt": "2025-11-29T08:14:49.808Z" } } }, "40a262fc5e1c5d47aaac955e5d56710c58b184834fced0236175665ec187d93f": { "d9751428d997f059562f26e9bd7ac68c276f0bbf0c513551408f0513601e3d16": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.846Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.849Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.845Z" } } }, "46dbee6938843b18fe050245cf7379885770dc6f9f8ed8013ccf5222d1c306d9": { "1c26addde8215daf58446cd375e5e150c2d5ceeefaa8b2acfdb9c9c8afb9953d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.838Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.841Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.841Z" } } }, "4c1ad3942b4184430a7d30de866388373d48c1a27718ee8712e351668b5b2c7b": { "7f0ff3de1f2f3ef36f7c5bcbadc179455a3ae55c4a9e388b8148b18a4dfe6b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.823Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.824Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.754Z" + "updatedAt": "2025-11-29T08:14:49.825Z" } } }, "8d0001685270931055d17a8eb50155f983dcec73c892d71e3bffe9004c1cacd4": { "c26606f99e8098f4ed8f1e29ccce89dec0e9cca96fa2536b375d31a3b9fb8036": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.849Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.842Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.850Z" } } }, "ac35f8f55935d4ecd0e3d7d6c02b398d04b18c830570d65f6551b9b4ff45bb74": { "09c8a0f7de8fedbc086a20b8603b6ad2439fbb800e29c34ecc840908cfa41148": { "jp": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.837Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.842Z" } } }, "b949b99783c59002d6d1611f53562639a71143cfb90e027a848ef13b70877e4d": { "65ed1ef87fa32188d6b83d9345586ca7be9701ab437946eec188e8d638e56014": { "jp": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-29T08:14:49.852Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-29T08:14:49.853Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-29T08:14:49.850Z" } } }, "cba0abc4ab65e9d030139163304a053ef5b1fe651a26215e77c9e551fe3b8191": { "62328876676efd5312772f4062f7342ab3fbcced0fec39177d7de554d93c9005": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.833Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.836Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.836Z" } } }, "cbf50a3e7f149ed504ecfb70077f07ab9e2fed847c539a9e27d5aa88c015e5f3": { "2db80f4884390b5613f02ed18bdd9194f0f0ca4c9123aaf5b1a68e1c52e263f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.829Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.831Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.755Z" + "updatedAt": "2025-11-29T08:14:49.831Z" } } }, "cc4204c3e95911221d74a7265dd2e67515e9b01a1b9394863f065398c955594d": { "9538d72bcd29de25ee9a900cfa42747f8ab0f5767963a08a3028ab7f3b189a13": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-29T08:14:49.851Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-29T08:14:49.851Z" } } }, "e15247f6690c752be9eb052c65d6188bf83aa3aa12e45c3969ebd294c52787ad": { "e8049a4edea61ad5f86939e7938566c1c4db909e94409eedf5fec35ac6d46e8c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.761Z" + "updatedAt": "2025-11-29T08:14:49.851Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-29T08:14:49.809Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.762Z" + "updatedAt": "2025-11-29T08:14:49.852Z" } } }, "e979381df042f92438f9f485ef68a9901f7ebe9aae3e09ec14dd65b67c2d842d": { "67bbc03e619fab0b6f99efec8b0f2fb38df1395be3d50b3ed225f0da4b3f4452": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.848Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.847Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.842Z" } } }, "edbc39ef9c56e581bb84c8896ac7b1374e3d19f83b554328b6e8d3d38fe01125": { "1f975f6dea1c15645a72a9eac157d5d94cb767124fa4ad2e367bc8233d6b225f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.750Z" + "updatedAt": "2025-11-29T08:14:49.808Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.847Z" } } }, "fbe0f20b7a71a4be3f802731a84f0eda5afbf565f744180f030a4474dd0b950a": { "acb4ae581b304b32468cac562d7016a47f6ce4fe713075ab12bd276f5d04a0cc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.845Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.840Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.837Z" } } }, "fee41c1b851550b4068c1cdd9e5a18a829a2d27697fe22a9678a8c0d0e87836f": { "5d6d7dab6e54977464b77d2be0fe3967209334b0d1e2cf141000a53098cdb64e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.848Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.763Z" + "updatedAt": "2025-11-29T08:14:49.852Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.849Z" } } }, "00f878a9534e344ca38d2f13a2d0b58a40257c9f7c696adfbc337ee5148c5894": { "d7ae2149e8a1eca5c76f2e499f9ddf19c90a2c840a153acd2e820b96f79c4e3d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.876Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.877Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.877Z" } } }, "262ef21ffee6eb3348b7484a2cb16afdc22c4c02ce86edaa851cad0979d13067": { "5e4f687928ed10c1ab9ee1e070abf78ab7adc2bce9345de9158ca65c8a403093": { "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.873Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.873Z" } } }, "42014f03b2e5e17b4e9d8b4cd80cfebbf2e3bca570177e4a0f46c977d992d00b": { "1713044e3cccefd79213a1fea6cb08cc00fcb5a3cdf023fa1b265af8ff27f097": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.870Z" } } }, "4c05567fa33cc5dc9787df23810bac6451ac3a0fea9f57dbfe51135476f2af9a": { "539aa35729dd5eb9f1172afd319421d880ea5ac2efe1aac243083236a1389aa5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.875Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.875Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.874Z" } } }, "4ec20679bc9c3514801ed7e21c4718d82ab75932df1a07eb0572f662a5730d98": { "86d2c497abf25c94fa112b01bc6df68914ef1bdec7669aac57b740da912b33d9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.832Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.859Z" } } }, "5a79d1e559ea1ad9f3ddadfdb2a43b047724a8158973368a06de949a009e4a82": { "f10bce44ecc97a7f7fbb9e4dd3135a3443539faf27799c8357608d1f78f0ea0d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.861Z" } } }, "5ea715da4571fccc329fc033348aeecf183417b55c28bbdac60956aa1debf704": { "2a8b05277ff4a9cbe8def769d30fe9965fd38e380148a45171afc696a707de97": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.869Z" } } }, "6577565180fdc2dd6b58e525087f761a4a641e5fcccec17b8d198f112e8867a2": { "457a7fd8ab504d03ed723c9475bd87417db7fa6b8d538f336eab293e7c2db492": { "jp": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.862Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.857Z" } } }, "65f86c7c3a06da5be6ca7c02d2ebc67707b92772d464e19a9f17a4ed1f5068e0": { "816a9dda53486f2f740142aa953a0c567c672d1d673898a9ad9493dd248c9c0b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.836Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.835Z" } } }, "69e3ba4ff50b5b7c3475f46f967bf675b4e5a81f02e3546d810018e6a3fe12c7": { "d64fa7ded50ab81c30dff31ff460cf6ba0811be8f95127b0bbec04487a124039": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.863Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-29T08:14:49.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.870Z" } } }, "741985413cbcc54cd08f4f04379dfece525dc97edf44e2f8df78b544f7dd91e9": { "2bd4eecf6148d08318f581143d8ed2830a034f2bd9d72c70252b27c1cf3654bc": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.844Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.839Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.845Z" } } }, "8679a4ec12ab69d4d68a5bb2c5cea4b7f0881bbdd39e33ed0dbce1f7a96a02b2": { "6dafd0d4cd13c07a59291f74e30693ff78bc11afb76dbd58ffb368da7e83a065": { "jp": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.835Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.767Z" + "updatedAt": "2025-11-29T08:14:49.859Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.833Z" } } }, "8a737109d61aff4ff62c3cea1b972f0a7863c8fef9c1f3658e42f4cb31df1392": { "132aab96d1afacf12308b65ac1af9345cb2b097664b24dcf5c773ca74a90c659": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.767Z" + "updatedAt": "2025-11-29T08:14:49.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.861Z" } } }, "8b22e50ae696d72046531764b190a2ea3daa28284aebf2f2f2721e1db7b9a752": { "a3ec1a8f31c388fb6d343bd343994dbc83607b4c1aa74c136db042c2472a32d0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-29T08:14:49.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.833Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-29T08:14:49.858Z" } } }, "8cf48a0bc486c9b8e497ecc604e48b940db90a9be71802444fc6568bc64fd85a": { "2204d84ab0794f79cb34e93c0671da7bbce325d19d8d5bbb80030251d39917ee": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.873Z" } } }, "8f767913276b5f3417959156454a31c70c834a5c7093a2081510ef83903f4795": { "bce52080edbc2ef28e9154b8f007ec28a5e436114ad9041d55ab9bd299d603f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.868Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.870Z" } } }, "961e4fd08064e39aa2526ab854951754ce9cab815f42e5e159992babeeaa5b0f": { "cf7f511889edff19a30680bf294dfbeedaefa3ea56faf9de40db511b5d58efdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.876Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.875Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.772Z" + "updatedAt": "2025-11-29T08:14:49.876Z" } } }, "c237b65e74a71bfcdfb33228aa085209a607cb0227f57e434c617a7ced16d975": { "cab8ecccbc0fcc08ad057ca251274b94773a36f8f2f5c0968c4007592472503d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.874Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.771Z" + "updatedAt": "2025-11-29T08:14:49.874Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.872Z" } } }, "c3bbfaf5ba432f3383f9213e2c564cedcf64baf52ca43663bcd031fc79f65fad": { "46c4379cf36fa439d614c84a7b1f2a6e319d2f3a5e352e7f3079aa72e1634e3c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.856Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.835Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.856Z" } } }, "ca7eb037869880c9ebb1a34c0000cdbfc8fdc9225de1f230ad67b8fceeb858de": { "fb2d804909b58e74a6d190031cfb86ce2cfa560d0444d3bb3d0a0af94da23268": { "jp": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.857Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.857Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.765Z" + "updatedAt": "2025-11-29T08:14:49.856Z" } } }, "d6a2aef23a40b1f742ecc4bbf44e21b915daaca32e6106a813cece2855459b4a": { "c2bbc1291a1d9794a9a8424dacda644c27086e3d431d4f0bb25b88182d583c5f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.844Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.758Z" + "updatedAt": "2025-11-29T08:14:49.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.757Z" + "updatedAt": "2025-11-29T08:14:49.838Z" } } }, "ddcf8dfb6b1a4d5a1ed98c2017cdd7ae1fe774db2009725b2bf3d5ca4a50b322": { "4f4dfdc7521283f8c0348d0878aa061e186e3e3aad4e92d55841f1902f00e3d3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.760Z" + "updatedAt": "2025-11-29T08:14:49.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.759Z" + "updatedAt": "2025-11-29T08:14:49.845Z" } } }, "059de09a546e5fd7f343688a18f5ae23fe63e31ccd72bd1d8e0ef1ccff248e9e": { "e0133670b30030462807054fabd8948f4d58d68bda6f5fc806435ba96fdc2531": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.896Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.892Z" } } }, "0e59ff691e81e6bb5df727b7bb1a30005ab315602d293b41cb391ed4b5409e8e": { "ab3c2315a32f46dcd77506c38fcb11173ad15a3ad7597e20a3af0f8b3c8e1c02": { "jp": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.882Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.880Z" } } }, "1be2e6251cf6bfefceeb9a1d2a2cdfcbca4f3dc24d4303c2a666b520ce7dbc5e": { "79ae2db2ede93c3db9f3aa10741077dfe47e966f67fbb578af090bc05ef54683": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.898Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.854Z" } } }, "240885d8a55bf641313a779462f9d5afe9dc23030aa7263fae65179e8d79b9cf": { "0f3c6f532be1ff66173a6f491090bc401c5f5ad396a065d669cf8be23b790fbd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.893Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.896Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.892Z" } } }, "327d9de85dcf4e9908ef639e81f0b4c26211261cdc7427d31c00d57a68f9ea57": { "defbbc0826e47d88fbafb696aa0613a205a13036670b5b16d9f7262852215ad4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.855Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.887Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.883Z" } } }, "34fc130494be0d69639ef51384f698c85712275c82f72ea0884fc912c61fdf98": { "92c9764efaeac8ae2150358dd44c1bb27f41eb7fecfcbaeaa5223b274ca6abf2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.882Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.855Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.881Z" } } }, "3d292af39191f27d31948c49e58c34422323914d2d835dd3b8be63d271aafaeb": { "6c24a188e7d85e8dc525f5000fb2f41b08e17a821ce60ddfa9341db9802fcdb2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.899Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.897Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.897Z" } } }, "4b025a8d2616c548c48183c20f38fd63b3419b7d2754a037d1a3a71de57c5a3b": { "ff303dcd7cec8ced40bda437d563bc42f245742fe9f5d04eda4a24a951b0a458": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.894Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.893Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.893Z" } } }, "4be2dfff7ee7eb8ba7e00bea4338d4b73e59739bd67763683573c2c8a87c9e3d": { "37c83798ddd19c1e72b3674657a3635ca49e5d5bf74e74f2fa7bab5c89d58316": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.933Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.934Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.934Z" } } }, "508c2be06359376eba3e09eb266a71fd1a64aba5ea5c127642c386bdcf720d00": { "32a1e97aa76cb271770dca75fd904e715623cf504f26d889bcb51a382ae083e8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.894Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.896Z" } } }, "6547aef5926a6b2487f43dbec05e0957fe924c3749b2e7aeeb9c8724921310c6": { "d72d4d5d1769fb68537cb2b0120c647b9e45e7282fdf4303b4b3b3ba33eb151f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.764Z" + "updatedAt": "2025-11-29T08:14:49.854Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.893Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.899Z" } } }, "742de82015fab9560f32bc67cc0f07a9ca9e1ed3e7aeb11eb4303fa8a580185f": { "e8e388627f1d46545b74abb196d0b01e87cea3cc02063cec9c7cf6835a4f7d7b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.856Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.855Z" } } }, "77a9c51767cd665f3dd2df3d7ddefaa1effd2f1271cde0211ccbb68de9869a6c": { "1c1de24396b6e6f16f0f9b41c9ee154414738e50d2c294ceeedb57d2b780396f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.868Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.869Z" } } }, "90aeecc84affbe1a94ebd79e7e3236a66f9c627e327fbaeb50f05aa43d716a7a": { "a7b61a1bd22ae77b9b4f8fe2bc248f5fb8a900c9c853a0f4b28e2114edba6edb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.899Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.897Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.900Z" } } }, "9815f463df07221f4071a1a1bca594afe93b27adf83236c69b1a77b1ebe508a0": { "007c21ba67676302542c1fff75925930501f8226edd684ec93ea8a9d480c18c1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.901Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.902Z" } } }, @@ -3880,520 +3924,520 @@ }, "471cf465239242ec9f9d784205ced7fc1640f6da4c8228d46163e7757979aa8a": { "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.881Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.756Z" + "updatedAt": "2025-11-29T08:14:49.831Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.880Z" } } }, "af79bbae5029e0964764673ad906f12ea5d0cbd9f6358c69ef5ef5e1e2abf9c8": { "2ac53c6a243d501aa141cc7a46939a9b6d8d89958a13b73f7e3def4acf386114": { "jp": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.899Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.898Z" } } }, "c26d90fc85acd6879286c1468a93acb164acd86eea2a927516015902a9a832be": { "7cecd0f5d3861eb201c695566fbb8efba35f90080e6ff53cfb99227a455a7433": { "jp": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.894Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.933Z" + "updatedAt": "2025-11-29T08:14:49.895Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.934Z" + "updatedAt": "2025-11-29T08:14:49.897Z" } } }, "c8e894dbaf5047cc3cabc950a4a8ff475057f2bc769f6e66960185717ec18b52": { "53f949f10b8d348067c1f595ef08a9cee2ae03679b3e38fbfe1a67bd2cf12eef": { "jp": { - "updatedAt": "2025-11-26T07:24:02.770Z" + "updatedAt": "2025-11-29T08:14:49.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.869Z" } } }, "d6b97ab54d7597109de2eeed733aaedaf2f8744ebeed7ec1031b8460e9c545c2": { "60328591af08fa91508ef8597f7a9b54e083806e1906b2740d4ec5802abe7ecd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.935Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.936Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.936Z" } } }, "dc33a2eb5786282387491dfbb49c8ff622ea41f11b3278436c7f82ab857f0228": { "6d34c7aa55a8fa5def4e3f2bff389c666852c48291ebab26dbe11069e1977d67": { "jp": { - "updatedAt": "2025-11-26T07:24:02.769Z" + "updatedAt": "2025-11-29T08:14:49.868Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.766Z" + "updatedAt": "2025-11-29T08:14:49.858Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.768Z" + "updatedAt": "2025-11-29T08:14:49.861Z" } } }, "0b6d9c8bcd38a3dcf622f85a9b9f97289107d754955596db63086c5a1f0de013": { "62bc03adcac1853c2ff1d41eab5ec55613571c9634311e2e305ff20b78db334b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.147Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.121Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.147Z" } } }, "13e624cf649963b0430c85b33066c42e9a463e53696049fdef557841854d666d": { "81c2903aa8b7c3295234e5c1b7fdf2be7dbc55fdc9edac19c3d4675fd1215205": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.150Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.152Z" } } }, "2ed1c4bf7fd0d1e9a3aa0e5f13e3c86bcaa77e12c79c9d2fd35be9b8cb485fdb": { "042d7dbf05f1c54ecb628a3aec1b03eb4e2b6e21cb8aa57b9ada88ffcae4f8df": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:50.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:50.010Z" } } }, "3d2059239ad6af1a2ddfd59349dac15c70518ae11885267fd488f16281699791": { "bb8598cd736f9055ff9d8ee57cfbaf381f8b9b7dd5b8bedf4b973dba8c441a2a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.160Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.159Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.157Z" } } }, "3ea83a8ef84ec6bbe25f2090619db1abe347ff2b73bca590d6c93d68a42e4e64": { "d03f731b06fef8fcaf928f6e3faf509894d47eaf5b4921a111e9884783dfaf7d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.150Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.152Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.152Z" } } }, "4ac2aa31459a0a92af805200fec9ac7d528d83083a8813c71176539ce30a55d5": { "47965995534ac0fbc4b623464960445019f4dbe230323078f5ba06347fc0188f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.156Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.159Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.154Z" } } }, "4ada93142f1fa23e960fcf0c89e6d17aa2696229485742f034de4ee6593c2071": { "2f19a7e891dd293775fe6638aa903e735c6029210bbf3a17860c69e6f1f6bb6b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.120Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.119Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.120Z" } } }, "5e4520555f04067ffa7eb5af85e61960bb9ef0b5e53db65b7b0471c0eb67e3ca": { "7bb096151a00169df14ef9af359bf6d8949aae217704606f9a6b10a44d8ed7c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.149Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.150Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.151Z" } } }, "736bf0149d53b024ca3bd9e7977f0bc63d265b1f25ebfb6dfdefeb025d67a838": { "dea965238a83d73269b02031548818dad6e76024fdd545d4ebfad71b6ea7f2f6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.150Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.151Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.153Z" } } }, "78374142cbe93e8f6c7c78c21fae25fb7304d36492b6bf841f120cb0b757622b": { "8c65e21fe9e7b63afe26dee2f144ad334fde661179f2df54cde98ef19f746770": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.935Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.935Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.935Z" } } }, "7d77ec1ad6a5f022e0b46f5c3c3ce2c3fea37ff042d1b5dc03023407e067e3da": { "a014826091cc7de6ffe26de700b6870df49479656119a1c4582ab3ba9f32f66c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.007Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.008Z" } } }, "8c7d4f3fdba3bb4edd06686b726948493ddc13a3c70be44e45a5101013e47060": { "e1a3f32eec379181f97de3483a7955652a71670ed2c2d3ea34c65b17fdc5961d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:50.011Z" } } }, "98ee65248863652e985d674cf1372dd020bd6094b7f3998ae6f4a646d94892b6": { "1bd995b679039ca6bce9ee0b09736ef8f967620b8b89d51a62c70a4d312caa42": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.122Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.121Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.121Z" } } }, "995a2e3a8b7d9f74a6263555c02ac239faad9cd474831a38bb8fbe02a8eb4930": { "9cf1d6f4f93a189585be6125df675ba7e1d73f8db3dbffd354c683519bf24dc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.153Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.154Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.093Z" } } }, "a0768d64d8480213582b5d2b019ac82a6fe9572e3115c707079ccd2a6665834f": { "f53e89f4c4f5f43c018862a8bcb2458cf38a59a2eed7d3a2bac21d2ed57cd772": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.094Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.094Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.094Z" } } }, "b5acaeeec7ee7e0b3d8c363ae84792dfc90953fe82cb345bd9a76003f6857008": { "becf724869353de9ac0fbdf72d34274bf02c4477ca8efc26bf383f25cab477b9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:50.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.008Z" } } }, "b6cd16941758ca4a1cd018e80e59496c19b7711675f9eec3946a989810da8301": { "def5f58d34f9e59ee3bc906fda67f3a9ea90982c852224c86d9d02f3eb4daa81": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.151Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.148Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.152Z" } } }, "c5c9fb1e01e8fd89820000126b65de13c1b1aa7723a21af8dd6a22b0c6ce61ab": { "f0bcc513afa858c10cd2907f4b418305889e8287702cf9cdb050972831c885a7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.132Z" + "updatedAt": "2025-11-29T08:14:50.151Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.149Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.153Z" } } }, "ced886ccae611b5ba4d14770da1f424b55ef56a32ab309f10b5ba3de061a0cbe": { "4c6f8e2e7974ca1e44a92dea680f0fe4823cb3dbd478d406583065fef1965c83": { "jp": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.978Z" + "updatedAt": "2025-11-29T08:14:50.010Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:50.011Z" } } }, "f3dfcb7d93e8daf7246f1d7b55aef72c87092941f169ec834a03a5094039d22f": { "30c8a47e6bcddf07ce86164218209c750f1bf6a65eaa190202477bb3b35f8686": { "jp": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.934Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.933Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.105Z" + "updatedAt": "2025-11-29T08:14:49.934Z" } } }, "f84c373cff7dbac798db4f00e0218085b87659f099e72d499856efa42972f195": { "4b9492d3cf50402946edb0019de92a07ebf67ee41426a0a31d7cd82149581a9e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.148Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.148Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.131Z" + "updatedAt": "2025-11-29T08:14:50.147Z" } } }, "018a46e784f4216bc572797ae4cfd925900c11b01082ddf5a2c9b5ed08891d85": { "0d31eaa79270bc25ade146c9f275b342537708966bfbae7622a921d0c569a2ee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.136Z" + "updatedAt": "2025-11-29T08:14:50.167Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.162Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.140Z" + "updatedAt": "2025-11-29T08:14:50.178Z" } } }, "171b148b39ffa6bfa68154f7f794bc9828036c905ec6ea0ed3ab52ea0ab68098": { "9b71315bfc1a5504ea574514ec21f8d0b8c75e646482a4fa10456513e23ec3be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.221Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.155Z" + "updatedAt": "2025-11-29T08:14:50.227Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.223Z" } } }, "24ff6950696e941c133754804fa0f7502ed10e3f273f7828f34d0ec98cc69169": { "9ffff4baa30bb8aedc5b7c4bed60c32432037227f50854a8cf0a554ca74b6742": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.210Z" } } }, "2de6c7cb85bc8ce6037011a7cb84ceda700e54852ad5f8048c1b021e9505cfe2": { "cffde22dd20a99321b2469fa4c5f889ab0623f7597c7318cb5c82cc569be15bf": { "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.213Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.216Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.216Z" } } }, "34539b13bc46ae1ff86399ed0b4beced83470a47c23ade3688d97729e239c69b": { "1227956927c2e159479174df3466808d9bd9a1f2cdd1dba3233e8d80391d27c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.216Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.211Z" } } }, "397adfde7a860a0707618fd95e8f1f4db83c3ecc2e6141f24b64af0162bec70a": { "fa85899ec41f9998773c9e4dcae84709a75245ca0e0e75850cdc76516b7fd66b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.141Z" + "updatedAt": "2025-11-29T08:14:50.180Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.147Z" + "updatedAt": "2025-11-29T08:14:50.184Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.138Z" + "updatedAt": "2025-11-29T08:14:50.174Z" } } }, "439776d4466dd70e3c5608271d0bffbce0782915faaf2fea75fff7b8e7835bee": { "eb302a76d12c1319056a47c6302ef68febf3a0648e4ce4f94b2b9cfe7bec8c8e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.222Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.221Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.222Z" } } }, "5efbb4c7ed17158323437048f6f32b54a1665e8008c3b499bc27160f7cbf02df": { "06c63df1edaffeb10cb0def08a755d71c765dda9e99144cb3ca1eda2e783c187": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.162Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.162Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.163Z" } } }, "61b82c455342cbc02f4a1d8651204017609b443fce1a7cb57a4831730d7fc050": { "1d27a882dcff09d3f22870a4f6707da298747c547d36d3db2d61ebb22253f91e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.155Z" + "updatedAt": "2025-11-29T08:14:50.227Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.156Z" + "updatedAt": "2025-11-29T08:14:50.234Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.225Z" } } }, "65514e61688950cbfdfadc40744ab73dd695de039206e57d83d48b00a2982161": { "c8edcf2ff1eff165beb006860951dfee61d76b4197857f2fbc085e60726d3e38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.156Z" + "updatedAt": "2025-11-29T08:14:50.229Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.139Z" + "updatedAt": "2025-11-29T08:14:50.177Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.147Z" + "updatedAt": "2025-11-29T08:14:50.186Z" } } }, "745a92a844b6497c0310ad16eb03df90d655cde8d7482e58f32d1af9a9c6e68c": { "ed4640fd150472b99b01119068e79ab5dce8af8145d98d8e1f847e482439180c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.160Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.155Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.155Z" } } }, "7ca5e1494be65fba41fe95ee7a3461cd0844038fb74f44098aa4e3f88607c562": { "ac68f255dfedba5a9d7fc4021983a5c3dfb83430f46eefe29bc3204cdf2720ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.204Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.210Z" } } }, "8bd7dd424981003d655b71b52a223cd72ca57102e28da0b8baca6e8ed3256122": { "8c69f1a1f0d38fc584fc63dfbf0111f2d94d9ce8ad28c47314863119988ad693": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.119Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.137Z" + "updatedAt": "2025-11-29T08:14:50.172Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-29T08:14:50.189Z" } } }, @@ -4419,343 +4463,354 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.158Z" } + }, + "32f79342fda1521b32c3cbd5194d1c9682d16a53ade8cb05571f8a298e7705d3": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.195Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.199Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.203Z" + } } }, "9b90a0dfa5536d6059d87dc8f5e817097c8b7bb53db517bff51a83c3e4c282ee": { "3e080983011ca5e98fc432fd4170067d4807f3aaa1e1114b8ec36d58af28fa38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.208Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.206Z" } } }, "9fe1ae047d397e67707e74c6e97afdec367a2fb4cf27a1ade86e3e2bebd7c4a1": { "9bf44240bd8b0398201f8cc05ed363d4bfa70d08d267473203007c092efe5287": { "jp": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.144Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.129Z" + "updatedAt": "2025-11-29T08:14:50.142Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.215Z" } } }, "b12e51a32d37bb2fb10917322e67f8c70cee8f595c143cd1b629cbf918f6b7b1": { "5014ad055f5a140206335e375c472557e174c690fe089774a9aa8c6d57d28567": { "jp": { - "updatedAt": "2025-11-26T07:24:19.014Z" + "updatedAt": "2025-11-29T08:14:50.116Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.136Z" + "updatedAt": "2025-11-29T08:14:50.166Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.141Z" + "updatedAt": "2025-11-29T08:14:50.182Z" } } }, "bb0a1d7136d43d7b6bb4fa9a54f344ca0e81896a5eaf9cc6ef57b8c3aa682779": { "399cd03c18db8759846f978c253d288ef4caab87adb1838ee5aed970412744bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.206Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.213Z" } } }, "c9bb01545754a986ab5cb4d637d8745f995e8c5243183cf90e72563584cc924f": { "efe17e7594347ac3238decf2b1daf336a87a883f6d30bf4a916bc5ae75b80dc6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.156Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.154Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.158Z" } } }, "e814a9ccad02d86ef7c915fb695045529731c882788157b39795b3d624875c39": { "e078c263c4a0f84949c189cd1b90be6b54b0117004a43d0171ca1e7dbbab8fa6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.160Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.135Z" + "updatedAt": "2025-11-29T08:14:50.161Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.158Z" } } }, "f4614a808acf58ed3907dbc80a1d159bc107dde839623cbee9705514996e1fc7": { "ad253066ead1dba2ae292160fbbd6c6d76963231fdc98e27296a51ffab627b05": { "jp": { - "updatedAt": "2025-11-26T07:24:12.134Z" + "updatedAt": "2025-11-29T08:14:50.157Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.154Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.133Z" + "updatedAt": "2025-11-29T08:14:50.155Z" } } }, "fb63ffa66c1f033c420fc44f068aac3712f16d06effcb9b76446564d05a24f47": { "1f15e6976c3b57e0c74fc54faa9674d3ad5afb9a87efa0a5368573923ad33611": { "jp": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.212Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.209Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.212Z" } } }, "168f630aa6a5caf3759f0040f89a49b660bf997cba3f9bb07f93ceae7eaaf55a": { "3b9ccf775a7eb6ed27d87bbe61d94bd4d43913c00f26010a4b8706daf4a6a956": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.204Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.130Z" + "updatedAt": "2025-11-29T08:14:50.145Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.208Z" } } }, "23e27d61b6423512c41b26e6c3b22921e93b5b301057fe1f453a2c0d3c1d15fa": { "7a7f792ff342a20689f60f0f265171128a171dee6f6e5a078ebb83a2cdf6ed03": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.238Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.238Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.236Z" } } }, "296596880e307a8996c1b3d2f22b414f048332caf4d2083980ef5b77a8a5fdba": { "8891345d058983824a4006d332ff1e3d458871da85894bef04abd4b4a563fce5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.254Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.253Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.254Z" } } }, "3147fdc69c8941ecf865e47d9d8db4472067857ced28a4db9f1732ab44a9e898": { "89c5c15673bafb792cce9d30449c0c07581ad4fc443060edb182f1287d36112c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.146Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.211Z" } } }, "400e0d7d9471a5d2f998a13e2c607bb42e5b9c72e742d7aeb05f4ee1b2071baf": { "04b93a38ca385c15ca8270dcfa15d68a6941678bdcd2f76c2ad4f06bef8c33c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.221Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-29T08:14:50.145Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.223Z" } } }, "4088be7256afa16e0829b465fbe851d2600d3bbb21c2610210c4075f713ee668": { "5263f7887931f9fbf63f2e9b15b7ccdd2c7157a7fd13cb67ba7bb5a4724f5c9f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.250Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.249Z" } } }, "434c8c6575a1c96da70aa7b25b8f2386d3813854c5fc71c4731982bf93c5b551": { "33868413cbf230f1914b6622c0fa2f639a7ea45c3142a4368aa173e8a03fc411": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.247Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.251Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.252Z" } } }, "5199e54b28e8b206af31f52654ebdf21657caebae6cfe9e8a655ac120217243a": { "cce5c749f00809c0ebd64bf0b902ba923e07ffe3f6cf94b3e416613a539be455": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.191Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.237Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.192Z" } } }, "53036f27fabf8d446bbd29d9cc70a86efca0166f01d8c0a80c2e5887bae5dcc7": { "4af9345e8b4d38c273b70d4810c616586320dd68b576345f37b88d764fc3b31a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.252Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.253Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.253Z" } } }, "7e14895b92e515a566c49df3e172fa8ef0794a3911f227fc4a71c6dba5f490d7": { "99b76fc928beec586c17a5cc43f58eacac997ef5729cc011bbfca37d37c70a79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.205Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.204Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.205Z" } } }, "818f1c114e04624a9ce346e723231683afc9efb77f488e698cfae3f76123798c": { "7802fce1dd531f1d9274394e1014f26f608015405f1fca427d28159a91303ceb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.241Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.248Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-29T08:14:50.189Z" } } }, "89be4ef20c9e5fe95e7e9565ff5aa903eef3eacf9ef5bbff1fa371c4ce7dca62": { "a6c4756c4f81974e9497aa328cf4f067d2e218a364817e6b3353285d9d897dbf": { "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.243Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.251Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.242Z" } } }, "92e7d4855f47bd7172f2143c5bf24c013dcd99fd681ef3d53e75a588365ef40f": { "4aba2abdc8ba16a13f0e130fc8a1c260887158a147901de0d5f87498741d53f4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.250Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.252Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.251Z" } } }, "b82ca3ae71e7ca0bff5a8a1a958e415791b51606240790fabac0a24e99e5a8e5": { "4ed62ba9027cfba50a02993f949860b2fbf583b0d2272c93d49202621bd1c2b9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.218Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-29T08:14:50.146Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.219Z" } } }, "bfa678e1e376ec015ac9221d88b1803ce7811869f141b22241c78abacbd547fe": { "8a6e9f00b55f3b0576f01c6ef20c5163ebaa186d9ca2ba3a241ee00d1040de72": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.220Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.154Z" + "updatedAt": "2025-11-29T08:14:50.222Z" } } }, "c0113692c1b839bd1d0b553b8a746fd8e901fea18a0365874a7d57b5c47410d1": { "fba4fb769bf604e65c2e862ea128a3429d4692c33e0b8ca43bea57e16c6781c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.192Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.193Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.149Z" + "updatedAt": "2025-11-29T08:14:50.192Z" } } }, "c2fb7179016e62efedb581c777d5b3e618da9208a31a2d9a164ea0308a1143c8": { "795fa89dca9c3b26ee3aeaa8be7c8410b0abd1d329f364f1777a29c3bf6ae7de": { "jp": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.222Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.153Z" + "updatedAt": "2025-11-29T08:14:50.219Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.152Z" + "updatedAt": "2025-11-29T08:14:50.218Z" } } }, "d853a1e0bc487c020a87d920028e6165d0cb3cc395e7fffd09047dee78720588": { "adec2ea632fca207a13f7608230126d9fa9e97108c03848018e30859a7144104": { "jp": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.150Z" + "updatedAt": "2025-11-29T08:14:50.207Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.151Z" + "updatedAt": "2025-11-29T08:14:50.212Z" } } }, @@ -4770,70 +4825,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:19.018Z" } + }, + "2e9fd2d3c490bc28c36a5d0ec21cb93e844dfdd34f2eb187c7f84f44c2e7cfbe": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.238Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.239Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.239Z" + } } }, "ed8b9299efe36240a44450f98875fb20ad838d0c4a97a4d6b56749d87a6c69aa": { "64421077253a2367928552f8ecfca1500ab1a3aa6470e26d805f6aae81b107b2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.148Z" + "updatedAt": "2025-11-29T08:14:50.190Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.240Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.190Z" } } }, "f2a1cb5fbab7a29d73cb9cda36a728e39c8c151cbbf17216e1d17db9fa27ca46": { "476a6d57ad70a1da9a30da84cb37903d939c7a7a7081a3cf8af22e8a9146c1d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.237Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.237Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.237Z" } } }, "072403da5aaa82666ec2ac55aba2660e421b6711c6cb70c42b4eb6038b58554a": { "aa38bbbb12b1ed94ca667358f90437e09046357f71a6d1e0f8a508d57a4b5568": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.248Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.249Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.243Z" } } }, "242c81539a7d39347e31852ff01c14ca7481b428f62ec2a9a8ef8923e319fd70": { "ff718abf7b9337cb72f9728d2ee59f8366fc732135cec35be718b34d911ff036": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.340Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.783Z" } } }, "2ca1f06020b55585ef361cf2b43c9aa9e23ed32e9d0a80f58141cb6b357e2508": { "e8f70f164f2c79a05e20f2ea7598ea71abec4dd9a196fd990cb3b9f5f5250252": { "jp": { - "updatedAt": "2025-11-26T07:24:19.017Z" + "updatedAt": "2025-11-29T08:14:50.249Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.244Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.245Z" } } }, @@ -4851,117 +4917,117 @@ }, "6e3e04cc7119c0602d04810abb60bd15340766476b6dd90c89c802891040b74f": { "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.260Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.259Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.257Z" } } }, "516b68aad0c74f76c3c12fe30d1f7258569a0b66643da4924fd24d791f072074": { "55acd998caff6e952b47ceb372ae02d24533c50e2c2a2d341e32d84c2b4a01b1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.785Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.307Z" } } }, "52d9303d908cc54e70744ee1b1e2e09e4cf8cb226c9925cebd341f9cac387001": { "71eaa12db00dcad81d12c60186209b5ab377404a70d4a18ee7d26b6ece5ff741": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.343Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.342Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.342Z" } } }, "576d725e93d552fa1d974e38954e0acf96bd1d7bdb7ce394aea881a846161589": { "5d83a7ec0232591623da4893b116014b1e37aa25bdbbedda273544d85805f34d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.256Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.255Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.018Z" + "updatedAt": "2025-11-29T08:14:50.255Z" } } }, "59eee6beba7ef7f4b2b1ab657b188c2ad938982b20b45febf1c21c4c7b23d916": { "379215258832c5b1b0beefd2f0012d327e4907cdb0e2564650bdb42214e2e265": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.775Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.787Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.785Z" } } }, "671c3c038f46cc2a350b67ff548f3064f3440f0912e1cada9cdbe60cb9c2971b": { "35a6b4b0da582ffce53ec6d62ecfa840b3fd54894bd3063441a0fb637cfcebb0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.239Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.241Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.240Z" } } }, "6baf2f9dc91a3aafdaf603aa070b6d303e0ca43f60c45975bd126c795f51bf6c": { "21159c4739b98c5874cd3f6e95850d863ba6be6c3a8978b327a9bef2d0bbda5b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.340Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.777Z" } } }, "85b69398b5611cad0ed97b26cf9ee7ab54989a0ec7615bc3aaabc2e0ae3c33ba": { "3069fe2c05efa1690a8fd9f6e9519528b8d09fe75d6fe914e613400f223a3e0c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.781Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.782Z" } } }, "8d4d7b2200cef950ad1bc09f8c982ee5def76cb7de03b7265ce2ab6d4a48fc07": { "782ddff0f1b9ecab869f6fba2c946f9fc98a65b12620a1eeeb09e7adfbdef623": { "jp": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.240Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.245Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.244Z" } } }, @@ -4979,1950 +5045,1950 @@ }, "f82d62c4dc19a5c31661c04d7a069bfa0d236fd3870382dd08d9cdbb13e02b93": { "ru": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.259Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.258Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.019Z" + "updatedAt": "2025-11-29T08:14:50.257Z" } } }, "b326d89975e77fc4fe5e09c43f7d7dd72353ad2de4c76604cfa709d60f39cee1": { "41f6f44d6560ff4b7b4a8919ea06169035e1ab5f00669a7875013466734ef23e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:50.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.772Z" } } }, "c0388925c5cbd757f80d526185840b27148d3d9f44442adba2d651d360e9f8f2": { "fe663d93e8ac7ca2bac8f4753fad3eb0d0150631ba2d2c4e3a85eb5fdd27dcf5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.266Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.266Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.242Z" } } }, "c8f7fa8f88301edf51171572623222cac00927836c2b38e0b936dc6808969163": { "0bdde8ad92c2b56e1260138b52e278dda8cd06b984643902593d0d0cd7fb1ef3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.191Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.246Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.246Z" } } }, "cafe8a479283375a185399d18cc4d2444fa4afed320fccd79e4b21ccc00756f3": { "9b037a637113b68681c5e24a1691633df3e7e4ab645c3430fdfbded768ba8392": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.342Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.283Z" } } }, "d66c9f0b5bf68d56ccdb239450a2def7e044ee7dbb38a6df724002e0578ee93a": { "b17e684424dd7e3c1032466ae89d5b4b0753b2b11488a3c5480069b467bdfcd1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.241Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.240Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.016Z" + "updatedAt": "2025-11-29T08:14:50.244Z" } } }, "dfb826f61e2d3065b29aed9473793d5e9482ca0064907298ee886dcc849a2f30": { "095ffff652d364d8d2d207b5c2495c8f89b149222bdc9348bc26c7785dc49095": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.779Z" } } }, "f7ee1a75569ad87e689d0ebfbbc64afa80e4517625c27676aefe4a63952637ab": { "62283411a070bd19b48c75ef32990fea3d01df15e6ce74c1ef8474a50f977cdc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.788Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.787Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.787Z" } } }, "fbf74a86f665ee9aea4f220700429c38da217030a00f7a905ec8171cb63a5f49": { "379c9b448d13ae5617010e62fc925030e206c603b76eb2ab7ab83dddade8d46a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.779Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.771Z" } } }, "1204bfc3bd6e857b87b1b5a9dd1156c45498c5d9e64e68cdce6f8dfe4987ecfd": { "373f45a715a82081f8e2a3779cc63f874936a6ff999e1d2ee5daf6d9f720ace1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.360Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.363Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.359Z" } } }, "24ceb06f47cf82806e35ac32dfe18ca24087b06cffbe5021739286a56c793b1d": { "4ace68b0458a094405f4c0fd1dc60a5ef026a1a8639846623e86fdff84ae8507": { "zh": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.362Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.357Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.353Z" } } }, "28e0a4a4c7b2f5abc28938acf55ed73d8388d95376bfa8dd13fdecd6bd439e52": { "7b5571b023d676e2979970ede929e965221ec27898362e89cfb8519c41cf3898": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.787Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.786Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.786Z" } } }, "4a932aa16f4947c7ef17e42150e4a316f1ffcde90dd8415e4c6bf929ba835846": { "49a5dd5634212d8130c73ae1cd817b3917e322d14b3c96754d53df3d228cd836": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.784Z" } } }, "4ca74029aba5db691ad0ec824ca43ed7d92a4d5b9aa1573bc7116ad308b92cde": { "f97238d94d5bdc95a6129e0715198e8a6b955a58fbaa7da4e12e9dfa1348f135": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.356Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.356Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.359Z" } } }, "4dec7d00a7f493694d866154c843363d42ed6db4abc5dfbd010fdd90bfcaf67d": { "97c6b3e272815f6b0861c69df01e35d4daeb9dd3a1b81af896dc36740a178f9c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.785Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.769Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.774Z" } } }, "51e35897aeb6c746cdd097c39d7d3d876e62dfc0623f6a3c97974b88226b3a00": { "07eab7fc4983c7ac1da23e4f9c0e0aaefbcbbf2c5cf96b5e1af6a93d9eab9a6e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.360Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.365Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.362Z" } } }, "6faa2072fc3d3a3770d528540726e0fbdb421fa84e62c668a817741883d26440": { "579c8415475bba272d86e61362d88b8f1304de7a7411591652572d7da45590c2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.370Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.369Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.766Z" } } }, "765183c2f979cd15300174a6cbeab761c53e4a2b979f9c1c628c55c69015ae5b": { "aaedfcb72829b8339998ff9e62eb6e54a69755858854804557b9efc3496e73f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.779Z" } } }, "9bd2367031f4ad3ccaa40d2eab23421bb90a176c87631c89d0565908c1c8129d": { "a3d661f00c76cbebde5bfa666feb5af47a4620862c09e2ad2d7ea88d84d8c98d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.773Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.776Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.773Z" } } }, "a61623fa5c7f672b85c730754446bc1a65a53fbfc1fa7eb64e0779690ac3049a": { "e82d7f23954deebeb66e19daaed4363f0e28569d3a42d1de12ffdce2ad3976fb": { "jp": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:39.787Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.784Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.777Z" } } }, "b0c4a6145c3f1c781d51adb03f8e4996331d1159cb14cba9c81b851b728253ee": { "d161896a6a88f3dc7f188f95f5ef37b65e50579afa43c7f21b1656e07c5010a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.363Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.366Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.368Z" } } }, "b6071010708dd9f91932364b3060488201176aeb008d6ba6dceaee25a82a0a2d": { "2007a45c3bc14f5333a4866ed3de37e1c4ce663c0e2b1fd31fbf2030fed127e0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.366Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.778Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.775Z" } } }, "bf4425dd6cb86116b19753768a5420c28985c1fcb442ecd1b5e1d37e6ca2f98f": { "e1eae6052323b0cc1ddca82febd2af06bef603d4809bc06fe09b3e2b0880ed2e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.782Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.782Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.773Z" } } }, "cdab7bf0d8c24f10d2d5dc375305c22f728e0f36fa1e29fdd04c99781fbc6cd5": { "083150d2c3def0d0736d5dbb6a695b7ea5c691ce94fcb5f5e84487727895f4ff": { "jp": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.780Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.781Z" } } }, "e93967fcdbac2bba7b89b4164ea987452cd09d1070238a59a238036fd94e8618": { "94a465a749cb716926a6ad2a66382c7591719aa2f9d792d5910f48efdc1e20e5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:50.341Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.776Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.772Z" } } }, "f0e219e3fb45c878fc0c3bc00fdeef1c5dd9c6ab75d1a093efffa9a0a6f002d6": { "f70bbeacf6050f44afacc1a4872c5eb1d3c4e9df491f0c452fdbd869057adb57": { "jp": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.784Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.775Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.040Z" + "updatedAt": "2025-11-29T08:14:39.776Z" } } }, "f39b12efbc001a35d87891fb78f7cc37fe27f3e15abe1f7329d97a2afc1e55dc": { "abf20812398c31c2895cbc7f3902a957857e45b0abdb831d7765f7268fac0928": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.358Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.356Z" } } }, "f44395a43048118c7fe3d4525c225cb5397a7fe3c98ed8d8b8fcfa08e86d5620": { "9d5c04c8e9de527ab629ee91b9ebf0d572f7863c4f88f5651c671a5fff9df8fe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.364Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:39.768Z" } } }, "f646fb33e6fccf32e79c0ff130a3e33907e8822e1555b98aa42e7679988ce2ef": { "9c48604413e046bab5cde9bba416d6f9bcc6a7ded493b091e329a27c18ad8b0a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.354Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.355Z" } } }, "fb8e6138536700f07eca78b5f157d45b6036f77f52782711c91ba183897b4c9a": { "85d1f9adecaf2dd9004cd1e79d1ecdd61c68f65285973b86e6e2ba31e2eadf2f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.041Z" + "updatedAt": "2025-11-29T08:14:39.778Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.781Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.042Z" + "updatedAt": "2025-11-29T08:14:39.783Z" } } }, "fd9477b10ed7d16ef2358b8d1e49ae2377cc94b7a2aa1d03cbf8e6ee55954611": { "36f5cb32c3341f1b52d0987870b8e971b48d9b4ccb72422d895a8e8de42aa565": { "jp": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.340Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.039Z" + "updatedAt": "2025-11-29T08:14:39.771Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:50.340Z" } } }, "0a48452290eff051d5083217a35dc08044c6070e028523f7cac12162494649d9": { "007d16df56ba8d29945ba611a8ebd52c915dfd07a9959101cb56729201855baa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.371Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.767Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.365Z" } } }, "1166fa0e4a8285a06447a2c810faea5954a70f41dac027f9312ad41f58d7980c": { "b55b582f39fbb6b1a9a83d90ec6685c4218c3e70536c2a445ad09c9e3380e0e1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.392Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.388Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.348Z" } } }, "1cc5dc60c755c1b33090726793f332fef7bb57174bac81be1fd840360abec0a9": { "0b2d9a2f1a1de345b24bb2aed0e200731bba362c09de9a98ae9041f3e9312321": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.354Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.351Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.353Z" } } }, "1fa73f7fb3f17cb73adf9d2fd3672fb7b1bcea959cdfa4cc1cebebf9783e8493": { "68781891b0d87b8b7fc619dd4fa0e041668116f49851eeb31c8f510173e044b5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.357Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.358Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.357Z" } } }, "277327bc5d1f24036dfcf5127459029b84745c17df9cdbee699b92b7fa8c244a": { "edea05c97af2e9b00969299f942cd800726b3f980c4ecc738e093ae93dac3c2f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.395Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.390Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.395Z" } } }, "2fa7a8042be873e4594c45fc4aa944580ac9957f07dba893bd079f9bd6831739": { "d53dbb06ce9443dcb0eff1d6d827440cd3f32c6995b1495a014f731eb03474e6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.364Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.767Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.364Z" } } }, "3856af0947d30d11556c7934bf86f94916259da90023fd46b0e7c63d1c3a264d": { "13a6600b110e578ff344da3c1257c68c9f1c85b521d7074402b84a2a07f09dee": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.366Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.367Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:39.769Z" } } }, "3cbdf684e4132d36432757c5b2479a68267eb108858510d7f118f4f80e1fe430": { "02a6cbb43f399b26f891350cfb238c12040d0543f4f79b9119f782c965160d27": { "jp": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.371Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.372Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.369Z" } } }, "4efac6c6f465c7a572c85feacf0f06b43a4e0c32c6c920019621529593011d4a": { "90716f5cd329825964992e1323d48a1be73c0b4afe6438deb2f5faa6947cb686": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.353Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.352Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.352Z" } } }, "593efc50139609f8ecd70340a6cf0d42b4647499a51d8026ed014bda5df9c3be": { "d22863b43cc42cb50748f21dbf3ca52aa023402a9fd5fe4d478b8ad89b656234": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.384Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.386Z" } } }, "64b5024b5182bfc45a505634c61271260ae40641e132a126b98fdb77fb6a7c95": { "4407c0820a47caebe5b1dfe9eff3d5de80d013db89f0925feb173cff9741369f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.395Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.396Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.396Z" } } }, "803a744763b2e971d43427be40f1173beef9290f8152a79e7047ef5f514f42d2": { "bc19380cbc2e01ee6357dbd1150e6424d9856ad286e39cddde352bb68470ab78": { "jp": { - "updatedAt": "2025-11-26T07:24:19.046Z" + "updatedAt": "2025-11-29T08:14:50.359Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.362Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.355Z" } } }, "81b00d2254d3e49a8edabeaf9d9461d8fb19914c8abfef93d05c71270dbf3786": { "96a507a0b8ed5c5846b4d8f6ffced106a8f7d73ccb668fa851fed8b3be3dbee2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.351Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.045Z" + "updatedAt": "2025-11-29T08:14:50.354Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.350Z" } } }, "81cc4a22f5345ef537b81bda612b5e1b5de5d2fb5b7d6563d33ccac4c53d47c0": { "2264f2a7ed8ccbf74a72e2d8d69d0a56cc35d7bce6b065e30464315bdeee546d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.347Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.381Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.347Z" } } }, "9229ae8ebb059ce61a183f4129a3e0da801e0d4717a314a296909aa6035f7d9e": { "fea4e84293c545f2207f795fa4b98c049df1c2de4dd7351a04e3cfb8dc162c2a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.392Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.393Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.395Z" } } }, "a9c6646ed9b12fe5c1578c74e0f8408353fc82448e8041b1c1d96f9c46e78dea": { "9cf8633b74ca4ae563d8b6514b6ee95e035b912752b8937b25e1ea6d00d6332e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.384Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.394Z" } } }, "b464890125efe481177f12e2f3c00a28cae107b65627ec59bb17ef93cf157e35": { "4a59992606ccfde9022f21ac63edbdf9bc3e1e8100eaeef04c372952f8c27195": { "jp": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.349Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.350Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:50.349Z" } } }, "b676683ed68be73eb9635273495e9731122ee184bb63d7293df2bdf22ebad7d0": { "81117b826442551d1cf5856c822f3d1c75ce597cd1faec68ca4ca0233ff5b395": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.388Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.387Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.383Z" } } }, "ca8c63318081185dadfc8f0c999b2cbe8002743aa40d511bc0efe186e20e334d": { "d058a230016b4adc22efb36e3b3ae2fb018e4b84cf33b6862fd4f520d9e7d3c1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.047Z" + "updatedAt": "2025-11-29T08:14:50.360Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.044Z" + "updatedAt": "2025-11-29T08:14:39.768Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.368Z" } } }, "eb036cf7d16bf188b666a24b079c499f0e91022203931f813a7708c77c75046a": { "d269d0ef9030cc0accc4626f57a4a0fc9fa917b10cf282d13fa57388c6603e4e": { "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.379Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.381Z" } } }, "f63b4898f4bc0778b3cf11bb85aa91a674b602d4005b001e2977ffa70c3be27a": { "dd2ba17bbdc49a7afba06862b9e2f43e39bf834aefeb4fadb52775d8db69d988": { "jp": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.367Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.048Z" + "updatedAt": "2025-11-29T08:14:50.368Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.049Z" + "updatedAt": "2025-11-29T08:14:50.370Z" } } }, "0850d83ea9ff1a00088e3d64a210fcd073b48986df51234fb69582c6b7fb76d6": { "9a43156c05a1578fda8031ad1f1e9faf8e97b4816647d44bffd71e1f15c3647d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.414Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.415Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.410Z" } } }, "1bb238eff17ee95c127a21dd293881a980bb8f3b0aff1bdd7ecd004fafe3764b": { "d005d0fdfdc2a2469851a9a7d27374e5fcf68c97518463c6aec7498e165ace83": { "jp": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.409Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.373Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.043Z" + "updatedAt": "2025-11-29T08:14:50.347Z" } } }, "23d2246026762ae3494ced9af104cea91f1482d8c7dae1149b7bfa3441618283": { "0e016f2ab261e197b48540cb3d3091ab6d3af62d1c883dcd3281cb2e578a1bfa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.390Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.393Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.391Z" } } }, "29f7d7e079a392736f8e8414574847d7fc12094c29074c197529b77eafd97a46": { "ee468e104feb8b3c7b0aa6d6f466b62ccd0c40d76c88efce2ee623e95b1737ef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.390Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.387Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.387Z" } } }, "3096aa4bb7832bb2f54010d3c5b6a248f9ebf6a366fb879f82c0eab244f815ae": { "fa532e7e71ef2e3585f03d9f864f4c524338db82a3098d4d46e1abc74f06c4fa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.394Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.393Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.390Z" } } }, "3f380b9290fe7c7d901aac0cb526ca3d522c42c21bc64b85c2e00fbdc953e794": { "e0c1c8cc04e2a4ba817680c61c7923693919ed48ab52a53f3ddf5094909767fb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.391Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-29T08:14:50.389Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.391Z" } } }, "492356529ca75008f683673b06635e91f3cb2d7f1097826262a7957c6cd78136": { "ea6eed1ae135ae1362375bc54a6abf4d9bda82f9cd56e95b97e329d6dfceb889": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.381Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.380Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.385Z" } } }, "576c74bc00a8723ea19c093ffe6b3a472b9236e8f3bfcb0b95955083f9cadb86": { "351824c23a3d30665651f9a8eb9f4b521f17129ca1d202c38cbde960046a5d97": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.380Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.384Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.382Z" } } }, "57e03de44d901875fb5eb2401640aba105efc70cc184f0f23ff04489b548b151": { "3f8e85fe2d0ca94113aa748a9047c9553cec059c087362ec30bf90a68567a495": { "jp": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.375Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.402Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.402Z" } } }, "82d75c46385806468ea3f9bb89ec325a34f8717e9925511cf3f746c6793c4178": { "56b23f6722a4743f7d9412ba74c3c4701d0fd1018ab3474c5dceb16bef9ca1c1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.405Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.402Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.404Z" } } }, "835fedb5cc4f200a51753e009ebccb9c5c2703128ecfce3dc53168f68570dd22": { "24e239e6ee1d39ee0ec39c0ebaf4dff703bef48fabe9d4ad32d9fcb51008866a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.374Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.403Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.404Z" } } }, "a218ff0160f1afb6fd940e4797a2159d55a8dbac410f179f5727b567999eaebf": { "aad6f9838da5dc15d37d5f9d16b53754eb0d3ff68a7cf73064f05eaa3669c05b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.382Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.388Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-29T08:14:50.389Z" } } }, "a47af53023e5932aef2db5b77a0ef7cd04c45474a2fe93ea211914667b44e5ec": { "4ff7d90419a50527c3757c649b6725b0da711648246268bc520c1dae8ad9ef97": { "jp": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.409Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.407Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.405Z" } } }, "ab35a5ab8729c47c7175e9c6cc67e42aba43c58b1e1f2c291dcda4c3977b06bd": { "02d5a608d6ee630f001b827a8fa1c5cad477766220949ac58c83c9ea965c69c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.409Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.410Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.407Z" } } }, "cd604eef1633b62d027e3e7d70856d9553f233ca6e0180381c2120985643a86d": { "e37d6318a1605b8e2ec28a6a7b49ca74444391f022f98dec4ac9cf1024c821ed": { "jp": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.392Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.163Z" + "updatedAt": "2025-11-29T08:14:50.394Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.162Z" + "updatedAt": "2025-11-29T08:14:50.391Z" } } }, "cfd6efb64f516235ee2ecb43e9da90a4a4f49b69cd47dbfe06c9e1586fb606bd": { "dc206b93eb4f37283d194fc3cd04163bee67e631f232560183ec516accced4b0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.417Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.374Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.415Z" } } }, "daf8b3e4dde89158cbc831962f60de0ec14cecabcbd44a418f78eb071c12b0c4": { "436bd3437c6e83fc88999652218e47ef4afe3bd262aa9052fd9fbf8900aa176f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.386Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.381Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.380Z" } } }, "df45da7290d6edcd7b6391995f5058013634a6732cc0faaa6bd01d42b9804678": { "b184369e5f189b858945955301721885510add73fe070525f5c066569add5a01": { "jp": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.385Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.386Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.051Z" + "updatedAt": "2025-11-29T08:14:50.382Z" } } }, "e303e41ebcb2d5160248ecceb8943f82399ebc3323390c33a1d6a724c28354fd": { "28a231f853bc9e6425c97ca1c14dcd50898db661a90b51a9e9ef2aaf5c7c2f43": { "jp": { - "updatedAt": "2025-11-26T07:24:12.161Z" + "updatedAt": "2025-11-29T08:14:50.389Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.160Z" + "updatedAt": "2025-11-29T08:14:50.388Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.052Z" + "updatedAt": "2025-11-29T08:14:50.387Z" } } }, "f1754d0c92d25ed65027ccc750febdcca2e7101c72a0eece6697b959d9971621": { "d2cbc57bddda71b0ca36a00fdc52702ffaecf753190fb6095d4a92fca38701f1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.373Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.411Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.417Z" } } }, "ff2e4c3baefa9017265684effd06b1ae64d9d7d79efa83110c92a11de95d2c62": { "7e68dd457179debb6b3b8c9690002e92f3cfcc5539913ccfbd1d0632617d6548": { "jp": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.352Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.376Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.050Z" + "updatedAt": "2025-11-29T08:14:50.376Z" } } }, "10b704f16a650f1802b52736d2c823bd454d8b3dabb76ac91bdcc408b62420cb": { "2d4e7acb59df283f228e25658e527a973db16f341efce41e1ce84944cffa1fae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.428Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.432Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.429Z" } } }, "1e8eecebd2a4e411fc3037074c79ba054debc70b7a76bf53100577ec14359aee": { "5e448cd743d25dd9d490161805e048c3c2f4696c9f46b52a466a1bba220a5eae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.429Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.424Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.423Z" } } }, "3e8e050e4d3fc2dc532df4dd8556aae0bea35f5ab73c2aade8efe957930a412a": { "e8f4b7568afc6590d5203c133ee8873acbea759acf50b34794af4e2cd6b43ad1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.425Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.426Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.424Z" } } }, "47bec243b816f1aff8d7f27262d59edcdc28cb3ec78a655071e9178290bb0578": { "880617a38544a545b4906c62f9009009c13a7ff3ccc2a60fe2e475bb26b6f55c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.403Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.400Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.399Z" } } }, "48ff5e21581a18794244e74d86a13a93c0401d4d23c46f267ead336c36e91cce": { "42db135883af584da69bdb891c2f149df97603eb1cabc3853355aeccb9eef199": { "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.431Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.431Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.432Z" } } }, "4b0ee48c4cbb9020c49cc55e309e9d7f69e89a9ed3a55e9c47bc013ae4ef6d56": { "2ed3bcd79fd5d4e72d74ac905059dc5e77bee95124595bde24fabd5f207ff65d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.424Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.427Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.421Z" } } }, "58026ac4a257b8fe268cb77f7d9da3eab8cee812a5e1d5152bab8b3250885ea9": { "75ab9ab8699432a23f95f427a4d59951ffca9690508f2d181e017be2846fba14": { "jp": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.403Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.400Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.403Z" } } }, "5879b7ee9c3de048a317f9526d9961edba8038230a7d5244320ca051c3377577": { "0a90ec2dd8b2f3498aaafcb347dfa3cda2f9f6da12d64b79f5d5404b53325b70": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.416Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.411Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.170Z" + "updatedAt": "2025-11-29T08:14:50.412Z" } } }, "6381d5f736372e0e12418c5b0941665dfa5912b8121475ef968a4b5174f7afda": { "ca830a516bc4a6a4064bd19e68294d34a903114ae0c72112077306844ab37161": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.400Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.399Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.398Z" } } }, "6391f6957c5f75a61373810ad0f0c8f36e0c6ab5b4e5a0f3c373ec2ec25c7f10": { "70a6df8beb04de853a1e2f9d42065e9eafda493219744deb6b08634115f9a498": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.422Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.404Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.401Z" } } }, "65aa83e28c6b450bc0daadd14828a7677fb27a998ea9f59faacc7187462718e2": { "3c0cab0fe63f1d762905d3d204e44dff7666b23009b55e1447c9939e7032e82c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.416Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.413Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.375Z" } } }, "70c04f43190f497d5a2f8677cdc4ca3f609afb464cf98a219e9b600b7d989cf6": { "59c021fe8605f9f4ff5a62d7b51c4f5a7a05acc380d02368ad906c909dd5fa17": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.407Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.408Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.408Z" } } }, "7ce6270ebd8e598a5ae3c7e63c99571a865d9289e493233222d36600b8ce255b": { "56a7fab051640f56124193c10c43bab0f0b30eb6b3b43860f813e4335dc69d61": { "jp": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.414Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.171Z" + "updatedAt": "2025-11-29T08:14:50.413Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.406Z" } } }, "9c1e3cb41e28946be991ff74f6b0fea3622f21ccd94c4e6553aa990de1a4f6b3": { "8fec74d1546ec055cc9bbebd756641fa7e4a28ffd600d29eaf8d88dcf521d25a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.400Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.404Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.398Z" } } }, "a82c339e6ec19dbf4bf88470d923d48a3cc71cf65c7bae8180edcebcbdffedf7": { "82e1205914218a950a532221e194e1c9da469a4477d36097b83d2a9c2fab0a25": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.401Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.401Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.167Z" + "updatedAt": "2025-11-29T08:14:50.402Z" } } }, "ab7133a925d3667ab21eedcaa7493b04d2a7453fa0b3dd6c1545ec18333f6c93": { "3cd87edf3b014d3bf39e15bb926affe5a7484f6efe0143fd80de32aa3bf31d8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.421Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.422Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.421Z" } } }, "abe38b651cd9f44a9de790429c92f0c07d5d279e5dae34af1329f362738d3a6a": { "0700f00685f173628dfa175ef2fa960a245c5094b60de40155456bae0cf0bece": { "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.431Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.428Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.424Z" } } }, "b0af6145fc6e254fe1ec86adc9d2e005a2c78ca57a92cfbbcb204f22d2b0b206": { "ae6b07939de76cbcba1cb55d37c6d5d3944edcd60cd443a0ae6aad40a42ce5ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.398Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.404Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.405Z" } } }, "ced28404e4ce6c34312f58e0fa21dc44dc32726f8881c1adb6ed189087c1b289": { "946529a7ef15a484b25d74b9a9f179b04a186b82780a2ea1059020ee8785a2e4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.406Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.406Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.169Z" + "updatedAt": "2025-11-29T08:14:50.406Z" } } }, "dd5f0d309844443578b1e477b78c685d87f106d689eab41fab33f12709affeef": { "d85b73cbceb154602514bc5dd5ccb07827a65d84bacf59d65c5ddc95c14947c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.435Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.433Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.435Z" } } }, "e03641b78328c61b637195e74814fe2a13a4f8b55b01fc7b32ac725dd77f1098": { "d7e329d38854c95abf0c4ec667157d6c9e812a6ee76245d01dba66336ccd0ee2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.168Z" + "updatedAt": "2025-11-29T08:14:50.405Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.399Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.166Z" + "updatedAt": "2025-11-29T08:14:50.401Z" } } }, "e1f66fca49c6ff453d4e8a35fdefe650bc1596acc41c176c3c186db3c6b32dcf": { "a953eb312c126bbe30b57606749cd07b7c2b0214177b48b7f6c98c70a8a245ab": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.430Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.426Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.432Z" } } }, "028aa3b50c80d12c1dff7886165e9713acd5da0e4c292ec8d74a396e6acb2825": { "1ba8e423cea5af1505e244428a4e315c1ec5b32bcf1289058189844c5da6dc2c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.427Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.428Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.426Z" } } }, "0ae49380ec7f5d307e31d7b631f7f0bf275d679b03f17eb67c5359b37b5242f5": { "f8739620d7524e796b898c8c185a92bf25c2ecbf9cc3893754ede05bce45736b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.420Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.397Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.397Z" } } }, "15fced5932ede7e35f56539b143eb9b8d0d01a97412450e147ef43084abe420c": { "ec90df838c140604af32f15594fffcd4af40335ecac6a833f13e0158156b0cbc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.432Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.425Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.425Z" } } }, "16db9b76d16ef49e77f68158117027a4829a5968943ae93a509257b7c447f23b": { "04685109a89dab0b5bb34aa000e61426caa176d6790eefce0141144402762ae5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.468Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.467Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.469Z" } } }, "23eb3656e923d758ff491460d9d1bbec7009131392de09276848be0db41fd269": { "3625b1be463613c8fb56424fd4d91f2d85ae950ebd8adce02c7683e4fd11be26": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.435Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.436Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.434Z" } } }, "2f2ef25f504a5d8ae76cc6b6b38d72e25aa06fb601145bf8c4555defd3b22c9c": { "3045e21be62572632384525c8e68ac94c74ae489c9d3787b9b86c295740ce2e0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.454Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.441Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.442Z" } } }, "30adceead0e8f58341843c20ba7a1cfc58638b613d0457a74d610123f740dbae": { "e6bcf77b5129d316d4e7eeba39c108e94d974c9844395d380a2ef4f6b5f57283": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.469Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.470Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.469Z" } } }, "32d271131b76c30bee10004cc36afd1cc48e48b098944d731a875840a3e1520b": { "483a6ba5cfe7e35e8bd7361dfddd53f126ccf034f9f7e6b101dfc108419b0192": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.447Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.439Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.445Z" } } }, "384bbc8a5c6f8f4fd3947610412c719d2877f712b2afbd35874807dc5bf37b5d": { "56a53674a355d521b64bc7d05698ba4051acdbeaca6a3c46a2fda8b450c719e9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.165Z" + "updatedAt": "2025-11-29T08:14:50.396Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.398Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.397Z" } } }, "50e45c22e7e591fcbe4d61812d7d7a9d9626a7f94961516e9f2b08e27d3c36ca": { "4159f227f4e6ff08833e89755d03d3cec73f09d3e9171623e581edcd063d2833": { "jp": { - "updatedAt": "2025-11-26T07:24:12.164Z" + "updatedAt": "2025-11-29T08:14:50.396Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.431Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.433Z" } } }, "8b151a1a26b18205c264eb291e0e0442ddc0a8d5f8b81948e11a1cdd09758259": { "10f61a5bfa1bfc18d47b09dfd27319b441a25e084aea415d11bbbcb64e2a6c0c": { "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.443Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.419Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.444Z" } } }, "b2f66c32f59c426c83078d6b24b7186f54172727a996adce08872051de770134": { "0c794fe311b38eedc683c36f0c611835c85822c536fff3e7f51e45a39493a848": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.437Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.437Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.436Z" } } }, "b3581e0b617b1029663a70e779bab6aabd1b97807b23afe26b42a5bb82a2618a": { "38f348198e164923854caf2d5fb911a3b03dff8e5f682f59a476694465af9bd5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.455Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.448Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.455Z" } } }, "b54c21849674b2f133d9a7587a54bf895f7b1a8384d344c53348c14c442b2644": { "ddce74d3907de04d0a9af32787564ecd6b5cba8d6c36159e1e227746999b1540": { "jp": { - "updatedAt": "2025-11-26T07:24:19.053Z" + "updatedAt": "2025-11-29T08:14:50.423Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.430Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.429Z" } } }, "bf6da61b91d435b98dbe4fcfd84c30e4661211a55093b7bd5294d05df5d9018f": { "8df18a3ed0cebffed7ef2a16c2c1feed24d08b38743943e1639bf2e1e83ad9cd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.438Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.437Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.434Z" } } }, "c600219b9f55bdfcea82201926bfe9e4cabf53497d2110e11a6a97d3a6de16d1": { "879e570e6a755b5436d4b4e3e5ee02f6ef2f2b1b56d5e30a0d8ad6d11079deec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.448Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.447Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.438Z" } } }, "d20c2004eff27206aa611fa47101376ca27b19c79a7c22fef935d90c8c7ee0b7": { "31528a8c4089ac02ac4c5cae45bfcf8375faba7dbb39d635e3082a39955f5a65": { "jp": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.433Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.057Z" + "updatedAt": "2025-11-29T08:14:50.434Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.056Z" + "updatedAt": "2025-11-29T08:14:50.431Z" } } }, "d42c8393402232b95f473bddaaa33ac9663e18e070bfb5225b9240cded76bd36": { "469a531fc6c1dbbcdaf79cbc24df46624ad5a44a7c52da48e4665690d6de2002": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.420Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.453Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.440Z" } } }, "d55ab4d59e8e430728299d153babb7440fdf1524f75ae30ac017602a393f72f2": { "e946a51dbbf49a6bb72dfb7320ddc89e75e9bca19562498770b9375217a83d34": { "jp": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.418Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.443Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.441Z" } } }, "e9e6900149061b39fd6dd6fa53d0c99f28ffac38d503ec961dd94dce5ebac808": { "aef65ce3391d03e363f980b73f3fa71276203fc5f77a1d75edec615250031f8e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.055Z" + "updatedAt": "2025-11-29T08:14:50.430Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.426Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.054Z" + "updatedAt": "2025-11-29T08:14:50.427Z" } } }, "f5e923aaae110b8d3ec030f52c1731f515c0ed1b9a0e41490e863bb6395bd23b": { "c81f4b30001e6233066eddc0f7a5c166b4369eee24cb505fee91004bc16f3b48": { "jp": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.438Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.438Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.437Z" } } }, "1d0e04973f4a7a2726ce086465182e22cfc8de26b7036f67bf3246dcdcab5c87": { "31f058ab67c32c0251f087188700872a277440d4f0ff0bd41cdc2a390207f441": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.540Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.543Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.542Z" } } }, "1d411ae967753b5d27acfdc77c2f68fa873d228cea6cf769ee2c85f10b38628f": { "8c9d1bbb63ac91b1a18b930594b6d354536b4a42a4cefa28e167390053f64f41": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.750Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.753Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.747Z" } } }, "32a2dfa24b35817a5fedbfc4895185da11ba73834f024a8c145cb60b3ee324a3": { "8f13f0e888bb91b30f7b56131bf3728f2950f55c2375b05eab6a6c9cabcab037": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.712Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.754Z" } } }, "34fe9aa819ffc70ef68be0505c66c5cb60f94370bfce6edd29d0ef846b1eb245": { "7ef9c6e569280d6e03a986898ccf237a939f4581319206934f40b7e910987b98": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.756Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.757Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.757Z" } } }, "5a1049606d2ddeb908a3f87e08c53c766115a2d5315cd4e891c852fa240471ed": { "4340b6e9c5ca9bb508ff61e1f7de601fd3ee092842be32670cf541dd9fe5b76c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.749Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.753Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.749Z" } } }, "6c930d7e263cee0da201aeb82b5afa15d7a0492edd3f17b70d744502c7da16c8": { "2c78d1148a39342c324f60ab8fd48891049dd3af4b2e04e98d60136cac22dac8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.541Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.540Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.520Z" } } }, "7997000584a74b3a4893e2d952e3e74901f5c48d13d2477040f08510ce7fb94a": { "f3a543f784ce343388875d80bf6932364452e41d5c499c0fcdb6193cbc18d2ac": { "jp": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.444Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.418Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.455Z" } } }, "7aeb5a3c848c3ac6401e3621b9731a411c3ffe53b1ec386f511089c819780c4c": { "1f0a4b693ba5e0ec268fafbbe5f0a583b29cfd716f04abb61d43c5813b6ad612": { "jp": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.748Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.746Z" } } }, "7af81b34b1f80a6579a084fc3f8d1ecb9f0315e228a3b01eca34abc4e963fda6": { "c20825094b802738f9e5eb45bd5ac1dadaadc926f348ad24d8c06cc4e5157994": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.740Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.740Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.739Z" } } }, "83eab82a7ad67622f732d278303fd5a55d015c462467d35a81a97662bdec853e": { "2d649e303741fd66ea1aa56354d590ebd300f6ec9c2b2ef22c28c636be7a29cc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.454Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.058Z" + "updatedAt": "2025-11-29T08:14:50.419Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.443Z" } } }, "8aef57a5d0702946541ef4bc66a35386c47ef94c0fbc0f60abf1cf7cff964601": { "1de18ab03988e32b892f506405ca6a01d5a611302a852d3f5e7de174a37be78b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.449Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.172Z" + "updatedAt": "2025-11-29T08:14:50.418Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.456Z" } } }, "a2ec760009faa1e1eff2c135a3d4deb7afa6a079dda0c6d9f99db627647062d5": { "4f03a97491bdbb54d341d453335aff270c60976e7c3ad96cb719e9003ee5ad0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.753Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.747Z" } } }, "a81ad531cd4308314f95a3bc7ee7518076cb8b225330a76bdebb309de6c07d84": { "eb1a10c317b4f12f9023e3b4899a6403eac245683d867b105338963ab1df00ca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.543Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.541Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.542Z" } } }, "a8b3a4c7be16228ce7b50cb870cc58cfe39f8c34bd28a3aca5822b90b0f42830": { "f2435d45557de24d303d66a742aeff55e64e2f4b580432c1d1d9f8eaeb1f5d17": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.468Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.468Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.467Z" } } }, "b2dcbd4e41cb07eefcbc269f5df931324f8744a9483f6b145243bbc5673c42c1": { "5890daa9787c7983a0d917f5622f02d272e85c52daeee1444ef64b42ce8108d7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.543Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.541Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.540Z" } } }, "db411e0514092e58a10e4b885faa2126f95d2bd39dace283d1e44cbc9831e3dd": { "527580835a672b74a709bacb51a246aba1c88246216cdba2db279817225f4044": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.539Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.185Z" + "updatedAt": "2025-11-29T08:14:50.544Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.539Z" } } }, "dc3682d31d860920c0027dc94b51e1f197c5a38ca754f403922910b9b8ba3903": { "668b968f7ffa7b6faf894697548c553b64afd08c5b62258b0eb445aab83c7d88": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.750Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.755Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.749Z" } } }, "e72fb86764359e026d92c8940ee6175f5febdbd710006033850bb2ad8aa43023": { "10e1df69f27be8e1de4c2159ec11f7a83395eb9a20a7b729e0fbe4c2bc8bb473": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.745Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.746Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.750Z" } } }, "ea7e5e311ec73e96e57ec3343b5c4d7cd8d2c758deae9104dffeb15243a22097": { "a6b1a10073ba1bedb61ae0ed5088f394cf79fd30feddaa919ee25e9e0f4c991c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.756Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.754Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.756Z" } } }, "f46404d0d2b932ed24233530122a903e98fd0ad2e866b50bb50ad16e35006e6f": { "ce6bd20ee80f6f7df45c614920f103f5eb64699dca884aa2e9a55c8adbfcc913": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.752Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.747Z" } } }, "f6103a7698b24fef604602086936cf148c11df516f6f84bf99b48971614c717b": { "2934cd253b5a2e39a317ce455fc2c1d9f94f60e9c0af926ce756c8e2261a0354": { "jp": { - "updatedAt": "2025-11-26T07:24:12.235Z" + "updatedAt": "2025-11-29T08:14:50.752Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.234Z" + "updatedAt": "2025-11-29T08:14:50.746Z" } } }, "05f8d1acdb9d8a92c6735e4d5dcf8080fa8ee6512cc13dbf3b840c999a094c71": { "97638cef9fdf5d6328f466c856175463ac017bac4780f1d817b5d4729a88aa08": { "jp": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.734Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-29T08:14:50.737Z" } } }, "0c936deece1cfa87a5970fb553569967ce05687698de65a98ef0315477967bbd": { "a922d6b0d8e112391f7d053fc7058eb1d5659b44c4a9dfa835485d17fbead31d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.764Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.733Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.733Z" } } }, "1582ff8ea3fdbeb1dad986160d1b0999795a555f6d89e98dd145b6f49dfb08eb": { "5e343ab5ab03d0e1fa46bf003992f1eb136b9a12bfad77828128edf71d3afe32": { "jp": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.763Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.763Z" } } }, "179dbf5bb80545989b2913aca22d0861999dba14106d2380864014877de3c93b": { "114ef0735c99933d93e4c6a570fccf1ca3ef45aed471b8a4eccb902e87cb5043": { "jp": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-29T08:14:50.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.713Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.714Z" } } }, "1dccccf586631074a6cd966272c09df3578cce225321b7df5ebc807acd0dcdfb": { "b435aec19ff6ecbb9d88c6d1f945636177e245c9c227442437f370098f0f3e09": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.781Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.781Z" } } }, "2a3e385a0edab430e986558c8176d5e5093f020848f61371fce764ff9195f165": { "b8228ee3face15f90f6ed1245de3feab742bd22410c8360b5dcc4e855e71c22d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.733Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.762Z" } } }, "2bb9b38a8d5dfd619ee7e2a01589dd2c06c59b11f82f178133c39690b45125c5": { "21f979e19600cd98d3791382f305b11aed31990ab9b8c6cfdaf57719effc558d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.770Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.769Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.766Z" } } }, "32b3dc73599ca183244dc71ff36bc88e62757e5face12c31b14ce042f684120c": { "1bb063448241263bf2f6dc2f55489a21d5cd06be00886e0e9e91d6bceacc47ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.772Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.772Z" } } }, "51c48794a66e183ba70935eac117d954a1401f40572a0afc11169b24fcd14820": { "dc661924dc7cd06d16b7ed5abfda37c2ece415c277427ada79d811eff748ebda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.738Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-29T08:14:50.737Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.713Z" } } }, "5565bc89634d0648d7fb44f41fcd9352657cc2b36d57392f0a6561a32e66eb28": { "d223905451f4d931e0e856ce3fd5f35c1c3c25396ff43780337894e768a7242b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.233Z" + "updatedAt": "2025-11-29T08:14:50.739Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.734Z" } } }, "705e7aed31578540442c080a6cafebaeba2bf1ddb38ec739dd014aec5b25502b": { "29a6c789509cb2e9a587186b93902ad76eec1850c4f01f91eb5c2a4c186d557d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.775Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.773Z" } } }, "7e47d90d43125cfd56ce110d9bfe1a08ac0c8cecbad7095afeda215f8ebaff80": { "6aa7a3b849b9da4b7d84bb26a3754ab6d9c56ee35825fa788436cb306b81fc00": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.712Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.713Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.735Z" } } }, "9368e9ef7da2d3545fdcad02056a63f297099ae569a58d6445ec4175f477bcf7": { "5294da061b84e38e7a5c72fa3738434b348d3c948072b63438f6f8e9041f8d45": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.768Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.765Z" } } }, @@ -6937,18 +7003,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.232Z" } + }, + "038b14ac5c1893d1111af35826b4c74e0b753cba46c799f2102d96ef3edb9d42": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.741Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.741Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.744Z" + } } }, "9d935527c3051f00d3c44516b5c5b43d9ec31ba4d1ca19553b784a772963e4d6": { "b415e1612fa4c875f71cf858dcdd92606355f03dd3c13b5aef37f79f279ada0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.767Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.734Z" } } }, @@ -6966,429 +7043,429 @@ }, "e607066649cfbd50b16b74b56125f76fc7dae7885df303cc620af28c763ce899": { "ru": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.770Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.766Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.768Z" } } }, "ca84649ef742e7064e2d857290ef9d942fcc1d6b9bdfff1813fcdfdbefec62ff": { "555cc07d313afdfd168b7ad11d02f0ab80d39cc85a07b294b44c7401c7ce9620": { "jp": { - "updatedAt": "2025-11-26T07:24:12.240Z" + "updatedAt": "2025-11-29T08:14:50.769Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.765Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.766Z" } } }, "d8908fc8af7a3068c0cc48f8107adaf5bf331be7388208aa9a40ca7f00432b7f": { "561bda26e259939457123ba760b1c473d1ffa5cabb632bd41b00a30024d8ae4e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-29T08:14:50.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.231Z" + "updatedAt": "2025-11-29T08:14:50.736Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.232Z" + "updatedAt": "2025-11-29T08:14:50.738Z" } } }, "dbd0d5161d0bd3efeb5fcda68e773df51262f2852a70440882d847c3e8ed79ff": { "558ea55eedb29b8236de463bdebed17358b2ffd17236ba1c7d0c9758543b7b74": { "jp": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.777Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.776Z" } } }, "df35030ac136ab8f4825db977a911e1874670c6ba73d0e658e95b28fa50c1d70": { "4cebcab8322a8aae73bf90996e95a2e65bb56b941371c8819373abaf169e92db": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.767Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.764Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.768Z" } } }, "ee20bc66651b66977783ce3a17b9d4f38b09b4a0774e0791bb9fb26a7f930500": { "e7338142de8dacc4a6fc04e51a78c9dd1fb3bbef6534057d60f8de1db6ed3aab": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.767Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.764Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.767Z" } } }, "fe7e045fa5f538d00f569d58a48e0a9285abe27807a38b3ce253116b4cc22e74": { "c2d3019dfd5c9e95d0bc93db0189ffd3ae5bb907d47f6a727f23a3e435164059": { "jp": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.766Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.238Z" + "updatedAt": "2025-11-29T08:14:50.763Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.239Z" + "updatedAt": "2025-11-29T08:14:50.768Z" } } }, "26480489190477329712e0e890231f9ee67f7bae2ec93f1adc5e49bd8705dd0b": { "ca234a63cfee1038a0b6bb5b7e10d7ef8307e9e5239cd0706669420fd2cb62a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.779Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.780Z" } } }, "356c6ff78cff0c4de1af14bfafe2c9bd10139292cd3f3c3553d242bfb277d994": { "cf5d9fa224a574f45a3c02cbc85a2617672d37fcaddc77e5adcfc9fa74e326b1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.790Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.791Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.798Z" } } }, "372be1b1091279b14a64c301dd32f570d8ae7c28ebc2b0e65c8d600412c8a6b2": { "24a1775ccfe9d94dbe6ee2e71f12bbcddd22da3de1dd49f2d8ce8e542b33728c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.780Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.777Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.778Z" } } }, "3b4bb74db846ca0f012ad71dfdb33334fa8118040393487ad35fea48bd2470ea": { "3120f1e4d4f08a6ba69af7daa70ffa13d27c3a4aef713d36140278c033dcf2bc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.771Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.789Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.792Z" } } }, "42ae3a5b453abe44edf7cc0c8fb18a3559a3043e9828ca9eecf69cbab0362ecd": { "fb18df11b1efd0c29cdbcd9a0fef8f8e09542882ba6ccb09e3e42d9f3b8aa419": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.796Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.788Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.798Z" } } }, "501db638650e5304a9dba8ff4612de47b5da82aaad0a722bd89c11c68a35eb5d": { "f925e25aa54c252061995e84db9939551b2e2035ef3360d06582d778617a054f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.796Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.802Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.794Z" } } }, "5391d9361d8de859f55fc623438785f034d27921eaf51522b1cfec0b8ae6d057": { "4c5301e6bd068db1c39c7442930c97eb64fc020a710f75519ea91e088c153887": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.790Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.791Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.791Z" } } }, "64565318cadde7f90ba96c3e29513ba020adf44fe66a9bf3e5482d23d0dd47dc": { "63452898bc1a5638b696f345c28ff8083c41b2223f3638a2c64f25800a2a5647": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.804Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.805Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.802Z" } } }, "68ba9608dff675f309e6f07ee6d6f770a417b027a738a79f138c8d70e2106dbc": { "9dc2946bda2aea97fa9b18c311317369a59c2adf656d6ce6d76316a813616fc1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.801Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.803Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.795Z" } } }, "78fe6d3b89afce471181d779a6a8b475696095ab4ef58d29771279afa02b2997": { "79d3b0b826a742e9b7895789e7402d878b568cd9e4df76a133dc77a70f03c8c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.772Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.775Z" } } }, "81915656e6d382d86e051a8fa78d36209f8322f00df9d519bd2aba85055926e2": { "4bc52b2d49860b621c0c2e9203206add44f60ae74179555c48eff9366de95cc3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.799Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.798Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.799Z" } } }, "89db72da570e81ebcb6f667a907e2f846f64923d46a9947f6788299488af58fc": { "bc1f7fd0c55c3e925412c0e368a4ffa88b8fe5c39a7aa535303e0d54e76f2b9c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.774Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.776Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.778Z" } } }, "938d56b6044b6cebcfe8b337190fa6dea927660551790620ca8c19fb31cd39ba": { "2aefd9ad0393f63b7e1ec0b002323afaa8b544c1011e8f3c91b77ac1f84ef487": { "jp": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.800Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.799Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.801Z" } } }, "96e31c277d43b145242840ad838f44b908ce963c352dad86b59211265e87b591": { "482a21b0c27c50eedb13f76a309205d6a1f064bddbb03002a77af2aa8fd7cc3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.802Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.804Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.805Z" } } }, "99ff98bca369584f25c59d8f96acd6c1788719989416cfe1d5d478919758fd86": { "139a2b803dd22a097a0fb93f4bf76cd3187b48224be1271d561ce8d6d3b0bdfd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.796Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.793Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.797Z" } } }, "b2aff55ca5954a6970b9f52ac23fc39fc004e51a346a6cd693caccb1417c6519": { "1010abd84c38f96762ed3b8cb461a3bb4e5e229304c1c500e26dc7c6e9d01318": { "jp": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.775Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.241Z" + "updatedAt": "2025-11-29T08:14:50.773Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.778Z" } } }, "b8c212ea80c9bdcc2ba8434c82489b4cd25a84157ab8881924465e669bf2bf1d": { "aad4076142416380448496fbac36524304c81991e5c00dade2ad95e55a087c94": { "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.761Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.801Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.761Z" } } }, "cb227df00b6e64305168553956c1928afd33de9cb76c9d330e9c9eca9290c33e": { "268a8df1fdc77541fc0a6bc99e66097367ea72724a49b591b16c19e00e6685fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.792Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.794Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.800Z" } } }, "d1c3b4df71214a3e88455cadb9dda32802eabf8a18de9dd12b4636f3a20001bb": { "407735ce33f5163b7e6c2875f0e2414993e84109f0556ba297b7f1762f038a8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.797Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.795Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.788Z" } } }, "e9a7a6821acf2148d5fdf59dfb02c842dbeccfe3db8ed78b13af93341b542d82": { "45af94df7fb72c57f3c3954a12bae535b5025b01d4824ae9e4f23b2ab156e1ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.243Z" + "updatedAt": "2025-11-29T08:14:50.803Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.797Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.242Z" + "updatedAt": "2025-11-29T08:14:50.776Z" } } }, "fee5d5e407a8306e3abcff87b3f147641c908588b209b7c9e107759067db235d": { "35cee660251b87c86ad32e1c0bdaaefadc8dc8d26b278a55c87e87e3de226353": { "jp": { - "updatedAt": "2025-11-26T07:24:12.247Z" + "updatedAt": "2025-11-29T08:14:50.795Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.800Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.803Z" } } }, "16f8cdbdb2db2ec0c442adb2d731ad72ac56b9c830104c642c7d2a3b0353bb51": { "81890c8843157d3e93683e2432db1962f9cd9f3a81498ad22050145df32d70f2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.820Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.814Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.817Z" } } }, "22107d57f939a679e2605620f4964bd50775a98cf0a725bb73b27f34f48bb6a8": { "8bee2f4f365485c8773bece43ccdc523ab14c91e5b4d3f38ac552aa09ea55c97": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.823Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.821Z" } } }, "23af5cac91f252ffe2e42d1e7b5a0bcabe7dc844aed8ebeffba1570964d40b4d": { "897a5b0e6ee3fe28e1f105bc25b952d48f233f747b27270188a83040b9b40f90": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.792Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.771Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.790Z" } } }, "256b6f8980e5b71a4462fde393b7342ea3301cc72724522761120a29f082680b": { "479ac94cfa44c4916c5e0c53e04c1c5a735ae40232807e8ee57eb3c72f5a8bcd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.814Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.813Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.812Z" } } }, "2a50f26ed5a74514a1bb5535e77a1e4295586acbc14137eeb91bebd950369fe9": { "77daddd248c06a3945d845d9935148cb7d185c9ace0f5a7e2b8d9a52649050c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.822Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.827Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.832Z" } } }, @@ -7403,96 +7480,107 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.253Z" } + }, + "adee3628812a2e0169c7c436f7c41012c6b0b856ab91c598890be0b181284e63": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.788Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.808Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.809Z" + } } }, "55c4dba0327f61353da1e2bb79f11bd89ee95b926dd1a86a38c82a8837d28c4b": { "45ee568fd070f4841a6bc4d3d5720231ff8e0b6b95e3b6558e9f606b852b17aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.838Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.837Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.837Z" } } }, "6e73db155b7c6964fced099cd2a329a54c570e4567c1e741e45991462993ff89": { "d1aadc2b06df5561a41ec6294f8ba38c60368402b06032d12e12420507c14384": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.803Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.802Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.794Z" } } }, "854411037d5e91dafe4510e3bb749eb29c1405966f5c747972f003bea369b464": { "2f5dd362e6719f95a9f300225eac5ed8491245ba11f15bda272d36325d991c01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.810Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.772Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.245Z" + "updatedAt": "2025-11-29T08:14:50.789Z" } } }, "906c5c00462e8461e0b7aa1cffaec1f44d3cc275066f474f9ab70cccbf9e9d8d": { "661e85a9d5e8d39ed88218a74a7029ed28519c2e3ed3213707133a5bb6e243c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.815Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.824Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.818Z" } } }, "9acecbbe697d2e6d2e334b3b54c514cdcf0ed3d6c83e6748104f8f3b983abbd2": { "4b6046e5cde03661005f0be0ef3f23e778a948c6c005456f94af71b6ea2e484b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.826Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.819Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.816Z" } } }, "9e489d6bd5311c686f9d5b9d6362b8dc0665508e0aee22c424f6d5045646470b": { "3428be07ec229b0c8189ab88dcf64befbe6259ed64195b3646ffba1c30f4f99c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.827Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.822Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.826Z" } } }, "9ea307eb644dfcb063c696ac334d7efc3c4116379021488a8c90f62910a0ada4": { "fbffc80f20e5309f443ac78918570ef083994e1d627e7abc163966be69f97bbc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.805Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.806Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.800Z" } } }, @@ -7510,104 +7598,104 @@ }, "23da89ecb9cb7533ec667d1796578f33ffa62f9e868634d354c4e0fc15e995c0": { "zh": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.785Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.786Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.787Z" } } }, "b9b9941c05a9402833caf9876a84c15fb7e08ee5f6ebf347c9f6516a00134c17": { "c8b48a439aa45e1012fed359c6c51f552f6e1298e6483f894f01fb76cfeb566a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.833Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.812Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.831Z" } } }, "caf9155f2ad3c6bb6165f0c5a837f80ca0f324d7821ee36716d6a44981b32432": { "c9a20f8ca6d2167945584243cb48aae584ce849963b883da031cb1fa3b57b9d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.828Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.825Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.825Z" } } }, "cbb612322707858e39d9de4d0c9cc540429b50cdf2909447e753d421fc3212d0": { "4a7d4ef89d791edabbdff46a2878745843ca285c2985ee018c727274960745d4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.249Z" + "updatedAt": "2025-11-29T08:14:50.804Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.801Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.248Z" + "updatedAt": "2025-11-29T08:14:50.799Z" } } }, "cee825351a39183c37f3496b305a2ca1f4323197e9abbe5c4516b74419ab1ae5": { "a0695d4dcbda273aa6429b9ac871a434d4a137ecabd11538b66c6a141105e98c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.831Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.782Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.815Z" } } }, "dd2163ae2a4256a6c45cea7405483741ac924731427ca35e048e40dbacd4926b": { "1344db208f73dc76c68bb5a882fbdde264c6a27beb40c33d6d5d97679b2e075e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.834Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.835Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.836Z" } } }, "eedd808236db61e2b28ca3ea587227703d2be3b1ced3ffbe6e92ba89ef707e94": { "20f04dac4a93b0fdb3374aba9dc0994fdc280c6ebad124568bf3fd2f999185f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.792Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.761Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.246Z" + "updatedAt": "2025-11-29T08:14:50.793Z" } } }, "f2d5e46cdcc837e8872864afe7d6050b24a75248c1c3196bb56ddb850f613f07": { "cddb29e069eb3f550f6f7bfa2961bf6e582620eb41b7307ae5bd3772e689f84e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.835Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.254Z" + "updatedAt": "2025-11-29T08:14:50.821Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.834Z" } } }, @@ -7622,1214 +7710,1225 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.259Z" } + }, + "be7f4e3331c3fd409e0646bffe9b6357649ebe66e4221085977b0cbfb8bd4a24": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.807Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.808Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.808Z" + } } }, "115c23898dca6a5bd85fc79980e071e10196e3e3295527809805baad03df1e8e": { "cc5d85e7940e700fd5d3f8fd7641a3e19d24a033b3c45b51595134cdc91659d3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.860Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.849Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.858Z" } } }, "25fa138ccb807e454af6642c2ed448968e7de55919fd0d0a4ecb3f6e490a397c": { "ab68507bc825afafe53c6d1d0d6f08c53621f3a95a39deec3a4dad7ef103b2c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.824Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.256Z" + "updatedAt": "2025-11-29T08:14:50.832Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.826Z" } } }, "29098b8e3f1e1a679a5ddc94379ef95f05ce5d74ad32854eb1f4dbf472997cd8": { "a2fdefeb5c115c0929ae0f70cb0135e6ff4857188e411761888474889ae1edda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.854Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.856Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.852Z" } } }, "2e279d80c8ba84fded6bc29580d38a57165294e3bb9ec5ac3177d8fa43594ce7": { "c32887dbd37129abcf60580789e56e42295b227409b866e8d6f639ccb4436f91": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.859Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.858Z" } } }, "509f6ede51ab34e339503f91928010a06f04655f9ae29650958c5b6768752931": { "b15b0f51d35014ff5faa6f96548eae990708c240d294f1b231da328da35a7588": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.813Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.810Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.810Z" } } }, "521e12e9546adbbc16980431e680a5ef21ea7b5b3b9b36afb8a2521aa6b377b6": { "6e547ac81c7773f9acb16ff8e8b7c7388a98727bfc4319c29909249791e4ec09": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.842Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.843Z" } } }, "543fafeba882f7e65ffa713c52cc503e06a45708cf5d17f53ac0462449accbf7": { "10b537976cc0e91e97a168611992f05f85e4ed7084a47e4cb1a2f920f41380ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.844Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.841Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.843Z" } } }, "700af028231b046bfc9ddd5cfa321b3be5e023aaaee235d4d7d86453223b3fdc": { "5feb43870c53151fcd38f8407b9a14613518ef335101c53aa526f6a23caac7ed": { "jp": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.809Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.813Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.811Z" } } }, "7d89286b9deca9673424f7ef6646b56ff094fc99d83fea068c7a5b42f3b41f58": { "0cbe2538e6234e4c37b13a2b8892c989968a97ca42dd985663e6d7efb804eeb9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.857Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.859Z" } } }, "7eb439b32a67cfb0aa3624c9184253dc089e7da15d7e10a23f668083dcbbdb63": { "d75745d1b46f0de5b2028a881660f2bd2ddadc7ddc0b54286beaca30e215e44f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.806Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.860Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.861Z" } } }, "8cd1456e58e9b0f32764599fe1b3c08b4549cd901e4ebe5d8ff994983ffb18dd": { "be2df94d3de1df0b087713bb38516d1a78f6b4313e8daf18309af45c6beb735b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.851Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.846Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.853Z" } } }, "8dbad11f22f37a8dfbe5928d8a4733fffad030ebf6032dcfecd084e9101dba52": { "f92ca8e97f1895ba9a62cdd9bd09b067b16fb3472cb748d5ec26c6d2830bdcc3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.848Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.846Z" } } }, "9606738dfb47e926dbb72401f97fb8dcdca15e8e7e4c7c8e0b1de1923f128ebd": { "f38bca2728a4ec18acf3801a37e29bd6ce1663c505004c92a4ef0fb8bcfab83d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.844Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.251Z" + "updatedAt": "2025-11-29T08:14:50.841Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.252Z" + "updatedAt": "2025-11-29T08:14:50.845Z" } } }, "9879a8ecb21ed941282ca62ac8cd46ca90a2e07bea45df3014931af580b18b1c": { "1cee6eed8b351ab527a9d9c859764f01e20c33109d8796baaf74d0bfe5e7498a": { "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.846Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.848Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.848Z" } } }, "9c64eb3f63ed2f4471f8cc3e3a16b5d6f44f4c39e15dce1c2c911d1a94e1a018": { "4af09e0c2db5842c3ba3437a58d8012e6ed6971aac46840180567463da4f8ce8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.244Z" + "updatedAt": "2025-11-29T08:14:50.782Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.257Z" + "updatedAt": "2025-11-29T08:14:50.834Z" } } }, "a2fd395ad42270710df1127e0482607ea48ccfe81a62976bedb63b46c8ceb860": { "67cbbbbf1e4f7f85554eebfe9fb09a5afe145f060eefe6aed1c811dfc5891361": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.847Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.848Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.844Z" } } }, "aff3738ef426bb03f782516f0c962dc0d4f1e8b1e75422276233e8a61abcbbf9": { "62fbdd6dddf79ab74c534883a022557ea5c732ed713d1fc244291ba771204269": { "jp": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.818Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.816Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.253Z" + "updatedAt": "2025-11-29T08:14:50.817Z" } } }, "c61ff854a1d65abf94d196412aea9f3db52e099f903e0aec1c8dbda684f0ee4c": { "6725d42405abcd2763e59c5af20b80e294c49a24e5dfded57358991054e676ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.845Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.840Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.806Z" } } }, "c85b0e977e47a5de069cf6bc2a4c3c7c368f637081c6c7a74c2b3f09f541da76": { "6a1875203c3c11a5ddaeaf844592c8aa66c906a5f10d8118af659f3188166f2b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.845Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.844Z" } } }, "cfcb155375b8c7dce0cd7951038c468106245eabdd22e87ceb685a86ad5787b1": { "4f1c6f9f3c784ede710c284000e57bbb2570ca34ccf377e55bb0aa62d9575fb3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.859Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.854Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.851Z" } } }, "e771f00ee03a6b8ac3a2fe4466ecae0a0ef5fa4a1c06261040efd4c71c7df8ca": { "afaf81983280a59e7aa1584371969108a9f08bbf39abdc8489d3da2cc68c29c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.822Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.825Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.255Z" + "updatedAt": "2025-11-29T08:14:50.824Z" } } }, "003cc65643f9d9786893e0bde4fee0fde5fc25de83cb44c9b184c9f67f682330": { "7bfbb7c49650987bfda71358fcdb6c75e10f3775e57dd80dfa998cd9df1e42b1": { "ru": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.875Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.883Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.839Z" } } }, "0bf287012c3e4a1823f4a6d9af97b4ff2ebf50382b88f6e446f2d2462ceff028": { "6fc59c979e71f5ef7d01dffb85d9c0d52f0f7d9af3f0d2364ea573c821dfb4a9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.869Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.874Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.870Z" } } }, "12e31ec44b3dcf65828805450d562ba22004284c24e16fe91cc2a8306183626b": { "9894639ef964614d3ef8027f22a7deb78a5ccec89d41e007f288e7db21591494": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.875Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.880Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.870Z" } } }, "1a8c3dc523efbedd8ceca5a1bf0b315be2ac1dcf90f08530d461bd213eef4f7c": { "da9e17112c0ec79d1fa82ab5f0ca3db1c53729e70e3fd6a2c4370c03691b292c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.874Z" } } }, "227d51f47fc957dea766831ea43b73c58c9e450c7aadba923fb55f27b830acd0": { "88ce0d6c08629f221dcfe109d7e8a09898443472a62411ee8e84cd0cd4e77851": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.871Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.867Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.870Z" } } }, "2788d1737d33b8bd86e0aa8f0dbd2c1bed226411e50160a1554ab9361f7532d2": { "d0cbc85c85d4d71c67952d11b3d238be8fc75b6ea16860b09935bd9f96add653": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.867Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.841Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.866Z" } } }, "3b065a4f3fc6b25a5184da43b7b0221b5aeccf7b81e1255bd8a6d2a6b86a8ae7": { "c88ae622109bfb3777e96a49c9bfa5f9889a8187d65d687676ef5de1bf070514": { "jp": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.853Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.857Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.261Z" + "updatedAt": "2025-11-29T08:14:50.852Z" } } }, "3ffea18e4142d273a23435211934d60695e426723e88ea42a887c753673da12c": { "9135666001d3b0d949ff7db424b18a4b655d4b8eebcafa75a9e472d040fbb808": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.877Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.877Z" } } }, "6ae9dde7cd947f044ac422d9819b807221ad5825d4f6859ff2c72f3c22d7331f": { "f17b1d4769177c8b7b3260aff487e581de4450f37dd2fbeff3e0a899b7559706": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.865Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.871Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.873Z" } } }, "95219024ef9522a55be4e6513f75defbb49883b4a5e32a05d187bbbcc9f53c16": { "069a5c20a99f64397b1d13060b06470148c26b5072a36b8e1b16d746b0e4ad7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.873Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.839Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.865Z" } } }, "9829e6d504f03f89cf3f9782f9238f3dec6efd6d3810dd672ec15bd67e65f810": { "e59e26adb9705f2e6456ed1518f0aefb7d0cf0e3b13b040fa78b4a590a1181c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.864Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.865Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.866Z" } } }, "9f51461ed5499a8b1f450f23f773f55200d3922c76578fac080589c6d4bdb7c9": { "eaded5b9cc370f7c0893d58a270227dd93fe67bc1568a6b674bdee429e92ac10": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.869Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.876Z" } } }, "a4186d2152fae14c248c1297810d8ae84b17536d8f68513f586c1e2d378d79fa": { "da62d5ba1b9b52d86fdf52ef9a5a5fce77010670db44844630fe457d0a64dfda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.868Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.867Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.874Z" } } }, "a98f06f78a3ec0f29bb4f078dbb0c37f77d01618cebf2733ff11b32c497f7b24": { "a9a69fd4a89753f57c102accc6affd4752db865e189ae4cc4e551815c20e9964": { "jp": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.842Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.843Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.841Z" } } }, "b0f8d850504855a8481784c04ab4b0c0a35453e0ccfb3fd1251528b4f77a8b8f": { "0dbab51aa36f5b479c39c4f615a8a9b4493aeae6b1e482a4ccbb9064901d7f3b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.263Z" + "updatedAt": "2025-11-29T08:14:50.858Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.854Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.847Z" } } }, "b7f8c2c6c3c0d8cae21834a515d86c9ba6864e0aa9c968e945adf28aff1bd428": { "bbcd7ca2f8d136d5cdb1c28f0c53253dd6f2040d23646bfbb062d85161da4e08": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.884Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.879Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.878Z" } } }, "bc18991124499a7f66617eb5b243033498a2376e769bee9084fac4cef0b7c045": { "d62f4767bf6ec9661415c60e24e41a90ba047d383b9bfbb29a327253f604da58": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.863Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.840Z" } } }, "c23421b71aced0ac75a1f6d4e5a8b8ae239e457c02367e880b6d1a4ff7277e3a": { "4719e0b0aa1afb513dbea43054775d5c3e22f6638707c72a91d88a4237b487bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.884Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.884Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.262Z" + "updatedAt": "2025-11-29T08:14:50.855Z" } } }, "c621962c4e9a6c1f2dcb4ec8f98b33faa0d771e9aac97195014471b0f353099e": { "8e462b2a96c9f45baf5c523e8a97e3ffac3676c40724d42a9c5109d5413a54bd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.876Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.873Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.875Z" } } }, "c6addfcf4c2f183d0885f78b6bee455eb175ed28099b76df7d58a87ff79c231e": { "0bdad070e3c15637e1941843f067e2a8ab54f34932a6197c4b57662a1ab08586": { "jp": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.843Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.259Z" + "updatedAt": "2025-11-29T08:14:50.845Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.842Z" } } }, "d0a117042cd54d2d897e9ff128bb30722802674d738351bc727ad6a48d97c13a": { "ef198e4984503045b3061df3df5083cc081e20ea251352bf6175ea0983742b28": { "jp": { - "updatedAt": "2025-11-26T07:24:12.250Z" + "updatedAt": "2025-11-29T08:14:50.807Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.847Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.260Z" + "updatedAt": "2025-11-29T08:14:50.848Z" } } }, "216d22e459b5339d73b5e5f5efd10ba0d324035b56ffd8c09aca8ff6053e5be7": { "4347cf6fe8d3643c0bc778bc6d6e1a2d7728b22b55e566913fa8326c720d6e54": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.901Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.861Z" } } }, "2f2c64962247267011454aad885684dd07f5230293d18c996004e9a086a48a9e": { "de25513083b27abcf3a1ed0793d26139ab348f9ddbadba05a87914373d86d034": { "jp": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.866Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.864Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.868Z" } } }, "3b502bb7173f6131431ad8322b576ef99ef5e91d3612beb68e0f4ce3b6053bf9": { "c7797285e4835ab50d34203593f5308bddaddec5d13f14f4f6d7be4be2239eb6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.897Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.265Z" + "updatedAt": "2025-11-29T08:14:50.897Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.902Z" } } }, "3c55f6319b00bb5e571612e6f740d049975d5c3de127e0de80d0f34889dd8b12": { "08f719dba95186bb05f8277899abf3443e7cc9fca51a32ba8727dadf82c77879": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.891Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.891Z" } } }, "40ddf7122cbd5708445d09282a9aaaa01b51f15847138bd583939c6bee63c5a8": { "1efde3a11aa977a804768bd9d231b648a793e9638453375585e0f62486abe9f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.840Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.863Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.869Z" } } }, "44e6428941aba89bd0fd45e401717504047bf2582288d528651664c68b5860ef": { "3dfaa8d64c4eec1438f9e2fdcdf95885e290daa7a1d6f9280e7587fbde343224": { "jp": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.904Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.880Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.881Z" } } }, "5034a9cab8d174bbba4fcce036fa29d5dc6bfa365274ed3cc44a0e5ff13c4738": { "c73720aff6e3013b19ca923ea6650c5399c7cce59157340fcac3ecb68f255f4b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.900Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.861Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.906Z" } } }, "541698242c872ea29127fc2dfe64cbea8b6e3ad3471aea2ac19011a37d71e754": { "08b7c30758e175cbf2a1d09a301193f88562d6e7ab18b078ab6c4b805b81620d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.884Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.882Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.882Z" } } }, "67199cb0b07db7b73e9d48c3856e7a80fa64a401ac9356f38dd56f0ef6af4f87": { "2a193532f966a6fea5015f9758bc034a7cbdfaf8b91c7431fdbc29b0d020b9e8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.081Z" + "updatedAt": "2025-11-29T08:14:50.872Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.082Z" + "updatedAt": "2025-11-29T08:14:50.877Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.881Z" } } }, "74f8cb35854e4cf151ab34a6587a3b0c76868a99d06b7a1b7eb88bfdd101dcc2": { "9431057902d3a29dbfbbd44c8cc88c4dd2b703331d32f31fe7eab5675d5d047c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.898Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.896Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.896Z" } } }, "7e0dc4543c81b33bb19b9b0222c533c95884214b5877d7ed6c08d6101f73935f": { "4d2ea53c6c8b773cda0b23778f9e67b35379e9de8b35e7412e470060aa209fbe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.886Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.898Z" } } }, "885b5d789ebf32a2edb92bc498ab9f2e881afed86ef284b4892ee15109bb1321": { "b7053e1130cf6901ba2d93962cfe71528955b54a3427effb3f8dd0cb63a10854": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.893Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.894Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.893Z" } } }, "8c4025d67d4f83f1787b2935a24ca235fcca456bc7505ac9ac478e5351ad8297": { "3cdb2c61028a51f468d7e958cbdb00bd91b81a31123aacd0a6e4c0f676f159fc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.862Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.899Z" } } }, "9f2ad018997a5b2a59f6bb176b61937bfa9cd7e81143b53306fe58e2c41400f8": { "79e16644830172d488a3acf805a5b9fe0f8b79fdbba1afe39d5495d561479ee9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.907Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.887Z" } } }, "b2c15bf0de452ad7ec7d6015900f40d41f66f8080e473ae5d92a9e398fdedca0": { "a7e5cb05a26913f4d5d6b8e23e33097010b909a91fbc9015096bd23deb3ef019": { "jp": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.903Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.901Z" } } }, "bda6feaa2f751d257d0e9bb7488f846a2998fca7dedddf3b4830683849ba2b58": { "2afea7889acf8ea5044a0d33842f100ab65c6cb7f1df295cd1f21f7e129776fe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.899Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.898Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.889Z" } } }, "d032d67a58a6623fab2b1b66938ad265d806211c7e670b710006fa88c0fa60d9": { "4c0a1b6590854c3a88fa162f08d4611049c85780870affbf3d49f61a3e412fae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.892Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.893Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.891Z" } } }, "db88afafa5d929b34cdf925862a67b324309a0e6c76686a5ccfde2ba82d5226c": { "e4a92a198d90a6cd53c04928fa4fb9c381359603f0c986e9d59a15fa39407592": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.905Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.904Z" } } }, "e18abf4c56dbe146fa998f9070622acba484b5011490469cab0c1e16bc156647": { "58bb991322769280e6d10291b76e02c6a2e7231dc177a9f01f4c729dbe75cc7e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.908Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.907Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.901Z" } } }, "e5455b8e71ca0240dbae9ace48f312b2859517718c9b5597790152f5c5e4c55e": { "70f5e4c518ecfa04a597a86630bfa6b7c13859702dbefa84f43a08c628bb9c6e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.894Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.863Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.900Z" } } }, "f0b04860378a97e43a484e7cfff527be98a82a04b75ec9ff8b95b88bfe017c21": { "4d6e6128d8cb69272312bc10969428b2d7ec14e93843e97641bd6ee1b539f104": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.883Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.258Z" + "updatedAt": "2025-11-29T08:14:50.839Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.083Z" + "updatedAt": "2025-11-29T08:14:50.880Z" } } }, "0f826dda16a017686da9cd258a7b36a8a0fa9bf0906faf288ac5dc07e8293c8b": { "7e91c488285e13a646cf4e0be8efc95cc3461d1b565495878e5ce6df5241454f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.918Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.921Z" } } }, "19d39d202840e88cd6155f2716118be469f38e1c294287f77b535f73052a335f": { "b04b8c8d1915a6a483b4461dc1983e8dc5b3c4131b3c513c2098e3306d1cf01d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.925Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.926Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.924Z" } } }, "20547e4692854c30843291c8c4b85cbaaa2473154a503ada089b47a286e119c6": { "add80eef63fea1cd539d2ca896319743cd0debee7952a9062ff15a5bac9cc978": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.931Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.931Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.909Z" } } }, "3f80767faa69da876f277f16dd9152d0f1e8aba3db884130fa4c7ea029eb17e1": { "c8ca096e88fcce6dd3218a70cf039d6d7d8ebfe91be1b6c3b85f141fdc1feac1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.917Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.920Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.918Z" } } }, "4d30111f145343ad89c67951b74bc9c73865620ef3245a428535e3f9bbef259c": { "db4eae957950b7ac6455d1dc6679f4c64802f86d27f4184e0393be153c8bd7a0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.264Z" + "updatedAt": "2025-11-29T08:14:50.862Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.906Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.899Z" } } }, "4f944066028f36b0a6f28232fe75a6ebde995b969ebfd8a3c379cd645f0ff366": { "8ded3d0fa9f33ae122022672fd02b631471b5177e76c368607b554bbb3efce22": { "jp": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.890Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.908Z" } } }, "74dcbdc993f03875931c0ef548e27e0ecdd4c39c4c084edc6eaf3237a562817e": { "a9ecf8d346bd106208732038ad37c4f2b9861186a25aead51cc7057a47bf2cd5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.922Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.921Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.929Z" } } }, "7ab7a6fd8e115253049873f3b8e272c6c530d1d56d469dbf4d074ab0bc3ae8c5": { "c86ec8922020d2cf9ee2017859793ec04fb19507a65cfb98dd21a9cd2dc99ca5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.885Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.906Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.907Z" } } }, "7ecc3a4ce272f64e4527753ebb952d46d33a160afd6add3fc9a4a9b08d7fae1c": { "ffe09564c5075a69993bd16153054a5cfba44517a2680e60b50e4b87f0a5b83e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.928Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.929Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.910Z" } } }, "7ef33beb95b850b8400aad8ded966f28fd1eb3b61c5de7974983f2270d2b4f7c": { "501d9df3106342436670302f74dd2270b110ee24da435123cc0a1b51633a2284": { "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.913Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.916Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.915Z" } } }, "81154bce9be97a0fc523001b189f4c093458747ff4e9b7f5cdecde64d9163d22": { "126e1bba0f10751cf028401cc1a0f3a944780e4a87fe9b63fb850c58b7d7510d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.928Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.926Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.888Z" } } }, "88d029b112f5fca5e4ba3d06b8c35a6d55e5b557663ed600c6f1b98f59f8ae20": { "1393aaf825d4dab45a6acc1ac4db09d138970e7008f8c78dc434242141a483ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.917Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.920Z" } } }, "9831e429c5ccebdd733e3a8b6a49aa6100e584ba3fd39122b79e1a3df27a2feb": { "bde8f222c01ce8541efa7b5346611e02d7e5b13f92c827e80068ede72769e0c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.885Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.889Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.908Z" } } }, "9b041aa508f2046ee0a4f84858531b8c2507bb6a6989db886c2dd4ea0c11a002": { "23dc86ecd0cc50924f5ea02d06b16b4e395c8e0f2fd73bd76d547ac864d42f36": { "jp": { - "updatedAt": "2025-11-26T07:24:12.270Z" + "updatedAt": "2025-11-29T08:14:50.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.928Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.917Z" } } }, "9fdb709a96f96fb011d844ca13cda88bb361212284a327821501551223a4aa9c": { "064e508fcc9e28910cd94c862392084ac9bfbb28d99941ea8a6c7bf60aa11b79": { "jp": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.909Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.923Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.923Z" } } }, "a08c904ab61d1c76fa622a160e0956711547c3a01e8aa50f73e5c58504c9110b": { "65bcd1c2b5d5887e042c81d6e5c21fc2a0db88c65574a53d172b1f40ae25058e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.895Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.086Z" + "updatedAt": "2025-11-29T08:14:50.893Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.897Z" } } }, "acceced538fb290e4499cdbefd4179c4f4d347c0ccfd60840e8eedd522602b6b": { "124022bd2cc51265ce8f1c49ed73363724b1580a4bbe5d35e3c5d6d9b2bb7c01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.932Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.933Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.930Z" } } }, "aeecbc80fabcf65b76af1cc65dd769022e4856381588c8501d1a59b206c10326": { "0ce14d2631d2a24f63a66e4f8b06f82fee405f818a0bcf369ea6485c8ba72681": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.931Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.910Z" } } }, "b5543674ee59dc5d80ec783390644aa03c6a1b7c91bbff001eda92fd5198a064": { "dce1dfac5e498639b6f080315eaf0ea6f42c51bef46d3fb13e621234a36cb996": { "jp": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.927Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.924Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.925Z" } } }, "e6ce65cbfbbe441fc30cf64ab1c1d1dbe1699d91ca18dfbe615e4a83da7007bb": { "366a43842989bf6846e76c26bbf2e87e00bcb25564dfb7941a416bb6c279a332": { "jp": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.925Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.923Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.271Z" + "updatedAt": "2025-11-29T08:14:50.922Z" } } }, "e8bf7b4871a3b921003161fbe9fb3b3e0df205638abb6aa707688886621c9715": { "15aca606b9aecbf11a3de4acfdee9f33ff548522f3411df807128a214f52bae1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.890Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.903Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.089Z" + "updatedAt": "2025-11-29T08:14:50.903Z" } } }, "e90559dea9545d48d4ab67dc41647c74245d5af3f7450472a6a52017b58aaa6e": { "a15b882337784575046360aea947e55fbbbf97d76e32f32fb9e275a833afb47f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.922Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.088Z" + "updatedAt": "2025-11-29T08:14:50.927Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.087Z" + "updatedAt": "2025-11-29T08:14:50.920Z" } } }, "0b209462f1ec411886fda57e810cd3eea5efebe202ca2b4f5dc9f1fb3787ccfb": { "5ecfaa73c3cc92aee3ee2825b0bb89bc857721cc0ed52b56af3b10a539b65498": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.950Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.951Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.916Z" } } }, "1d14e004d487902f18fc6c1de04f1ef911152e4d8c2d76455e4956d9cccd132b": { "435800632f77c2f3a43f62396007c869bf0e3310b946c504cec9c7661f101c78": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.930Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.888Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.909Z" } } }, "30cf7268ead1225c4a5df7a64fa02d87949b29677780ab8bce4abfe82c42f29a": { "279eb946f79782ab2e8f6e23256ddd3224d1fa15de3a0be112ac3c94bc4312e6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.934Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.942Z" } } }, "3429435d33feb194cd2815db45da2e05b63eefb419c7039d15215e40384643ba": { "918e8abb0c6066b88bb4b0bdf464c3907f836aae0d601ee87bc91ad879720c8f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.946Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.945Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.942Z" } } }, "3fdff0c8c92ebbc95447e7244075da88510e0c3d4966e3b72af95a6e4c3d8e8f": { "1e45c8cfbc59d4c2fd364a34eb2e7afffd36ea4f0b127f873065e2b176a0133c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.959Z" } } }, "4ff60f576a90647ac6859ba05f56e594f54029ca4beea54b1e07f27ee5acfc94": { "b991af90c327a458792ab1640e608a8704cbde6a6f1373636c3d4a5c3445b766": { "jp": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.916Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.915Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.269Z" + "updatedAt": "2025-11-29T08:14:50.915Z" } } }, "5063b2b4bc9b2899fab5998a2b281df0229add76ce268451423a1dfd2ffa5f2c": { "d2af9085fbf80701266de277a6a67f2400d823b5ac0d2ee3f5ffb2eb0b4f0294": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.952Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.949Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.952Z" } } }, "53e5bb2209c16605d7273edd1079563619f7fd4e6e5bdfdb95988af1a4694755": { "19b750db7b91f72b4f9666d5cd502557bfaf69581d6fb96105e239e437635657": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.954Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.955Z" } } }, @@ -8849,130 +8948,130 @@ "611b2b0d02709490f3fe4e3331bd31828428e661cdc38d633fd487daabd3cc1c": { "cb8d66eeaa9869bc4e4a0832238beb5e4b8cc2ffa0e3483678d79606c472c326": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.945Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.944Z" } } }, "633a4ffa471ca2244e6ef5a3022d6a46f51861f23239b9b4594d8cac210cc0b0": { "011445c96b51faadcc04ca2af74b4a9de574446918a704bcb7648036f25d38a7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.956Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.959Z" } } }, "675843b51c582122de910ed4f222f211176c97af172b7f849c0b8ecd0dd2b190": { "a27dbf65b4c9c2e9891bbf450b7163614f6940254a6ad1c1db78fd18c3795fe7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.948Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.944Z" } } }, "798d0e3eca2e56d6aa7658d85b9a41657e3aacf854913976ea97d89d8865966a": { "767118d90c94b77855b18cc08229cfbb4dd47ceb560ee656c0882c9192c24418": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.949Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.952Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.953Z" } } }, "858c3c5ed9eef8bbc65ab6bd6d04421cdd9d8ffdc620d1e8becc8e78f8cc2970": { "272ee010337aa027090ddbeff208e3a6d597280101959048ceb7f7a899d361b9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.936Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.940Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.911Z" } } }, "991e27fab22b52bb4b08b4ae04fdec89d5e6553dc7110f7d24b73408fff315c1": { "a03618c42cb58f95e7e03a4057880d077e66e088f5502749a604eaca3e70f464": { "jp": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.953Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.950Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.954Z" } } }, "a6b9d4c5cae0464959192ad659ed2100cebdeb8bc49e4c041d80a9c6a804808b": { "e888d9f5660cbc8a94390f0efc75e38b61355c7aed5b560ba7c55138aa191993": { "jp": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.912Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.911Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.912Z" } } }, "b7a5608a851a55f00f22ae8d517987b946c9c3eb543370562dc786dab3594714": { "88a876337f46351c9ccac93457f33dc4fb23d9aab3760cae91e020811ac6f19e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.954Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.272Z" + "updatedAt": "2025-11-29T08:14:50.960Z" } } }, "d9b29cc47744c8dbd75014c191b2d1b6a6cbd834e8f58800d7ab54ee3b380193": { "790a9a7598eac524933e6837e62602bb54c548d8cae162ec8f67203a8285580a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.946Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.941Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.940Z" } } }, "ec3ea94f6a821f3d66e7dc9993bc4fc2b65580f3ce729e89dc7d1d6e9711078e": { "078157aa36205afa5c6e11fa8f7457d8696fb79062fc79c709121c33ed2a7d52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.958Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.279Z" + "updatedAt": "2025-11-29T08:14:50.957Z" } } }, @@ -8990,1339 +9089,1339 @@ }, "97e44c5927e52bd9073aef11610c839f64450b48880fbf9a450f43177e163506": { "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.941Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.939Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.937Z" } } }, "f62c32cc2359a74d04c720f97feb4119997308d7027c0a473d0878ff90a711e1": { "8bc8554c77b98b4cb1507facebf9be6cda0cbb901ca29360d32136bfd62407a6": { "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.913Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.912Z" } } }, "0788f71f3701d95084837950d519aaf717087552402cd82dfcf4236628f15af7": { "1840d9cc80dd9c8c8cc0209074557de0b8c1bf9c2ca33bff6ab6effea03e9a16": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.963Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.936Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.935Z" } } }, "0a5e03fdd60d6da9d1347b2bf3d6f54bfc297dac14108de9809e6b2bf3665be6": { "21ae110d91d8fdefc2b7d4393674825fad68899404deb0a78de5c902d700b719": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.970Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.969Z" } } }, "178c705b2c62c01727a80327a809f6535d583c870ad39995375a10a363a1d727": { "1589f225c754084b804cb1b7c426921b7979e160c01fe65dd00c2a0a3e3ae3f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.963Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.934Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.967Z" } } }, "28de08e6f00a1c0b51895715997e43dbe463c1c4cff9b002dd9014edc5579dcb": { "46a435b4ba73651faf0dfb756e1f9ac1d59de7e580a40c74411bfb41b7c958d9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.936Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.934Z" } } }, "2b86670a1b384ba80cf06cda553945f2f2ae1c3d4a369cf46e8551544379716c": { "4169ee416284b3a8de7ef404d0519465870ec5b969e0dbb0dbb883cd456ef93c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.972Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.964Z" } } }, "349400436c332178133e694bcd47dc9ccdf4d729cfc274f1f99bf82b54fde8d1": { "312b11780c641636863655dd7b1fd8b57e6cba8bebf6946857812ca2c3afe479": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.962Z" } } }, "3798000812ded299b4f0b685fe4df133730a45cf67c87419cd05a769b727f03e": { "1810bd73113c23ab353e5810beb46fbccbee2f443e979883aaf33e93c1afa116": { "jp": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.937Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.942Z" } } }, "4047bbbf1b204976cd120655b4d3e85ae62f7963b1cd9eb60447ba1c7a58d925": { "0250b8f7933c3640e2d5931945a7588921cbebcd1ad9f8227d1301fc00ccdc41": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.943Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.946Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.945Z" } } }, "560a771a88f358751a343c140ad56fb357e898496988479f8f38d70c5e6abd73": { "9d206180b799fb716602163eae19d67a30abf8a23c3361889197d04fc78bad52": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.970Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.964Z" } } }, "5c678b3a4246706bfc999afc97cec53d8c982fb87363f87665082241361a5d73": { "3bc705589b64c0ed96008afa97074822fc2196c075b74f42358b16d267c7160a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.967Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.972Z" } } }, "6021378296fe97cd32f847567e8226b5b01ff3e70c1eaaf35a828c9d29135ea8": { "a116f2580c016c233d50250b989b32bbe09ddafa83b8dc9dddec1dfc676909e5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.968Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.972Z" } } }, "773e022e6828901db117df504dcb5f22c010a9943c580fc510044d9585197e57": { "b629f3340f4e22116ec115e53eedd044eb499d902c10c1c5d836dbbd184e23b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.969Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.968Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.967Z" } } }, "8e7b5fa5ffe7d88c028b17edd689a831fdd41f6a2fc82ff78123493c674623d0": { "ede9c0bcd24a013660cd4a3b395c94ffbe54ec3e8cb4f5607bf18d77ba8eca33": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.974Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.970Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.974Z" } } }, "9011c5f16cd48892d19d1f38ab22564d7b0466e5517619ebecc2bc7e71bcaed8": { "28412c34a30c1203bcca0cbcea84a0b53297cedb3c9afd82adb465da3b94442f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.975Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.278Z" + "updatedAt": "2025-11-29T08:14:50.948Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.947Z" } } }, "93c3b152cbce0393c9c6f97cf591c3711cbf3f81789b2925cea760c4c5cff676": { "a411bf07df5d4b27d21c51466694fc824b2f2422d09fd22f63570974bf2e2f9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.276Z" + "updatedAt": "2025-11-29T08:14:50.943Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.275Z" + "updatedAt": "2025-11-29T08:14:50.940Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.277Z" + "updatedAt": "2025-11-29T08:14:50.947Z" } } }, "bbd2cfba8a3c3afd64babc88292f440871b9379ed0c722270cbaee5b28989f92": { "c2ff068859047c7491ef0445b9b895d4133fbbdf15a64d444483ba2ed4225407": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.973Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.971Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.976Z" } } }, "be8dc1cd18e614d45a58deaf1024b50c63f3b407079c8195f643d25501e18a86": { "835ca542a441c446925af17c0332381d8c4950cb2f458181ca206b84a34091ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.282Z" + "updatedAt": "2025-11-29T08:14:50.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.973Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.274Z" + "updatedAt": "2025-11-29T08:14:50.935Z" } } }, "bfd7f9d45ae0b09ed83b9f435d6a0720b54f9af64528eea7b98d70d76a9a29ba": { "db0cfeae11a772453aa791ef8a6aad69ed5ff266472101082ba0c8d64ee078c8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.283Z" + "updatedAt": "2025-11-29T08:14:50.971Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.281Z" + "updatedAt": "2025-11-29T08:14:50.963Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.975Z" } } }, "c3760dc390d98e6e5ed5a4a74c5c609915d05a7a63963656f7715607d65ae092": { "2904d7fb4addff8bf173ca68df5b540945453ef8fa9eec76a35d8f9b92ab8b87": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.979Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.980Z" } } }, "e7312c644964f4d389a9171edabe14341e5e6fdd852101cf9f16a264088857b7": { "2904b07971746b903763bbcc8b60c7bc05a984fd6692a24f60eeae21856cf64a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.979Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.978Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.979Z" } } }, "f5e8eec3fa4fdf1b4c16b4b71f35b278d41db6e5586c66a42fe590521942f347": { "f9704f3dd2bb395a82abdb0dd1b7b09ea97a4499075e9bc8ecfcb0ead44a1d69": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.984Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.982Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.983Z" } } }, "0c9700318afe07f773f3675286dbd1308302fb5c993fc403ead5ee2c2c311f85": { "26bbf167b8a8bdd6e415d3cf429c935f63ed38563bdb8697297248361bdeffad": { "jp": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.001Z" } } }, "1205bf7e48133304fe346efa0309af05787e80fd6f83623b178426d0d89e43ab": { "7a4af08a1b17f2a86db198129d22bf1a71494ef3425bd28e8251e46075a27288": { "jp": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.977Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.978Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.284Z" + "updatedAt": "2025-11-29T08:14:50.977Z" } } }, "3c59f44959e6e9ca6acdb43ffec9355d9485257cc402a212ce1759a0064bb981": { "1ec8c112466533ed9f452783ba3194be3a2def5e0e028ac74fb3913e56cc2f4d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.008Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.005Z" } } }, "401161c2a7c478b5179bcce758b06f32dba0fdbf9bc64188f2d7f79dac72dfa0": { "f590407909c6eb71eb806ee84a3e8ff079ef373b53b7e0b97152b2c9ea18f318": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.008Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.006Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.003Z" } } }, "48ca9336c96e6bf5d7264d6ae62d5ee29644e6c214dc339d83a610716c484ff0": { "6e9ef6dfd8e741fb723339409fd3ec6e0e74d8c83d08b37cb60190c4e83a6762": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.995Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.996Z" } } }, "51b2a652cdf591979b38ae330c8306c66fd1186f911c915e5aa9e108a6876603": { "a570b7d389235335a4604eebb1f1ee2a84cfb547848012a3f76c135f5a18e3f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.009Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.006Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.003Z" } } }, "5272155dbd5220decd129a5e4b559edddbdf6ce43e7a6b8b33c93f39ff269597": { "976786fd43e7ab3db7efe0f5493c2e4b732add2abc4ca3639e54d6dba7ea3e9c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.992Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.992Z" } } }, "548de96f50ceaca8e5445f140674be40c17b5c6efd12a9ec257c21dcf7ff409c": { "5b113a68ce6ddc11290d264ed87c01b3577af499c83519374e7d367764d8035d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.960Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.989Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:50.988Z" } } }, "65a720c2ea0a8158d89758ca90889e7cfba036082ddc99c1900ceb31830b3cd3": { "38abb8321a70b767befbe0fce1b421459ce68d0c40703530c81bd00bb0fe53a2": { "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.991Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.090Z" + "updatedAt": "2025-11-29T08:14:50.988Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.961Z" } } }, "693961a5d1fa6bea79f69b1d2a739db59c41797c8d322ac4dea99c908e8abe46": { "b20f75da8b934d12c4230b89c1dd8cd4bb4b57708832dd5f413fd6ddf12d4434": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.997Z" } } }, "822e90a8485f6ba254a1b6b4f89bbeea67771bd3cb9f9d6241558e4b9f59e8ca": { "3442662c930110d3e163429ea57e15d27f6132307f6bdd86dd62fc64d01d1c48": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.995Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.993Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.994Z" } } }, "8fafd060efa9d7570d6665629f29f511b108ca76567a0f8ab9320536cf4824a3": { "95dc2ad2c072c0167726cf92eb31cd7af87b0eb4785b0fb839363d03a88ae8a5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.985Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.983Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.981Z" } } }, "910c09772c30498ccd96c4a7059798706b5861119f5ae8e46d899e9a4da807d5": { "419e68f0fe31b19a72d7bfd6b1b28c27298c6d38904baf049d3466be88aac0ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:51.000Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:51.000Z" } } }, "9d303cf2c426cf20096b5dc4321074d62704d00520545ee1bc5184cdba1e2bc6": { "ee164e4761915f7bccd76758188f979de64e4ab9239556b390ffac31d42aaf2a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.007Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.011Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.007Z" } } }, "a0c24fe635a0e43acb3d80e4a7fc854ecdfc143306eb5b0b77baccd6c4ef9468": { "e71bd647b55a5bb2a691655582237e95f9ff246c5f45f2f2f663e74b62968fa9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.004Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.009Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.004Z" } } }, "b60ebbddf877960af38c601bbdbf000beb3124a60fee1f8c23fed49149d1c527": { "a5cf8d2eccddd9b6214fa12aac2b98dd4e514d569be5e26938ee9a3b11a0b411": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.981Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.981Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.980Z" } } }, "c11fd5cd4c0e0c76b50b836fc0585b7d897d5c6e619c8530f61e70fb13e7d1cc": { "1fc6d064882a931f2ccd7ae4239ad068568c65a8bef153bd6264d39d45bdf340": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.992Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.996Z" } } }, "d2f8552b7911ad6c378a02252cb789aff8287601b71f6571a0f6e1b7a8e78d04": { "94efb582e11f5b80d588c2052e90bfd70b816f556e6039e851019c86956b10da": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.984Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.984Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:50.982Z" } } }, "eb48ea9cc55a5f79da9d6053e1ddc3e175fac421ecfbf7cdd1fba7409a5937c6": { "4bc78345ed8b814098932537f3fc29577489a1bf65318ccf523d0e7979227a78": { "jp": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:51.001Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:51.002Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.285Z" + "updatedAt": "2025-11-29T08:14:51.002Z" } } }, "ec7b68e24b7e06a320d9daf21b92c0a61d2d196ada1c8350b443b492c228b245": { "f255bcf4104dcca52f9807566387c0fcfe6d06f436994fee4179bc40d148cf94": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.999Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:51.000Z" } } }, "eefff94e72ae2ff41e6e3bdfd308882739e2e719c94cb06245a0ddf4866a91d0": { "1a4e25f6cb4dbccbb5205a184e3f9417ca1d8398e86e5433534abb2f3af17825": { "jp": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.998Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:50.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.093Z" + "updatedAt": "2025-11-29T08:14:50.999Z" } } }, "fe9dca2c6fd3af40bc21440a38de1acbeedfae1588e58844d14185b01797ace9": { "ebf565ec610bd53ba3ec0980a72ee44fcc9e259c89089c7d524937e46cc0037f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.010Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.095Z" + "updatedAt": "2025-11-29T08:14:51.010Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.094Z" + "updatedAt": "2025-11-29T08:14:51.002Z" } } }, "0488cc4c783adb013176b8dd5553d28bd7e7ce03785fd0038e3b2b17e6bdf549": { "718aa60f3c8b05491fd8687c867ff950c98134aa648057ef2a403f78f1807100": { "jp": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.026Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.013Z" } } }, "1310e9bab89510f4aedd870fa23492b42460b27cc53beb62388b8527a75b4abe": { "5d36c63b3cd649e6c42f53a7e1722d9058261e3c5703e736f85a4081ed299d22": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.016Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.019Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.027Z" } } }, "313f2f3a2287ee9166540ad792489898b8322355b28ee91e96ba66cf781aac35": { "813cd15c21bab5b5ae060ddf42a770163642046d3681ff5dd1dd8a48b6578a17": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.014Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.031Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.032Z" } } }, "38d86ec85c1c8aaad845db190de05e50994d1a3c494195da910589c64b052751": { "3cff21a72fb101c7dc507cfac07bb03d9d16b6445213a5a7553e646f024ba71f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.092Z" + "updatedAt": "2025-11-29T08:14:51.028Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:51.013Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:50.962Z" } } }, "47aae18e89fdc913969ad0dd021c6affb6a825d67862170fab9bf412e150d04a": { "7845706578879f0d6235708b243856e2005db4e602dca78be25078cff83676ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.035Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.032Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.015Z" } } }, "4a1e810e51a719b0c246d3a43e6419bd4b987b2e7623567a865586ec6ed3fddb": { "ed63b452ccdcc51644ab26c7e164fd9c06b4fb9dd0f29123b7c142d640dfd731": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.019Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.014Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.015Z" } } }, "50a5598ee25c450c5fb03f18bc79c9f33c4b2d45dd82d93378770a029449765f": { "d681b2d70ad9048fc005dfbd39784bf38bc368cbb6e601d7be30a81c02aa66d1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.961Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.989Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.990Z" } } }, "58592583285bade083e9bb2abfe89113954c980d6a63fd9134c60920badad2d7": { "8b688b902eb485da1cd904c9a534e7c30138ddc8fe157648544914cd332f7701": { "jp": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.017Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.015Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.028Z" } } }, "5adf48b603a73cafc111898833bb810f6f9d985906f5a28a6b5510c4ad5ed9df": { "ded6c22af292aa253dbdb1b8bcdd3dfedbd38430db398f57c83b96b8b42647f8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:50.986Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.286Z" + "updatedAt": "2025-11-29T08:14:50.985Z" } } }, "7d16493aea7d06c09ef802117a0be5f6d628751d0a5c7a7b03ce8eb9dc409bf2": { "5c7a7e89cebe18dd07de910c107fbcee8795947ad29a2d17a6d6024a235a658a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.989Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.991Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:50.962Z" } } }, "948b9dc936c07fa8b4472138f98721317baa561958a48a6445780ecfc6a1c485": { "2f113bab1b3e6819aa420803e0868837c5a60eed370a5c0708d29084e14f6cdc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.011Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:50.987Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.014Z" } } }, "94df9a623cfec05c2c5b489fbed533e510d65ccbf937bed27f852c60f3a24b6b": { "4d71c012d9187781ca8fcfad6d17272ce0479d7a403fdf6f4e13744b2054c414": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.029Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.031Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.027Z" } } }, "abde8721a04c3899ef6606633f77be77e9d032a8fa7f37d834ba01a23fe119b9": { "580c03f819a51524be5321c5af5b976bf750d39a4e3a64a3dd28f32805924089": { "jp": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.012Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:50.987Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.013Z" } } }, "ae86875e3a4deeec5b623e90f58d3191bc8e79167da17320095d45b7aefc2243": { "8e8b9e7eee69658acfb5be5d7837a6c6af0457a30ff7676b0d57099a5399ff0e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.018Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.096Z" + "updatedAt": "2025-11-29T08:14:51.012Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:50.987Z" } } }, "b5d0eacaaf66596432fd2e0164bb5f867e3cac16623e968148a4d757d106c3f9": { "dd01468833f830dab589b0b46480f9b998ba99103d12ff19ec3c342a9f0a9138": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.031Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.019Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.030Z" } } }, "bc185d41a81a462e3988685f733423500e79d9186808359cf876254dfc1df6b9": { "873f51e584f0fef0ed5ce12f52eacab370768a902dd8b25575c46c3ea3925c19": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.030Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.017Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.029Z" } } }, "bdf609022e3136bdae1def5400ec2932bb8f17ea8d7d49a273b0293defd3affb": { "f21711f3b2d080fbcd8a0d170f14659f54ad538d7c534cc91bee92cd96943824": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.018Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.028Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.017Z" } } }, "c5084a09df628aa86f5f8693b10a55f9e8af3ba5b6e50ed69ff474a580871673": { "639b5a2d990e67de3c2c8aab1480380f68b5cffc8cb43a13b0da74c601a38749": { "ru": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.020Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.025Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.024Z" } } }, "c6970f5399e645bf58a1525ef6209242f22690e314c9ec2676aa0f609e60850f": { "857e9c3ca17f16a6e7331b2d62e9f15ea308a426462699ae488f7fd808b8bedf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.028Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.097Z" + "updatedAt": "2025-11-29T08:14:51.016Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.027Z" } } }, "f4e806b4f6f3414588a99250928aefb88bd97521c5fb9f755d133116d676e98f": { "b47d5c0bb52bcb18d0784610fd2a2faa24c97495fc26370a6b4024b1a998b212": { "jp": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.990Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.280Z" + "updatedAt": "2025-11-29T08:14:50.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.091Z" + "updatedAt": "2025-11-29T08:14:50.988Z" } } }, "fe52a1835874eff99646b2ecbf9812aaa4ad459489ce76c856750b021e1969fb": { "44b9e40b3ed21a0eb1effa1387bbd83dc88cf7259bae3bbf2af2a134b07516e5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.287Z" + "updatedAt": "2025-11-29T08:14:51.027Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.288Z" + "updatedAt": "2025-11-29T08:14:51.029Z" } } }, "077683f76fe06aef19e3361bceab4bc549399e0723b4d9d14415d78c7b29cdfb": { "fe9570de03d2029f3efd3701f8a9844fa8bb91810ea7c58923ee8d0766854adc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.046Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.046Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.051Z" } } }, "1d4d6e77bcbd23d001d1913843fc6c9748753173b9770ce333d87441932130ec": { "30da2cbfe92790be7c2f95f485c2ea63c4ff423ade0453d52e65f78a6fe652c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.045Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.040Z" } } }, "37b9937d3f28ea06521af2789937cb6974b4bb1da71a4e0e38cd433452943f4b": { "ff41c613f12a073c7cfef1f537c5bef8fc0820fa48eaa7f6ad0cb887283d047d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.042Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.036Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.043Z" } } }, "4503f45c726f639e1a6502e2fa738700aac770245105ecbbc3d6006506fa8e7e": { "b3e6deff1b1839f01fe2fdfb7c34b1a485c8bd5be58b682ad09b971716acc42c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.022Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.044Z" } } }, "45c696d22175381569602ddc4401df16a7d32249c5f9994c4b98bf2548350315": { "65644f5b55fd61d8fdbe8a764e605ff7e00f6ec53fcdfa43f484a5638a58d2aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.053Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.054Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.057Z" } } }, "4d6593bbb881e0a74e7a089539eeba4aca7019f581c7caeadeee04c001000773": { "d16ded5082885b0eeb5b28bcee5bf878c87a2cc092934fcfc328a1e535effa1f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.051Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.038Z" } } }, "5c12094be2a10a85a875ce129adf37c46bdae04160dbb85b3eb63b9c69e7f6ac": { "bf9cdc73e3b5ca0e62d14af59e1854dd6d45176f362f34533c815c278385d1ec": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.036Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.050Z" } } }, "62508936e6b3e7a6b965ed3df755188b154e45270320ca734cb0df2e29a942a9": { "9a4adbb5e86533b1fab803147ed4539c344e121c9526ce249b8e3c49744c7702": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.045Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.042Z" } } }, "7a1451fe8363988c04d1df2125cc6a560940a7c034905f5e75da236ab427774e": { "7f9fa8dfaab48853ecedafd465b380359704ea83aed218c677074831e1cc0932": { "jp": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.038Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.042Z" } } }, "83523c78b37179282ea3d0f8a98cd8c0e917e50caaf74f38e237b1b1f1fd7dc1": { "7f172e3eb258a3b4cd3c132303859997ffb354f24a60481f04ae0f80fefe2147": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.041Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.049Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.056Z" } } }, "89a6cf75614ffde882ea0e38b857ec20bc3415e924373b586ee53a84d81b8dac": { "212ef1dfe191daf73ed51386731e37ce6d4ca49f4472b7e471586979e69a9a9d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.043Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.049Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.037Z" } } }, "8e4e3758c244f276a3f91f720f08400f7d3280b2729ed2535fe4b0a244bc1eb7": { "a3356389fc2d7537a8464f2e1646f8f51af66a2d715df1807a2fd4184083a70f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.021Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.036Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.053Z" } } }, "92c4e15d1b1edd5a34f950168fa129302400e9f6ef4fa378e3c7af3ed6ec8227": { "3c3fcd6c5352af3e3f90c0a4d954793388177b9bbb34b975eff1c8f384d445ac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.048Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.022Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.055Z" } } }, "a14794c89d955458a9f5af44d7aaca8d68a05b6880e98e008a7c081604143ab7": { "671b0a57421a638325cbf9c110626a9d5b734267bb8f974814c03393141cf7b8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.020Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.039Z" } } }, "ae39080b133df67d8884d7a8d76cf775ef202d9bf2efb43947344e07462aec23": { "4c42c112034c378e6000b6c987744ecc184d4c90582c11dc33f577b3f2ee44cd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.047Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.041Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.050Z" } } }, "b3e8c57a2ac90416a86e93c4fc87cc9fc69b9ee772adbd854463142bcf0ad103": { "78a6c5fa33437b43f2619fdc05ba1a3ff266f89bafbeb1b78bc71a0ed76a0496": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.057Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.055Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.046Z" } } }, "bfa5f357797593cffea8aa625d31e79d5f58effffe1213f1bbb7b709e0c951e9": { "9dbe571f5b98f8fb6c1fe7c120e80cf8fe72a659f77f22e8b74282600d4e9325": { "jp": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.038Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.040Z" } } }, "c593a21ae24f2adf1116e2099fe2cac24733672a1fdacfbb7d9be523e674a070": { "3888654c7ba7da0474c2c33ac3100faa58509581ecb5ff97147be80f6c3ddc7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.098Z" + "updatedAt": "2025-11-29T08:14:51.020Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.045Z" } } }, "d2d56d1eccd2d86a90004069292a4cfc31251986d8bb238fa00ba3a4aab4a56d": { "dc92ad8afa44196810e06c60223ea9ca5b982c40325ac54b37fd95a9f450fdda": { "jp": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.044Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.290Z" + "updatedAt": "2025-11-29T08:14:51.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.040Z" } } }, "d36f1827c010ce2e2dcab5998b4c489e963acbe4c2d8322885eae6daf7d3e446": { "2d4e379a75efd761f80eb533b3cf33859ee34ab855d930fab99c5091b13fa5a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.053Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.021Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.291Z" + "updatedAt": "2025-11-29T08:14:51.042Z" } } }, "f27af8909a343bda58696e815f4b50b00101d0dcd66b99619aa579b381a444cf": { "929021d21964c8a27df287754f3bf673b1e9e43e5b78df9447405b8197530ab2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.054Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.048Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.293Z" + "updatedAt": "2025-11-29T08:14:51.050Z" } } }, "1d24065c2e7fca3ac3f26d0a2b7ccd04f7ff1ae4faa321c7335a8e84eb0ac0de": { "e323f890710302432f3ba708412993f1d391acfb58bf585c82e91d8c3c5b823a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.068Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.066Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.065Z" } } }, "34f6accb938658c99a83aa179d1dfe75fe3f844b0e815b1a8d42a512eb830f06": { "c43e5de4e7fa4afd53423adaa427167edd9077fd3af0bcd8e16a72269e83116f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:39.788Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.067Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.070Z" } } }, "45e2237668cc8f027e43e52ef4443b8a53d2c07dde3b858205c9c43057f4cb8b": { "66380f0ef83c18a16b8296671ad4697deea2b60436ad4259cd3c3df09895bbfc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.035Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.065Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.064Z" } } }, "4e39f1cc2912db452edc06d93f7f0bfcc091c2888f064a3281bd99e46645f722": { "48a7640cd750631e03fa4c3747cd09af737c4ed39ad0a40e22ebcfdbc24b9872": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.056Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.292Z" + "updatedAt": "2025-11-29T08:14:51.044Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.294Z" + "updatedAt": "2025-11-29T08:14:51.055Z" } } }, "990553ca9f9ae4591aaae11318ecec98a52d743479ad68505f33d7437ebdcfe5": { "6706062fa424eac816c221cf4a0ecb23afeca8ecbe3f4830da0cee49f3af5b55": { "jp": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.057Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.289Z" + "updatedAt": "2025-11-29T08:14:51.035Z" } } }, "9b3d838535466c0adcbcf2c1821542686b5932d55c219ecd4c54a8d3d723b617": { "b968225991ebd30f1600f3ad485919d0badeecf3a3e60c5cb52b71a85c5611c6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.064Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.063Z" } } }, "f8fa9a1c93f8857620e1d2d6052e2a540a9827ab07e015947b84e6fc066cf05a": { "27bc228b35212b29d55733663b0d676059fdafc2d49a527814889b3aa40f6e10": { "jp": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.065Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.295Z" + "updatedAt": "2025-11-29T08:14:51.063Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.296Z" + "updatedAt": "2025-11-29T08:14:51.067Z" } } }, "11aa99a1bdc8390230a974032f545ad7fc914b9d7d7512e6f3d523c3c3315925": { "25ab99f304def64235d114ed61495f4a871f63a473b431f04505d22d84acd92b": { "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.025Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.023Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.026Z" } } }, "15a59bf1722e4b12c28df70766e0baab4b9d5a6f0a0473fcdaa0c562dee3986b": { "38c435040eaac3147a4b165e8f2e2eea100525b71769ee62c7de7604c2c7decd": { "ru": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.024Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.021Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.023Z" } } }, "a840f2497ddf7c24e3414728a66fe927662c74a0473293e11a93429df3ef7e1d": { "14417b042f80b8359063dc1571b796f4f9775e28a90c36436b10c493b04268af": { "ru": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.025Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.026Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.100Z" + "updatedAt": "2025-11-29T08:14:51.043Z" } } }, "e843b874a573838613448a25478fe1be3cfe8e1a5c23c7d816af626567769147": { "8cb205aa323de3c2fa63f58b08365d61b559f9ba1b8554ec982b293d9a83f80b": { "ru": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.023Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.024Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.099Z" + "updatedAt": "2025-11-29T08:14:51.025Z" } } }, "3177435d774099d4ba686628bc971ccc42a54d0a0a211c8a4424bbc544e08540": { "f15d74887e89dbc77f9957e1568c4842460915108734894efa6e2f081275d68b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.256Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.255Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.256Z" } } }, "3caedd95aefa51553be1069772560367e021728814e3e4cb4e732e19460e0502": { "c808220f60eb5bb176af1e26539836830b9934b93a9bc1e1e62fd9b90ce36bc8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:49.705Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:49.704Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:49.704Z" } } }, "853246cca55f655f764269048050edb509e178c1ed6b34530b7a3aae600ec2b8": { "0a1abce96f2027f1611f7096e0422a02de923c3698460cb2c242ae3092e25c81": { "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.442Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:49.698Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:49.699Z" } } }, "a030bf426b6662b4674be21ff621cb7fabbfd26f971ddb89ac770557065aa0cc": { "f732d015e8ca7a50761bad6c4404360438b7df18567a96df59faad98662b6017": { "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:49.698Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.461Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.714Z" + "updatedAt": "2025-11-29T08:14:39.441Z" } } }, "06c88066bda47d4a934bcdcd6f121c4c1e22b06d73242fdfb1ab310a2564cf7a": { "f10ca14dce06ec46cdd4e21bcf3783e50fb8f8e2c7873cc6b828db0e89c91024": { "jp": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-29T08:14:49.701Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:49.703Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-29T08:14:49.703Z" } } }, @@ -10337,83 +10436,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.080Z" } + }, + "fd960e0ad4a4e719414c642095987287a615859dcdfe78dc5e4ade0ad15a3dc3": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.465Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.466Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.466Z" + } } }, "48bd4337b75cd02afdef9e5066ef37aa097bb2376a0997cda1862ec2672e0bb6": { "c01428e3868677f56a7361089108618d1aa1b3f64f9d078f8a9dd079aeceadf1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.727Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.726Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.727Z" } } }, "4a871b3501c8910734e45bfd046fb170eead507a557e7fc029a9720169d74f60": { "a1bfd48d5bf528dd7d49ff5929721a27fac3e265e20a187bfe5603465299248f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:49.699Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-29T08:14:49.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:49.698Z" } } }, "50f0ba5685aaf3e9d2d05dffeeaa45f47b7ed622dc20465bd6aa71e7192a1a6f": { "430792450e0e247081db5645bfe27bcdf7c5efb4c46fb798c742aecf01bea55d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.719Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.724Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.721Z" } } }, "5929e4805377229948887e5ba720274840b70d5c8448deadfee3a33803c24777": { "4923fea66c23915a7ee88662e5a25bc88b6e63399b5f8007edd0a604f6ff29e9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.695Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.693Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.696Z" } } }, "7f4f10424fd5d15211a9b2e7f5376cd61876478ca1e288c42f77a9d27815ed3b": { "49a85cf8c399228a66495a6ff70df4eb90e968fc2a6386b6d0c3a47d1c6934c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.728Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.728Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:49.704Z" } } }, "8fac3eeff35b863ef1c1a857ec5cc7ec6c5e04a3ba1b53c0613d799e0ab40033": { "cff3cef9c9971227c006470a36ab779082e9292add9a0d6480da3c2873a882cb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.696Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-29T08:14:49.701Z" } } }, @@ -10428,31 +10538,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.079Z" } + }, + "ffc6e2c25867e91947ebe1d8e03113d4066168fa2d6eeb0262027942d80e056b": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.467Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.468Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.468Z" + } } }, "d15bbab335414d4d8b8963bf84d8e6840415a3fc839c797f41e13afb347c0e66": { "7eff53190c5a3759339978f7f7f8df28a9281bca9df3218c5f48b98aefdb5e9b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.697Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.696Z" } } }, "e524f82a69f9ba0c9ca77d93ce6f9a713d13f108480d3945dba1962f5772ee46": { "fbd98a73453eb2fe0d0b40e9e69f2c6435180be06375fe9f19e1bb909573407f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.717Z" + "updatedAt": "2025-11-29T08:14:49.697Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.694Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.716Z" + "updatedAt": "2025-11-29T08:14:49.694Z" } } }, @@ -10467,135 +10588,146 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.078Z" } - } - }, - "e9001fe7adae3ee521c4e8d3e207693d2c40ab3153b629428457ad95a126e11f": { - "c925c5d3c0431c9ee3487e60721536bea2826b1bda255f0e4e9add7b81f2f4d6": { + }, + "0d09d70848bc3db09e2e67fdd516909f6d48129455d42ae148932d9d2a956682": { "jp": { - "updatedAt": "2025-11-26T07:24:12.081Z" + "updatedAt": "2025-11-29T08:14:39.467Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-29T08:14:39.468Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-29T08:14:39.469Z" + } + } + }, + "e9001fe7adae3ee521c4e8d3e207693d2c40ab3153b629428457ad95a126e11f": { + "c925c5d3c0431c9ee3487e60721536bea2826b1bda255f0e4e9add7b81f2f4d6": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.703Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.702Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.702Z" } } }, "fda80bc8aec70f334713b34cf3411a9095abb45fdde35b4e250c9120d32dc223": { "9447f95299ab26e2dc058db4d4939aabd60236798a21696a52feac53fd714475": { "jp": { - "updatedAt": "2025-11-26T07:24:12.080Z" + "updatedAt": "2025-11-29T08:14:49.702Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-29T08:14:49.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.079Z" + "updatedAt": "2025-11-29T08:14:49.699Z" } } }, "14ced74ae89aced82700fb3f104dd8a0694c5c0ea94167d31d43f1c1be2fb09b": { "cb8ca75fddc3df71a3d63cbd9d7f7fe682786749238844ed9083730bc07d7cec": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.494Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:39.498Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.491Z" } } }, "1e26f8437fd2a7483c1f29a2f11a909ff981448ebd08fd7cdce54aaa31e8a511": { "1c028977ab28be717baea644e55afe62584b4eec751926769c92c424bedadeac": { "jp": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.725Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.726Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.725Z" } } }, "1f59d80250965bf621c38a8cbddf5b2e006f67743e1775da704d9729e6c40a23": { "e842588d4a31eebd61f2d17142402ac96b93d20ff0258eb94f82f5209a3ad2a1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.084Z" + "updatedAt": "2025-11-29T08:14:49.715Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.725Z" } } }, "2024dccfa8cbc20dfede60ca15d6ac2b721789dba97415066cafa133d075bc71": { "ed44ffe66e8c1a1ecf0ca6bc07d18f43272ec161a9e95d0e798e64dfe432b703": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.721Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.719Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.722Z" } } }, "44c5128a3edb936a9926b4b513a202ff12d0f2f99f0c07bcfd8be1cc4723be33": { "ae80526735bffb74b999220357c744c052668c14fe1ac555f4b49132850620f3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.089Z" + "updatedAt": "2025-11-29T08:14:49.706Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.485Z" } } }, "46ae531d604a943d4340ae2e6288c87ed68270217d4e05122a7521d428519ef3": { "fe9a9e2137d1cae06dba9ff8e83ecaa3649ff47e77c5892e5e7eb1529b298c64": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.486Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.489Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.486Z" } } }, "54e53c16ab3f42ddf8578d9835bb9d7b843c7a55b19f498defcfab1724ec045c": { "35a38f29e12929f2b225b703480bed8e37445662a61cc1d374ec38bd2400c7f2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.491Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.487Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.489Z" } } }, "687b783276b703fe2b34bfa19c6e6eaaf919ae2edb3b092772cfd3710319c962": { "355157027a1047c82f7755ab15b218d98a8e5232865d69edf8a51337a364b541": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.718Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.721Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.724Z" } } }, @@ -10610,148 +10742,159 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.082Z" } + }, + "744f86f0af840c394271f9f85293e3266bb9cf9887e2f173377f48cf9eb8cc0c": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.463Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.464Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.465Z" + } } }, "afabce4e754c0f29b7593d81718787eebb8e7a9f5199eff6f15750cdc8d874f1": { "b814da04f0b9e71448b22e3ba39231b2c53371ce962656e59fcc8215b53d94b5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.486Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.724Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.719Z" } } }, "b27a2ee952ba7dd3cf6b2ca009a0cd8b86282ef4f43897856e759dafd88540fe": { "32217bcd37f2a7cf5746ec775356d9800b981082b7b912e76343ed0600518f76": { "jp": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.723Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.718Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.718Z" } } }, "d1dee74d727375041e64ceadd78df956b10784ab7e1b4ac16460115a7e9d4ef8": { "469305bed4de1b5eb391960ebef6f0f5096cd86b537e42c0f37ee9f35e087a4c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.721Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.720Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.720Z" } } }, "d536aa9054b9ba72e39103f4f8845be09447ae23a9e70d3baf478d3d2c2b8737": { "74f18e7520467c6186fd7fa39a49176648617574146477b17ce7062d7698f2df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.726Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.088Z" + "updatedAt": "2025-11-29T08:14:49.727Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.087Z" + "updatedAt": "2025-11-29T08:14:49.724Z" } } }, "e56710647bd4bc05384aa8d37b2b94c4c5fe719ebbc36c598369a813b3fab06f": { "7fdb5ba5a1e64258c7ea2522a25a1d7238e73b82d6eb92fdda33bd598193863c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.722Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.722Z" } } }, "e631f7491be262a58a274692876ad3b89d0729e8d0294ce9b3dfa4ed45f95788": { "f3609e7b117bdfa85ee3d950a8fd8f7afee96311aea43d1a833a253a135d50ab": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.485Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.484Z" } } }, "ec626ca92c333df76f0e8018ae7bd3a25ac79ecb449e8db31702fb29bb04506d": { "ec424602c359c5773d3bb1eb5b167bdedb80fb98f907e5848b487a5b40325f67": { "jp": { - "updatedAt": "2025-11-26T07:24:12.085Z" + "updatedAt": "2025-11-29T08:14:49.719Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.720Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.086Z" + "updatedAt": "2025-11-29T08:14:49.720Z" } } }, "fc2a90cf202e8e1844cfa26c61201f10a6c234df6585fc1c8aff86d125238563": { "5680229b7edd18b624f3a4822177aadd2e3930de72a0edd50a0d2924b785a146": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.497Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.496Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.498Z" } } }, "1646d3380fb5c92ec41482a9d98b525c37462130d6b01f32e1855b0e5f91c39e": { "ee6d9f1af26926d6377c040c2405ae576469664c532845e1d506079f9a027314": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.511Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.510Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.512Z" } } }, "1ca8dfc5de116b6a2aecfd00677ce016075dee9e46cc6f57c85776d3ea9b3bd5": { "e84e0b80c498c3151e15f60e104f2cb38c6e40319081435e228dbfd13acf010e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.491Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.489Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.493Z" } } }, "1d1e36aa27a61854f94b1f60418f1a1d666d53319de3e83255d9388fcdfb4069": { "a0e30e85a93f908ea864b663f52f1dfce2a0d6a87372b01c7bf971316d114876": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.518Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.514Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.509Z" } } }, @@ -10769,195 +10912,195 @@ }, "dbf76c8c4d494516e235aa48fe905a94dc6f8466afb98397c14a38f6ae43f681": { "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:49.729Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:49.729Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:49.729Z" } } }, "4d9f585a978f327ccfb66e8db78fa87ec8754d231c098b1a8929e4f912be5651": { "f0713cc147455f15a45af300160f8c01445b53f171e027819d998a3df1dc3b17": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.495Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.492Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.492Z" } } }, "509c73a63f9d009e86d97956ae4e1701003ed2be70dd32b5c56c66bd65c22609": { "c01d58d811ef80a75a56846d05c7b54259075a78eb6a2deb665f4405f861a7e2": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.510Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.513Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.511Z" } } }, "5bd267d7d3d49be2e95b491604023a269bf78bee49b4a83eefa9352690913107": { "9e71d3c2fa185cdf2d0231b06c410ed213fa00b972cdbfefe21a9aa8916bf03a": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.512Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.512Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.514Z" } } }, "66dafb9b646deaa517a7b992eec446570c152c02802db14e18047fc0fba7a0b1": { "f246fb415a6d823d2e1229aaf83e9eb73611213283605b91a0a23a1dbad24f50": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.511Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.511Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.508Z" } } }, "7d4c81a663e077a5e75150c0e14d27c4ec51b540adb7aed379113d299f3c76bf": { "9a1b6a07af2168ede1ef0940be49f9f7462ec53241267251f36458e33a1bd688": { "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.507Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.508Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.505Z" } } }, "8b2242e50cc879742f4d4efca957625a1106cb09f45a18de469646abc82467e7": { "343ceb09449e64360e7e7fca397cfc927ac8e348304b9893b3946e0ca65d8fae": { "jp": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.490Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.490Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.493Z" } } }, "c02bec6d7a15ddb4727d64f0c82f001b4a6994e6095794f3b35c713c1c69cd75": { "f05e5879650490f810241a7e1f46402021938daaf4688d3368c183eeb6dd5b65": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.508Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.506Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.509Z" } } }, "c35a4c218452080886d36470ffc05c5a0554e095f00432e0d7735900c7ad9435": { "9e5d4bd1e5379d30156d61671b947abb64b0c0e6ce551d838d6da2c7907d2ff3": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.509Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.505Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.508Z" } } }, "c97fb19d4fbdf784a9e8916b6965cc8a3ea8fe90f09cfb7c399b3b59efc788a6": { "7b99574846f0eeee45a44964ff5ba57e7c06ca117dc6786a3b1b13201c58cc4b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.488Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.496Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.722Z" + "updatedAt": "2025-11-29T08:14:39.490Z" } } }, "cfcb90141d0b37458f1c2f25a8e506c7c2ceb4cb4e4c27f996e474f6e8c5b159": { "2e2c5497230ef2998811f833ae91e6403540c85762a127d81135370dfbdb4e46": { "jp": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.513Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.510Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.513Z" } } }, "d5c4d2aff5bcd49a39c5a8969a66d9058ea8a6641de98e1f49a707b2a5eb6a06": { "c0bd7005e30dbceab4454c02004199f159d34c9dec509a5c13f2a23d8b720cff": { "jp": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.488Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.488Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.720Z" + "updatedAt": "2025-11-29T08:14:39.487Z" } } }, "eac3b18e7887fa005afb72b037867082f68f247bb61d91f3260e28d28cb1e85a": { "d2aa320a8841951470c1da7b5a35b1b69bf507d11d9b795481a4e587ec4b7bdd": { "jp": { - "updatedAt": "2025-11-26T07:24:02.723Z" + "updatedAt": "2025-11-29T08:14:39.494Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.489Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.721Z" + "updatedAt": "2025-11-29T08:14:39.489Z" } } }, "211a9e255fdac9865968252978823dbe623bf314b09a28779424fb52243ba37e": { "267373ee71eb85826ed3e41dfc0938bb71fbd6c83484df63fbdce933b1a28d1e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.519Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.518Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.520Z" } } }, "4ba1eac8610621c18306898ccbcb9d4eaf5521b4b230d99cc774ec22219c9a28": { "1aafbee1019940fc3e073990ae3817e08af6f7e2ec670ece7d26a194827351bb": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.507Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.507Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.507Z" } } }, @@ -10975,676 +11118,676 @@ }, "6b408329e73e771ef16b20b1ea0ca91a113a919ef9db09031d4181b038bc38ec": { "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:39.499Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:39.499Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:39.500Z" } } }, "67ea1760ac764890c103f9795d76f618a583b0bbbe0d32ad38a77c020d119d40": { "9a32d6666fc830213628b9c378f0039bc1280491f729f8bb75dd81bd764f13e5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.521Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.519Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.730Z" + "updatedAt": "2025-11-29T08:14:39.520Z" } } }, "71b7871a9e60b8462bb9bc1ee2ff376b1641403aad826100b88e087426e5841f": { "3ad40142a5980106f0b667308b9b61cd075b9a565aa267c085988df32d9f9d20": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.514Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.517Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.728Z" + "updatedAt": "2025-11-29T08:14:39.513Z" } } }, "a9dd86f5f7da605aa9337f714a106fa513a631fcf9a168aa7b4e9a3b7ccaa531": { "ea6fc6dcc9635bc1877901795f75089be17712230ae183401a7e6eeaa9cfcf78": { "jp": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.517Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.515Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.729Z" + "updatedAt": "2025-11-29T08:14:39.514Z" } } }, "b4b5cab881a02e5c4333f93e3149c6242284e0666d745952f3ccdc86593f7b52": { "112d13bcf3046cf70aa9ad7b11bd473fb40eb530504362a77d2a53dd8f9adac1": { "jp": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.506Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.506Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.508Z" } } }, "e21164b6c8802133bb1a3d2aafc3fd517ab74e6f8d293b7d293ae968782a8bd6": { "04d3d33fa3cda8a0df74a6fb806ee0f2d01d7cd25cf9f21c9e07d1830f9a9a6c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.501Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.724Z" + "updatedAt": "2025-11-29T08:14:39.500Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.725Z" + "updatedAt": "2025-11-29T08:14:39.501Z" } } }, "f9aa45e8fc85d0cb2d4c76b0e287f8743a40e6d92257f98ad0691dbde7bc3a9e": { "4866f2bf5a753196ff65a8b94a288fa39116ec9e4deeb7ae77c0598af8d582d9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.510Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.727Z" + "updatedAt": "2025-11-29T08:14:39.509Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.726Z" + "updatedAt": "2025-11-29T08:14:39.506Z" } } }, "3e29eb5aca75381e4ec8ade4e6a0cf7d26b53d4a25cb26660ec2c44647941a73": { "c0bfc76e21aac5582f52b976b44aa4baf44b8f76caa3d562ec73e6e4ef161a92": { "jp": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.734Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.576Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.579Z" } } }, "4b875d4cf08501af46c9a0dc4af0b755918205b50ba44a03d48aab3f7f49ac54": { "658a06aa55917c46e77861ee9b9b9643be0049c255c7052d4f6ae6166e655b01": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.753Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.738Z" } } }, "50ddd976e3ab8042db7b5db277b40561a4de66f66d7343d572a7ddd20ad31bd7": { "0aacc185d8105f7e3ea27585dc11ab225da3bb6c1db23c8daa11af166d8e972a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.736Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.736Z" } } }, "54e7a0d28f060089af44ed7367d75f254a6d1b252f6ea6274e58dbe249470b30": { "4ced947fe881a2f40e14c2be1395d6c2cc3e15fe93e42e71df52ec929c2dcea4": { "ru": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.737Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.739Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.753Z" } } }, "7a97c0a8a1d7a2b7124253b37f3cdff0f274d654965381e7ee3aeb4db3323631": { "ed2621c01542cd6c73825e5fe7639beff16cce375577d0d908b8b02c4bc1371b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:39.570Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.570Z" } } }, "893f6ba96a900463e4a20bfebef45d262bc3a3e1452bbe2f889f333b52e5fee5": { "b3a0a7a9c4f2e4c526bb71ba0bc5e6dac553aa232350b1910ad7fbf035734c06": { "jp": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.744Z" + "updatedAt": "2025-11-29T08:14:39.547Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.579Z" } } }, "95a73804027437518f6cb49fd17638db0b1d6b9361ef329c1d59b49231f45112": { "e13f5fe9c753ab5e1cd5c3b9ef8db4c7e56caa299572d07d0368d8af887e99a3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.739Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.752Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.739Z" } } }, "b624c3e0df3b6286b5d61538607b9030a6cd27129246f0485ab94c5f1b0efd7c": { "b4c584ccbf84daf8b7fe6aae9e1c393e8220224a9cecec6d5d2024e0cb7aa654": { "jp": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.740Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.740Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.092Z" + "updatedAt": "2025-11-29T08:14:49.736Z" } } }, "e210bad99f1e8a957566f3f34d0853651d4ef532d83ae50fc1fb032d24e2dd28": { "0b6791886d00299fd2b8b71cf58d276a85916e6880c408cdbef78333d00f1d3a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.093Z" + "updatedAt": "2025-11-29T08:14:49.740Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.096Z" + "updatedAt": "2025-11-29T08:14:49.753Z" } } }, "e77458d405603be885e941ab39a2c03ea7c893b38a1ed1b1c4a5beb9a703c04f": { "f78ef201b8464bb62128fd17fb1bcf8d3f42f167e5b4f4c8547866c5ecfbc7a9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:49.736Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.091Z" + "updatedAt": "2025-11-29T08:14:39.571Z" } } }, "f38d701b9050913191927978c4e261dec48019c2bef4c6a3139c4059c71afaf8": { "0e1ad7c4e88f314e2b810b6f27ec43ba78bfe09eca3eec7d023374756f07bc64": { "jp": { - "updatedAt": "2025-11-26T07:24:02.746Z" + "updatedAt": "2025-11-29T08:14:39.579Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.745Z" + "updatedAt": "2025-11-29T08:14:39.574Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.090Z" + "updatedAt": "2025-11-29T08:14:49.734Z" } } }, "06b6f9b31956eb6e3cebe7421e22abac9ad0de32434585b3bedb572ca22fe779": { "ac6f44e72647bc384df3ba5b105e8bc37e9ce25a9c1c104570232ed738108026": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.910Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.913Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.878Z" } } }, "088f126360fc7b556a09516cc41a4880d4599464d2cb1ff9f6ea02417c6df429": { "04f510d66c9b376ce9989e4858fb9d1204bb45b666002f527435e252cc2dc4f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-29T08:14:49.944Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-29T08:14:49.944Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.903Z" } } }, "13195f1c973faf9aadf39f45b6a4df596efad0f6e4df019051e13dc77eb9fdfa": { "948846a8743f4a90ac77c6ba53e93f5386df8d5310a4b8182265798313dc6dc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.879Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.917Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.919Z" } } }, "2505693dc142fd4f445b3882dc548fa0cc38adca662a63dbfdb437b0f67776ba": { "f86b0dd8e53eca99c2eba408e02d7d92a906e77aee88846c9e24a2d79f1d998e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.908Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.916Z" } } }, "266e0dc9c395c310374563d981fa2685a69b11a4eb800352e56423b5bd7e2901": { "d344c46f769e848e76522e3e0e64f31e4c4cd999a3de3ea3cc10400f0b2826ae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.919Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.920Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.922Z" } } }, "3c3cdb595236de7ad8f9d05838ec2b8bf3f90caa6bca9eb1dbb703fe9b2c5f67": { "22c4567427f06c4ff596058d0963e1977f619d426a1cb0b04f22ad1721307091": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.930Z" + "updatedAt": "2025-11-29T08:14:49.888Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.888Z" } } }, "3cb2ac954c25f39475156759f2f4f8c8714328c659aaba596322bf83f3e3ecf3": { "da8c2bbfc6c34aa9551b3e0a532d71ec831fc09659ffc38734155072f907743e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.911Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.877Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.907Z" } } }, "3f5009534c38cb29edcc48a3b2c5b50aa0363797569ad9ed3c962e075be3d711": { "e52f05211d11daf47cbab45322de5fb579805427116030493d255d74a6de33e6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.890Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.891Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.880Z" } } }, "51d439a5ad94546b36a253aeeb85868911bfe6475f4fefb30756a75f43e01dc0": { "c9a05803f13e75801b4f09b8c52974299028da9cd5533d505c572edbdd11b9f8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.889Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.889Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.889Z" } } }, "5227584ef900ca7684b844bf9b013a21d6faf12f8833191ac40e941a5fa9878f": { "5405382560ae38c848c605acfb1a4ec134912ef6bcad95aab5381530689e735b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.891Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.892Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.889Z" } } }, "a5397922ad119e6b298a6b4b378a68f864ea43c8323107a35954165809de0589": { "488ca0a5b4cba0af7cf4ca440e3733d6860db7e0e1beb8403ae74e4cfd8e7753": { "jp": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.878Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.909Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.908Z" } } }, "c6e56f828d1b34579ba790f93abaa05b29fb89f9585497258413971007a3a246": { "c2f203731c8694cfaf84b37109a789c0a0167657339f75db8fc7b685f948d2ea": { "jp": { - "updatedAt": "2025-11-26T07:24:18.932Z" + "updatedAt": "2025-11-29T08:14:49.891Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.929Z" + "updatedAt": "2025-11-29T08:14:49.880Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.890Z" } } }, "c8b0b34a39a4f363d421259bdd17b9dd8d0d01f815eda9607f0d9ef245895275": { "1126bfe846bb5fcdc4b0c7c2bfd10807cc64d6e12d190d2c824329258baf5efb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.888Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.890Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.931Z" + "updatedAt": "2025-11-29T08:14:49.890Z" } } }, "ce10e9c3dd234b8bf0fa7265cc3f51606b9f80563a4be89f36f9805412c6a452": { "f80ac33db9f2499ec8763473f9aaab8f92e4f89d4fbb898fbee33da6e7d210d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.910Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.919Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.918Z" } } }, "e8941cfe3ebe51cf895d37bfced51319951864655bb65ed34110cfbbd542b577": { "1724335ae6c5171c92d1126311524dbb7f3ba7d451a7907320b5c0cbe7ebb3aa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.920Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.909Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.917Z" } } }, "ee1d174b1119575726aa2ce11719dc7482af9a58eb1e4c20075010bcc5bc200a": { "85b1114daba44b005630b9c50a7b4b79dec7d53f4ef54586f1ecd92f3f5c5d72": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.907Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.878Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.916Z" } } }, "0cb711998b74fbafee6f9dbe1cf42999cd6bf81fb67aba52da75f9d6e7820916": { "1b31920ed434089b5c438486640b5af358c740bf6e33cef31bc59a7a8cf7708b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.946Z" + "updatedAt": "2025-11-29T08:14:39.608Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-29T08:14:39.606Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.940Z" } } }, "0de197a09c02a6e7de6b2120720f01b2f26dd69cc09e57640234c52fe619cbe1": { "a3b2b2da1705264e477035d4c4f93d27e7c159e13c8fefc67fdbac404fa1df2f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-29T08:14:39.607Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.945Z" + "updatedAt": "2025-11-29T08:14:39.607Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-29T08:14:39.603Z" } } }, "39f0108c94bbc9ceec29295e4a5c4a30bc3ed66e79dcf055c93bcb5e07df95b4": { "f14661437615304886b90084f8db1b8e50ccb8718cce1d8bb57271192cb3f924": { "jp": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.922Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.922Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.923Z" } } }, "4511c24ad879085d0713bffa28b8695c1a87d24872ce30015bb857f43c961627": { "f33dc7dd4c81c9ff62d672ddd22da52fe2b3790feef29653e27d7dbf105dacdc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.917Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.911Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.910Z" } } }, "7209b7ddab6e5d0aa0edb6dd2a9d28893ced1fa4a5e84eca66e18a12cbc9a471": { "b55f055c6ea298013d180b87459ca4cbef2d564e3a47054885bf85eca5781ed7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.916Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.915Z" } } }, "8d5ac58622d05dc878c50a9901e001b81276e5c37349076f70389f7ec8731cb4": { "2a5bbf839d622f7ef15b7a5b8575e42dcbd0d1ab16bf6f98ab233f94cdbd68b3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.908Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.918Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.912Z" } } }, "9da34b15afe0cf84a2c73d8d1acfc85dae89be8c90605898caceecbc4626da99": { "ce873407eda99feac5ab7638cb9c330da28e87de5b88e7f7e35b3b8dba2c1ffc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.918Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.907Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.906Z" } } }, "b1eb4813b41c7ccc174d13cca2cec0592da899961dd7a66e59673fce738d90ed": { "d63a4009d7fadde4213a7f160c8741c105b3a63db320d984e375579df904dfc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.921Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.911Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.921Z" } } }, "bc635d7f6a9111bbbc3d31c625fcda3adb9eadc78253335799d1b3a12a509df7": { "b7a3734788840b662f127af66b64815bd7c85bf39dd4cf42306c85eb6f392d01": { "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.940Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.943Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.943Z" } } }, "bdf357b395b129f57e836477b2fc57675705bcf48e1acda08c190ab17a75951e": { "3a0381755f449a5032606d2fdab638ca733950978814b42e1aceb74203a2235b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.926Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.938Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.926Z" } } }, "c54fab4cf7043c79b8ce701279e089e154ad852ea3c4248cb2c8da671cbc17db": { "b6e7b7146868d159e85bc698be8dd009a8755c7a8c993e4406163a4d71a408a9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.909Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.915Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.911Z" } } }, "c571247fa3e091098d027771a55d5ebe774d6d531b2c5384736de73837552959": { "e5aeca6ca592dd8ef3c7bcf54b278d64dd04a95cd012f8594105429290303c21": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.904Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.921Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.913Z" } } }, "cc311a7d9ae7be3e04c62efd5c5b7aa8cb9d6075749b29e99939d01baa76e3fe": { "3de10984a294ee3ab3e7105d5ba6c42208236c0f01721e7189efb0af99ca2490": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.905Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.914Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.100Z" + "updatedAt": "2025-11-29T08:14:49.918Z" } } }, "d49e422d3649c455dff8cb00cabeffadfc176bab2340583e83d8416f5fbb799a": { "551eaa35224112c0edb3f9e68292a528790f07b1ea2fe15b67e97ec37689af33": { "jp": { - "updatedAt": "2025-11-26T07:24:18.937Z" + "updatedAt": "2025-11-29T08:14:49.907Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.915Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.938Z" + "updatedAt": "2025-11-29T08:14:49.913Z" } } }, "ee343f5a3bf00722c8dacdf2e096fa970da83e5102fcb1446bbc99a4b089a390": { "72f38826fa27979a73a67e5413b3854cc5f5f2bfca9f1efe2890e20dc90a5020": { "jp": { - "updatedAt": "2025-11-26T07:24:12.098Z" + "updatedAt": "2025-11-29T08:14:49.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.099Z" + "updatedAt": "2025-11-29T08:14:49.917Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.928Z" + "updatedAt": "2025-11-29T08:14:49.878Z" } } }, "fc30da7ebddc5996d940ca4f9540cee6fa6b79f9c37ee5aa6cd56665488a65e6": { "20ab3ac2e587dcfbf842ef0e2dde364c4fac02225d76cf6a5a4b6a646b77e4d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.906Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.921Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.905Z" } } }, "fc92ad70da88c48808fdb53f68400c73f6f900eca6a95d544909915d2b22d9f0": { "16c47449f52759987429555de611585f7f1f6d6770d4c1ced0d74ae244ab45df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.938Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.936Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.935Z" + "updatedAt": "2025-11-29T08:14:49.902Z" } } }, "fd2a3635e203221890fdb75fdb12cad083607f12a05af6e46565b58b28626a3f": { "69e391ff6463d09b09730e7e4366b4c486d3bb1759441114546febf2e97601a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.927Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-29T08:14:49.928Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-29T08:14:49.929Z" } } }, @@ -11659,18 +11802,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "99dd663f4b6f1f7c866a09ecc4aa890f3ab244afe08834a22596edafef952ca4": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.589Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.624Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.624Z" + } } }, "0f88f2bd27c6a3bc5b20ffd358c1599368da4a7821aed81420035a719675f40a": { "947a7d558e471c72cf79437a217f341c9e6e2083cef8d20956a3839b9c085fa3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.939Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.932Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.937Z" } } }, @@ -11685,83 +11839,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "634a6e8cc715dfe8bb5f0ed37757b192d5e78bbd3d002d9e758fc5e3428bf252": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.615Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.616Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.622Z" + } } }, "24f89815412a9281c45be003f0d9b1edaffe253b9fb6e44d0b69114de2a8bb5c": { "856a0875860cb4e9fdc7fca531785d1b4ba67b93fdace5421889ea8cc500ef1f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-29T08:14:49.927Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-29T08:14:49.928Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.103Z" + "updatedAt": "2025-11-29T08:14:49.929Z" } } }, "309ede6dc77ce6e13f59939faf3901841606c221b6288c941fde4d97ebdb53a0": { "6f8a294f73c0c480fd655b8e9629eea0f71262b277a7a5e6748a17b7458ba88c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.949Z" + "updatedAt": "2025-11-29T08:14:39.610Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-29T08:14:39.610Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-29T08:14:39.608Z" } } }, "417572f3f0c0dee81daaaf436d03f842c9160631b01f165595d06d9e99f3c6c0": { "bedae71b49b3c79b70e3ad0767d167ca7bf7f0cf3792f2786f3be6e243ac41f5": { "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.925Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.926Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-29T08:14:39.605Z" } } }, "453e82594457c450e00def5b4a049c6817c1f11b3242ecdc0c113a4fe824bda1": { "3e341e3a84064fbb72d1f07486692fcc58eba4c23ed96700a8697e160736a689": { "jp": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-29T08:14:39.600Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.601Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.602Z" } } }, "4f6f1a6da73f8d186f0a18ad4c69138ec62d12a6b38064449c0eaf1293c82145": { "19880790e9525db190f5e72d85ffc766a344cde65183576c30c03ab560c76bad": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.904Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-29T08:14:49.943Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-29T08:14:49.944Z" } } }, "544e14c8df8e9aeba587c7a01debdb6de7b8d0dc480e2a471b321fe3cd637687": { "56a8436026a55bc58795064c90dcf48eb1783d7c4aeb6e25f3c6be910d52bfb0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.923Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.937Z" } } }, @@ -11798,44 +11963,55 @@ "jp": { "updatedAt": "2025-11-26T07:24:18.940Z" } + }, + "ab2df52995cf3997a3baecd856f3989b8f29d5c7696a2ee4616a5675d7e62391": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.590Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.594Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.594Z" + } } }, "596b0a954cde794b5e64f8babd89a81c1359843a6046215dd00cba539357857d": { "af24567e7b2b1b9a842510afc1c41e6a4f7a9634fdd16e4176a76bc4b3c3e091": { "jp": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.938Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.101Z" + "updatedAt": "2025-11-29T08:14:49.903Z" } } }, "65351c23daaa6ae3579c1740e82b1f56ce6eb541ff65d23ed1f890694f6ea440": { "b999ab8a06deee210039a2eaf91d71da758c776e64c8fc322d876e73e8db2861": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.925Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.936Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.938Z" } } }, "942eceae58e0a094962eb7383ca418c7a0fb355bbdf35ed09b1fb271b8ef0622": { "a06cd352188c57c4dc80e07b3511cf0c55b644a5eac9806b52fee16a901321cc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.904Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.939Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.106Z" + "updatedAt": "2025-11-29T08:14:49.937Z" } } }, @@ -11850,6 +12026,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "d74811a43a5692033b0db3a2c94f0a673f6dee42d90914ef696df7c4ddbac655": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.592Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.592Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.949Z" + } } }, "a4265198145ae0d412153c5abd0417df656a57368c80042916957e2c00936a91": { @@ -11874,57 +12061,68 @@ "ru": { "updatedAt": "2025-11-26T07:24:12.104Z" } + }, + "2d62d69aec7a3be320c6934254cbe83967fa5402dfeafb0dbed6ee9c6bb6dd7e": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.930Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.931Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.931Z" + } } }, "acaee03135e8e96bcdcf34c15546b735f613d1e5ae560184c16e47ce55501204": { "8a07567dde3044656ee0f3a1ecdd3437e3653bc1dbd011b4bab9edb2c0e04c95": { "jp": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.942Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.936Z" + "updatedAt": "2025-11-29T08:14:49.902Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.107Z" + "updatedAt": "2025-11-29T08:14:49.943Z" } } }, "ae900fe149a5b14ee7a25d9f850a7fed9bbb24da3497c1861285d73a625852e6": { "178aea88d150360011d964d55863a4f9f7585cb6ddc5b56d142898d29ed03414": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.929Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.947Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.947Z" } } }, "cc14be3df8410373edcf3ea623a34273b7005b0668dcb8d261ee3fbada8f972a": { "029f36173935f1b92553f610da6f3be5d9b0976fea74e17265186d40a9f8f8b7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-29T08:14:39.609Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-29T08:14:39.609Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.948Z" + "updatedAt": "2025-11-29T08:14:39.609Z" } } }, "d8cbf85de396e8d762bfdc573d415e4482bb687b9017d25d153c264728283316": { "62c5c6e1debf8e9f65330683895c791394dfa2b8f1cab9a3413558667b58ec1c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-29T08:14:39.606Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-29T08:14:39.605Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.947Z" + "updatedAt": "2025-11-29T08:14:39.608Z" } } }, @@ -11950,18 +12148,29 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.105Z" } + }, + "9833a13f1be1707f9e1e0c52ffe0e9c26df1dca4c21c0968e308a62a79da3578": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.930Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.930Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.931Z" + } } }, "f6c796e2a223d7f3109d7a0e087b02b576111cee44e1affe20a492544e19a35d": { "5c1b2453bc509571ef5a9c5a79343853e690b58e16dd273eb4fedb719f0aabd8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.946Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.946Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.108Z" + "updatedAt": "2025-11-29T08:14:49.945Z" } } }, @@ -11976,6 +12185,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "3cf60c4c63f78ca99a909e11fdd7b9ea46873225acbb7444b8eb966b6e9c4838": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.613Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.615Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.616Z" + } } }, "134051a83cd4931696ccf591823f46126c6e7feed4971511434916eff09ce79f": { @@ -11992,13 +12212,13 @@ }, "7676a41c6d1e719ba8b13b8d322ace741b11f0fe672d3b38397d5e1d23081fd0": { "zh": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.611Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.612Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.613Z" } } }, @@ -12013,6 +12233,17 @@ "ru": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "4e4923ee24e6317511ddbea23c7b6f8e03c0277f9d6ac0d56eb56dd0caae3746": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.635Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.637Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.638Z" + } } }, "1c4c51a336d1e6dee310539258abd450be7834df46548255e22fae5d3686a247": { @@ -12026,44 +12257,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "5c602e02407de45f557f89046cb7b30682c56eaedacab7a3bfc0f1d208a1813f": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.618Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.620Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.948Z" + } } }, "39df2af9870d3b0cc9ef00711b97902ed3b5f6df0419aadf0841770290785d7b": { "a18203de1411607a70e1437450eccbf17a073e8daa45c5c42ee8e0cba812d5f3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-29T08:14:39.604Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.601Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.925Z" } } }, "40220941c00a4eef0a2069b02906e525beca179d4a354e0a2e5a911c363640b5": { "989d53822380f38745d79c1b84562bfb045e678799d0f7110947e9bf5d599700": { "jp": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-29T08:14:39.605Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-29T08:14:39.600Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.602Z" } } }, "505cd1f1060fe51777563a177f877b84419bab382656d36901ea1615cd4c5f44": { "0a35a92e535e80b3a150fd73abbc1751ae0fa2688543577feac7ce7f4de53ae8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.953Z" + "updatedAt": "2025-11-29T08:14:39.632Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-29T08:14:39.627Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.630Z" } } }, @@ -12078,6 +12320,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.949Z" } + }, + "4b25da1f59890cfa5a986a65cb021896d1be71d0919069a68ca0edb32d4bcb78": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.595Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.599Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.599Z" + } } }, "6d56ddb9a5b3ccdf4eae29f57959e9374f0ff177ac9800e0d460527344dc64a0": { @@ -12091,6 +12344,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.945Z" } + }, + "eed3064741cb620f55aca288e3255646f75384bcfd7a8d5d63104f69d26df546": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.590Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.595Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.598Z" + } } }, "839030474f427a460a6acfb9a8caa7662e1cd0c337e35995054bd2c956ad05d2": { @@ -12104,6 +12368,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.944Z" } + }, + "06b19ed602eff6e0f4c0b38b69d416263621f402f6591d9f78725c9fb8213249": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.591Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.591Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.598Z" + } } }, "90511d719daa226bb864d0d2bb0fb993971dffcc30b3fda0d86ebc7ff7157a9f": { @@ -12117,18 +12392,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "1921b13e0a9667a216009da681a38ff65bb6e8e5e69fad4427f31e0dec85b1b7": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.622Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.623Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.949Z" + } } }, "a0e5cd4bbd52095f645996d5a20cc34d462aed2b014ca882138e4ede52f7b410": { "b82f6c4650551ebe5f3c0e03e15ad59d0e9d79edf78e121c65d4de264d1e000e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.602Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.603Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.924Z" } } }, @@ -12143,6 +12429,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.945Z" } + }, + "5dd603d0ea09ab4c18610adfac733616566b9465cbd159ab38037b65cf3ef036": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.591Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.593Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.599Z" + } } }, "b52e68b0fa137214aee6134202f0428952a2f49c83cef796e483c36598106cd9": { @@ -12156,18 +12453,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.950Z" } + }, + "6a2d3b6f6eef53b77da900c4d9383e4c650a1b67df3b4bffcf8c1c982c61e7b0": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.614Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.617Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.618Z" + } } }, "bbbf8ab907626ae0bd4c2e7f8f1e1a30e187356616b813a7f2bafdcb968b16e9": { "64de149ea6c99450b1d0a61247789522cc099815c912ed33f53b378aaf837bbb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.944Z" + "updatedAt": "2025-11-29T08:14:39.606Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.942Z" + "updatedAt": "2025-11-29T08:14:39.604Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.943Z" + "updatedAt": "2025-11-29T08:14:39.604Z" } } }, @@ -12182,6 +12490,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.951Z" } + }, + "805a3c63750885bfc49f7e57abe2e015684ddc6eb6b23a0704a589da9585ba31": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.622Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.622Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.623Z" + } } }, "be5a795a34e525ece1f0651b8ec65280cd3f71026a239b44cb087800474d6992": { @@ -12195,6 +12514,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "ab85b9c6ab0099af15f4a6be42857b06c4aac25bf43a4a5260304fb4ff3e6f6e": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.620Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.621Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.624Z" + } } }, "c3c4a5cfc613b8b144029f13d913022c2d41ebc3c333e2fa61ed8d2f0df5a81b": { @@ -12208,6 +12538,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "f9910c6a76a99ff49c7ffee4a3987ae9207e8d7db851b61ec2efe4f6c5c50886": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.593Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.598Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.619Z" + } } }, "d559f4bb7e0e75b052f6989f63565615397e09d8f05bc7535ae634a02281b78a": { @@ -12221,31 +12562,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.948Z" } + }, + "fdd897a9063250be652162e225953c203c05911a364b1cf87f47fa2b3ad6b297": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.593Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.596Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.598Z" + } } }, "e54eba7f7c2e2d6d452b2d73f4934f9ba018e180585b2bbdb2f9f14bb9b5510d": { "d88ed4dda50a3c9ee265b067c0abda94e3cba629d2d6c9a695d77d254c4cd372": { "jp": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:49.924Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.941Z" + "updatedAt": "2025-11-29T08:14:39.601Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.102Z" + "updatedAt": "2025-11-29T08:14:39.600Z" } } }, "f871545252cead274f81eec090f4a37c79aad733b302ff49eedc5242ba29b1cb": { "5ee24061522cb5a7ed68e5bfa59c658c0cb620eff70e3736f5e3800597533e77": { "jp": { - "updatedAt": "2025-11-26T07:24:12.109Z" + "updatedAt": "2025-11-29T08:14:49.947Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-29T08:14:39.626Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-29T08:14:39.627Z" } } }, @@ -12260,44 +12612,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.941Z" } + }, + "295554629ad06cadfbea57e08411547a44046d88bbc5cb20b34c13534fca808f": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.592Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.595Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.948Z" + } } }, "00f0f8e4c4cba686bdd32c7eb510c5ff9cf2847654153d708f69ef3d1fae55b2": { "4cdabdb9af849dd79c526565751107e9b1abf0b12889130ad0f45424328feb65": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.958Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.957Z" } } }, "0819a7d3c5f71c0454ca26bc207870bf57571e75b815f9e6048c755eba88da5b": { "7c183351205668c7bd2a340b5ce1c7a91fbae1b7555a939a4d8e6611fda87e09": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.961Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.959Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.954Z" } } }, "0e624ceaf217ed28aa49746f8a0d8e6f11f50144de84c79c5bfc3cee61b7f1a3": { "2c646c9eed127c879e1e79d90542ee56c28b87e87984ce2e15248bed89ca7aa7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.956Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.959Z" } } }, @@ -12312,18 +12675,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "ee5e9f3162a1197524aca6e97cf739a11ca65612be1b597e70bf103f7727993c": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.644Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.646Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.647Z" + } } }, "2395cf7e448505fe5dff52c83b83b0eb98f08d6b30b33dff50d6380fa7e5932f": { "773ced00aebc468e3a46c4cc78b523aab8880ec08d2fdf077d970783ea2663cf": { "jp": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-29T08:14:39.652Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.648Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.650Z" } } }, @@ -12338,9 +12712,20 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } - } - }, - "56433df9b9399e37671c12717a7e397ab2aec3e086e226fcf8bb3a338e336f38": { + }, + "b0b56f3e8d31dcc0efeac6d2feb5c7674647f73163b6e6bc288532a7e63ee696": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.614Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.615Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.620Z" + } + } + }, + "56433df9b9399e37671c12717a7e397ab2aec3e086e226fcf8bb3a338e336f38": { "899571967dfce1a8941dff3771b1f23612d934928bb1aef923cfe5bf35044d6d": { "jp": { "updatedAt": "2025-11-26T07:24:18.957Z" @@ -12351,6 +12736,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "01b3c2c46b1f5b875a5d0c20393042830caf8d92a7c7820943fa80463f760cdd": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.636Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.641Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.644Z" + } } }, "7b92c9515ab243345c2edd443a9f36e432abeb01df31d0d197db37f7733b65f1": { @@ -12364,6 +12760,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.954Z" } + }, + "d2a0556b2ff529a2a6bc6f0f1474e276bb5cf693229f1efb4d5f047dca2bba21": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.614Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.616Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.623Z" + } } }, "8150184b8463d89e5a92277a564104c399220d435ffb6ec7e6d2560672bb49d6": { @@ -12377,6 +12784,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "6156562270e5d113b2b835c17a4908c76e95978956ef4a57eaa61e1eed78520e": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.618Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.618Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.949Z" + } } }, "8af19e1098601767cbf89d205cfc0d3cd2c79ba5ae84fa11d9cea6cc91850951": { @@ -12390,18 +12808,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.958Z" } + }, + "53c40fa63ea8e3ce50b35d7c9ab69f8ef252980df0deba29ae32d97edd799b2e": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.636Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.636Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.646Z" + } } }, "8fad6511e155deebc0c7b7055ddf993b7213668bd651d77b46f4fef11c363990": { "00a2be5a931770b44b5dabd0013f35d169228fbee45d460fc63c58245bf78264": { "jp": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-29T08:14:39.631Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.629Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.627Z" } } }, @@ -12416,18 +12845,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "3076a78d7676e145757a5c63a2dae4d7c0c748942ad74b8e147613b5ae9c6a2f": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.613Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.620Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.621Z" + } } }, "9fd477532adc3dadf2dfed8071d354140eb7b667bd012aceca5476a9b5aeb7f1": { "cc0409c62d9e4b650b3ab8a4a2c2ea56b508c8a34ed0235cccc67f60cb557c17": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.628Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-29T08:14:39.630Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-29T08:14:39.631Z" } } }, @@ -12442,31 +12882,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.953Z" } + }, + "c338f65f8d100cd47e3a31d6f9e78ba015c1346b791cfa3ff6677795952a0807": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.589Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.617Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.625Z" + } } }, "b24da7e78415a317d4fd792bce74b8acf47ca7b376eb80c5d2a81e9b874b5ec9": { "1b40db05914f87442600e04da552a114b9d6566703fff238531bf2dce4b3fb81": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.649Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.650Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.649Z" } } }, "bd066e14efb9c286ea6f6324b04ea5e37363afb94dde1cda3efc2008e77fe6c2": { "ac1b069ca0882ed4666acf6095038e0b7cb288b8596cbf3b1ce1e54a9df05e43": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.628Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.954Z" + "updatedAt": "2025-11-29T08:14:39.632Z" } } }, @@ -12481,31 +12932,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.952Z" } + }, + "c648cd50d62fa017bf9f75cb6b83f2c181571125b4792b76c86198da57d6b234": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.614Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.619Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.619Z" + } } }, "ccb6f7b23e140ff82e19fc0391ef805c0f15507170cf5f60a78b0ea7f7bcf295": { "7b7eb66a4c1f465cbb23aa2d3f377abddba9aaa6d13866786810216306d2eb6e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-29T08:14:39.626Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.951Z" + "updatedAt": "2025-11-29T08:14:39.628Z" } } }, "d79bc535529875a738bd248165a718dae8d93446b748ae71439f9b822c83972c": { "1a78ff0ba0c6860dc7ce6357e1df29d3b791afd1f3ea81e2713f99d9dd8d0199": { "jp": { - "updatedAt": "2025-11-26T07:24:18.940Z" + "updatedAt": "2025-11-29T08:14:39.625Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.952Z" + "updatedAt": "2025-11-29T08:14:39.631Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.950Z" + "updatedAt": "2025-11-29T08:14:39.626Z" } } }, @@ -12520,6 +12982,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "703c345dcb09b3d9c115ac6d960bc44df5ebbd21bde9ddaeb3fae08a63b1749a": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.640Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.640Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.640Z" + } } }, "f181f03d87970ee159e60beef4cf41dfdb497fd8d950cab4164f13908b4a893c": { @@ -12533,6 +13006,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.958Z" } + }, + "01426a0b27a8046b6721227a23a347197804e15d2e71c528d46080c264354921": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.638Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.645Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.645Z" + } } }, "0d57e95520df30873578c0c59ade72141faf51c3e622951bb9026968b4b2a96f": { @@ -12546,18 +13030,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.963Z" } + }, + "5f3840a29e61dbec4841a38be6722a8b6d3bc7281cc7d9139a2e112a47d2f251": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.654Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.655Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.656Z" + } } }, "0f2ea76e0db5a6d5b78533ea69f6bf742d59e3c92cd69159341e1c7049a2aa97": { "9da14b2a7b04a5c4ff51174e32fb113e58f6e2c9b60265a9616f729614a2c9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.963Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.953Z" } } }, @@ -12572,6 +13067,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.971Z" } + }, + "b92611dd6a3b9c353cc2b1383d42601917df331aae94df51cb078400430f456b": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.969Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.970Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.972Z" + } } }, "11f2e3a49b018a860171016a699fa740752c02bc0aa8f5f79a0c57498338ec5e": { @@ -12585,6 +13091,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.966Z" } + }, + "e5c755dea01abaf11bf73c6cfd13729ae4bfa33d43a0a52ea3e0173460d3b39d": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.654Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.654Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.950Z" + } } }, "259e682225d9b71ca3ea983216e57cd82c14b1caf25f00ea510ceadd3a70a0a7": { @@ -12598,31 +13115,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.959Z" } + }, + "e91d3b791b454b1a0ef05b57d40abdbf146ab1474ff1aeb70caabf9e4d32b816": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.639Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.642Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.642Z" + } } }, "3b9d54215d217a013fc4c62df11f26627fb8449a0489b74cc0f54e6b67f41ecc": { "f789cb25007915b6d83be12f4ecf35805e8a487063a7a59b47c497602ae41559": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.957Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-29T08:14:39.632Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.649Z" } } }, "45c1b7f8bb110c2b37f34cc31252826058699640eef30ff8486c08761af44c43": { "605cfdad7a54e1e2f7b6a9998f6bfa8f8ff7b6a25aaa39281d58591fed0758e5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.648Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.650Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.649Z" } } }, @@ -12637,18 +13165,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.960Z" } + }, + "2885a781a007a7ada8f0db66ad248161e6af984d5a6d09191834d6a2543db968": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.645Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.646Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.647Z" + } } }, "57f74a21cf2fbbfbe54dc4c14d4c397429d32d51ea09651cbcba81a78f831e03": { "9aff12963c1e1db4b1b461b751a4d72394a3a26138c1713efd31eb628aa3b7c1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.961Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-29T08:14:49.966Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-29T08:14:49.965Z" } } }, @@ -12663,31 +13202,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "4576bd6efc4271a9bbfd7ff64a67e6a5cd8120b9608e1f0f96745079351d1a69": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.637Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.639Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.644Z" + } } }, "5e82ab99152b96f656e8dbc01527a2124dec1e8c721a629d4ba5aeccc219db56": { "4fe49458ceaccad1ac8e3af48d763a09070b1428ec46ac6e0a3b4c19aa2aff54": { "jp": { - "updatedAt": "2025-11-26T07:24:18.956Z" + "updatedAt": "2025-11-29T08:14:39.650Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-29T08:14:39.650Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-29T08:14:39.652Z" } } }, "61901cc301281214293209e58b53b0298e1dcffad02805348907ec14f5a36253": { "9b549c4be17898687f84e0ef17ef02ef8a374450b44096f17620746288db980c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.955Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-29T08:14:39.633Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.954Z" } } }, @@ -12702,18 +13252,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.960Z" } + }, + "ecb585ec1fef87ae16a59e4392cad2214397ab76b4c1f98f967c69dae8f1c139": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.641Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.646Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.646Z" + } } }, "8232385318fcb8ae5ab151696b217b22f9436e7402f061c4116986347a039995": { "d6b3588b7d8f126d5702902b6c9d58f3929c5d5c37ec39e19523d2d8bfcab2e9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.957Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:39.633Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.958Z" } } }, @@ -12728,6 +13289,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.957Z" } + }, + "9f3903e67cba6261cb9be580a31bdd170498cc260e9c5d03c285d123770043ec": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.634Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.635Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.637Z" + } } }, "a4b6a047b28cc22275775b0dd79539a2be86c95aa7ced10a1b187f12caf79320": { @@ -12741,6 +13313,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.956Z" } + }, + "af460729a46f510430df896945c2d1083b7a1cba8c13e697cbe6e79e39464dfe": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.639Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.642Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.643Z" + } } }, "bab8d56663945997ddb532be83b22cfbee4c23f88c78951638579d4d2d0d0dc1": { @@ -12754,18 +13337,29 @@ "jp": { "updatedAt": "2025-11-26T07:24:18.966Z" } + }, + "8e64108c88e2501340620384ddf14dd58507b8e1c81219be6f6e610fe3d9c772": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.950Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.951Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.951Z" + } } }, "bb10891887cb78110e7cb4ceb74ff22432d01fac9a3bff7cdeeb1886f79b1a65": { "caa3bae4c975b756d6c9bef7d4ca4f1118fd3ff3418d4538a30aa4c9e33515f9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.959Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.957Z" } } }, @@ -12783,13 +13377,13 @@ }, "f874e3ae6b9b2413ff9c4415bbd53d217ecc53aa9c8754f7d8b43a840a56a1dd": { "zh": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.611Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.611Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.955Z" + "updatedAt": "2025-11-29T08:14:39.612Z" } } }, @@ -12804,18 +13398,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.959Z" } + }, + "1487bdd2fa2f3944d2af9ce3c81c0bc560bc49e8a960f88b3b1bd574854de890": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.641Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.643Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.643Z" + } } }, "e39ace6f98adf22617bf02b8e1b5e543cc789b8aca34a357f850131c862245ee": { "18eb1c50ac74effbf464a4c046b94e4cb6fa9eb96d70864437ccfb525503aa01": { "jp": { - "updatedAt": "2025-11-26T07:24:18.958Z" + "updatedAt": "2025-11-29T08:14:39.651Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-29T08:14:39.651Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.957Z" + "updatedAt": "2025-11-29T08:14:39.651Z" } } }, @@ -12830,57 +13435,68 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.969Z" } + }, + "ece9e5e8b9ede092044e89a8f22b5f4f8ad893ecb0b80c8ee957c1d036b8e7eb": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.653Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.968Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.973Z" + } } }, "188f9a9bc3bec2ce321905c8a56a28198b42bc1f90b417b6ac00a4d9cf3c147b": { "8e6933142a9b80421dd489117c3233c45a2645cae67fe6bbf99c75fdf827c9ba": { "jp": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-29T08:14:49.983Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.982Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.982Z" } } }, "1c00ec1111d4c97040f8a6b4705c820bc0afe08ce75657d4021750534563cc33": { "b2e299e5c648bc6c75f661d7ddb0d415bf3f4d2d15b1b81f676f8d781e4ab3d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.978Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.962Z" } } }, "251dd0b5213f0a3e9974d1b830a96625f3edc7164c0ea7373201dbcf17869d8f": { "420a595531db98470670f1f677ed2a055a31cba9f965d100ebd8b1fd45bd0c88": { "jp": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.983Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.978Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.979Z" } } }, "2fe98a07a0771f0c918a105339c7465f1d1800b749a6786ae052b4f5792f8146": { "bc9d4d641f5b9a05f88360a2ee33515689607102fb6c336b63a7598960ba63de": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.977Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.981Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.977Z" } } }, @@ -12895,18 +13511,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "75703e9986b34937934165925fc58e72a3afca84531a9442ab6247ddcf89893e": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.973Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.974Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.975Z" + } } }, "513fe6bad8509823ffdccf71f911e6632a1d6c62bc3828d6880a93c15b106872": { "8b0b91827d9a7c004ba4a826838ebb29f76a0224d429a5d945acb7d900b732fd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.981Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.979Z" } } }, @@ -12921,6 +13548,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "30c6212c47a3a967e11aed7b52fa64caa3358560d58e4a0931019d75506f6232": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.969Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.971Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.974Z" + } } }, "67b2cf74cdaca50f8911af9d708d0de9b1f69f0efeab9993911fd47c8fe2f59a": { @@ -12934,18 +13572,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.955Z" } + }, + "47b31a12063a879f2beddb3373c4c72ffa7b8dc29a27e09156d7cf03a46cf52b": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.635Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.656Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.951Z" + } } }, "721c2734aaae37ab2cfa24011429e694a791b3fb975c20c543e63c974c336cde": { "9ecec8ec535a5264bf7ad03315791abb102815a602f895880c47fb817859cf24": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.963Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:39.634Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.956Z" } } }, @@ -12960,31 +13609,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "28b09452901cdc50d62751f8c7e48dda24bcdeceee8080b1e1efa2058fe428d1": { + "zh": { + "updatedAt": "2025-11-29T08:14:49.974Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.974Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.975Z" + } } }, "8315916bdb3d69fc26c0b36f0b4378146ed63f736e03228e62d22efe01d9dfd4": { "5856087df98f6740b4472f367157e174efdc961ef37e3c1247d0ced2db5782d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.954Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.963Z" + "updatedAt": "2025-11-29T08:14:49.960Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.961Z" + "updatedAt": "2025-11-29T08:14:49.953Z" } } }, "989eb966fc80a9e76f90dfcbc66e0dea7d1236c5a18dcfc3951a22c271c46183": { "501b56f9eae0cac02eb27cad28e73a3ea80b0a3e66d207d53190032406e903ec": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.960Z" + "updatedAt": "2025-11-29T08:14:39.633Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.963Z" } } }, @@ -12999,6 +13659,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.955Z" } + }, + "a85beb07457a8cd583ab4626e4a1665d17654cc132cfa7622752e519095ab48d": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.653Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.655Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.952Z" + } } }, "c3e128b68f1271e67f658e6a27e710c60881f8641ac2288d555daa3208c005f9": { @@ -13012,6 +13683,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.961Z" } + }, + "4626508269ebe6c1920ad10ad096b8dba568bff0279bfb0356204ebd6e971f08": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.653Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.656Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.953Z" + } } }, "c484fc5a7f3148583c4468ad2af97f94fd9cc073f7098786a953f31855eb484e": { @@ -13025,6 +13707,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.965Z" } + }, + "8e44081ae47c2cc39c56f929606d16db2e836b56a354be7dc6b701f4b95b4017": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.950Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.951Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.952Z" + } } }, "cb12578467473a3c801b153c6cf4d13a10cf518318fd5f17155acd1793145e1b": { @@ -13038,109 +13731,120 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.962Z" } + }, + "0db5aa15e3dbe18b1c681a26cee8856fc9b32345cfacb7a3bf81dc6e5ea5df3b": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.652Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.971Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.975Z" + } } }, "d7f86ec094d4fd68c7ec3902e09e9c8d6f32e759b1104bbeace470bd65c6ae68": { "aa75faa94f785331aff5bdbe2cbf5c4d6e4d398591d7ba48c786aa44ef7c17d8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.979Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.962Z" + "updatedAt": "2025-11-29T08:14:49.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-29T08:14:49.976Z" } } }, "dae06bb227a02c2e0c6a941ce0fc26005199e52c806d58d5e67386d3ec46f9d2": { "7b4e58d24764fbe8ed14bec5a6c802f2f143b902c16c654c45567175ea3ba639": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.962Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-29T08:14:49.965Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.965Z" + "updatedAt": "2025-11-29T08:14:49.965Z" } } }, "dbffe2a957cf5e50f0d77de216e876face0751f13e47da2a20400d54d5665054": { "de205edb219286909fddbd177c0ceefb00f1d4bfa1753f3d37b2539c40ccb3b4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-29T08:14:49.983Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-29T08:14:49.984Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.970Z" + "updatedAt": "2025-11-29T08:14:49.983Z" } } }, "e05629c59a8527d19506d4c60937f73b19f3d5ee1a52750f68b76b2d39b9d9ea": { "746136ea09bf1fea642a7fffc300c1227b17aefa177ec7ad998a0d64c56bbef6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.964Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.961Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.964Z" + "updatedAt": "2025-11-29T08:14:49.964Z" } } }, "125f424723e0504386a4a184da1e7119c6a2785f018e32a19cce5e8d2b7e5836": { "b707bc414a14120fcb5707df2de39c191647cd3b486308a8a5dafb116a49cb6c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.659Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.660Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.657Z" } } }, "19dc76f171fdf3b0cc1a3933538a1ce4395d12a9b9640597e4903ce3f6b18874": { "de4790564f72c39fe581e10e8ac3237721217d6c3c4ea4ad3cd07779bcc8dcf9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.996Z" } } }, "1ce6daa0ad295dac3a93f320fa28494beb73c39ee95608595b498a15a3e40ffa": { "85d971b7567c96e52bcd05d9d21b9c8edef12dd133c8c50e8b309d2d5aa75dc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.661Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.662Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.660Z" } } }, "232c5ecb0f7a4603625517e022985cf3f01e1ead564c3eb970640640aaae8e12": { "3cf3a4419ef85aa0f20d163b55039c8180a0e1cb6acaf80999e00570756a5e6b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.997Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.992Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.998Z" } } }, @@ -13155,18 +13859,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "86f5cb11e91525fe84a6d7ac02cc19c807d8d6cce44b69717c9bbcefc375cc31": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.968Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.989Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.990Z" + } } }, "70cf97c8fc949e8db59f1ad657a9a53e576e424eaa88498f6a60d5b2e6729885": { "338d9d04b8e82dfebeacc09a54a398e5b4290b074e597a101394bc9922a1ee1c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.978Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.977Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.976Z" } } }, @@ -13181,18 +13896,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "b37dc6bf582ff09f935ab13559b16785003bbc859edbc25cb5250cf6ed36730e": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.652Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.970Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.975Z" + } } }, "9453ae6e6128bf52ca32a6699d5950c384605875acc28c886ac70d540ffb5753": { "ad123d6a5a72a60f6d9c309147475eb38bbb468cf9e3ff3d8588b1cabffc4b51": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.003Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.996Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.995Z" } } }, @@ -13207,6 +13933,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.970Z" } + }, + "8da324568d7b8b5274356df80d91630b941a46f186301011fca9d984a25b20f1": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.969Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.973Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.973Z" + } } }, "9b57ca46e862eddb44a226a1ea028a1678344782bb5bedd683e47de11237eb37": { @@ -13220,6 +13957,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "68a496a4ec4c57830ab397ac2a3d04f92f17c400130928c2a18b7b319b353710": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.986Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.987Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.987Z" + } } }, "a725d7aefcb81ca44df79432f1da90c48ccc1821c943c4aea64ec662f97fc340": { @@ -13228,10 +13976,21 @@ "updatedAt": "2025-11-26T07:24:18.967Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-26T07:24:18.968Z" + }, + "zh": { + "updatedAt": "2025-11-26T07:24:18.969Z" + } + }, + "1828935083cf996cff81aea1667dc9a5bb681eabb1001a486dc7de9c3d17be77": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.970Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.972Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.969Z" + "updatedAt": "2025-11-29T08:14:49.972Z" } } }, @@ -13246,6 +14005,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.976Z" } + }, + "afced390065bbace06e3ad3e7d262d22da585d3d52fc35e6d2659ce9d6f1de55": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.967Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.968Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.988Z" + } } }, "b02ce70d6dcff3632894b67e171d3cc1146833fe54d4b06011bbaa8c85a0884d": { @@ -13259,18 +14029,29 @@ "ru": { "updatedAt": "2025-11-26T07:24:18.977Z" } + }, + "16d290c771287aeaa511447cff48ba3f26790d6964ff9ef4e8d1df0086f94e4c": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.967Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.987Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.991Z" + } } }, "b0eb0aa22feb0a0e87aa525beba888ab6c811439fb42a8629b3439c190197487": { "f0d582626df8dfbb7340a088943ebaa56822080b63fa866b42e18086e898b317": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.993Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.994Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.997Z" } } }, @@ -13285,6 +14066,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.974Z" } + }, + "9643b5165e89def525dc375e71c872c60a8f7dd711c239056b81159bc679dcbe": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.989Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.989Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.991Z" + } } }, "d865d8906bab480f2412b8134877a2a96913a3533480602839cb1425678255d8": { @@ -13298,70 +14090,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.968Z" } + }, + "9d65695564bebf9c14e110dfe0a95ba918be4e978cdc05a279d1f5d41bd4ee32": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.652Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.653Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.654Z" + } } }, "db1f6b413c1b5c95a7fe86857804d32fa0bf64bd126d0d1bb0a19d36642d1ff9": { "2a09e7a09ae046fb1bc7a86b262a2891822048befffff23b62cc68c9e7e58324": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.980Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-29T08:14:49.976Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.977Z" } } }, "deaf9da7af41c9dbd196870e7d946c2d92a2b4098eacc1d9d67ca6e552d438a5": { "fdf52ca20d97fc34fd94ada024eedfd00d77d9abbb0aed5df8411acf741dbddf": { "jp": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-29T08:14:49.984Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-29T08:14:49.984Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.971Z" + "updatedAt": "2025-11-29T08:14:49.984Z" } } }, "ed51dd17995f6639353bb7c4089fa97d4f8dc7203bca3e26312cb31005fd949d": { "a382bedb279fccc3ac9fd5b4fe0ce9a876319b2d0652651cf74622f32f475762": { "jp": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.979Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.967Z" + "updatedAt": "2025-11-29T08:14:49.978Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.968Z" + "updatedAt": "2025-11-29T08:14:49.979Z" } } }, "ef55ad557299e30ca7d8ccbe3f701f3efcfb9407e677358fda64040c88c2a0e3": { "b7534a46cfb2aba578904a3ead55b3a917dd6ea809c434df147c1f98e5defeeb": { "jp": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:49.999Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:49.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.995Z" } } }, "f4e514c65ad19dadd6e36981ced2004e96119143057123e6f8343003c976414b": { "f9be206d9401669361ef8b3907f74e41604e01c3da770a270a3b262d0cf9e0b7": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-29T08:14:49.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.993Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.994Z" } } }, @@ -13376,83 +14179,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.971Z" } + }, + "0325309625a326b35142132e72492d62272031ba36d1a42a0998e56b1719cc40": { + "ru": { + "updatedAt": "2025-11-29T08:14:49.971Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.971Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.972Z" + } } }, "025fd49fff3f320d5bf6441808dc379cdaa73f78cddd66059a1f1d989a1102a9": { "5cb5606bdf1fcec7d40bb07c9211307f195d39d691aa2cabd78b397dd79771c5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.680Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.986Z" + "updatedAt": "2025-11-29T08:14:39.673Z" } } }, "1e4b57e276f3147467bca9c9b34ef7237444bbb31a33e9319c88df9db588b8ef": { "781ade8017e15eb182d04e5802e03ea4655dd91aa963a8d3d6d5e111348f2ef9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.662Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.660Z" } } }, "243d4d43037034f08f1c4e2b8b9dad2508192f28c9087e19fdb7e02cb828ad52": { "8945c696900efad4645c2f95b6f862201f4275bbed3998caa867b1ac37deb350": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.684Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.680Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.678Z" } } }, "2d5ce469cb4fcd9ac57756723325805176514ce512b8039ab05e3fde56bb12a1": { "37840663d4e6d0f5bd1b9b294c2b0feff352bd6bdd003b973cd9e9e03ef04b2a": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.682Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.683Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.683Z" } } }, "344aa60f54b872aa215951fce76265aad2f3f1d6ff8bacd50188b941ce5098c8": { "7a8f03b82b278bf1a01cbbd7ff1923941fcfc7239248c640ae1b2eec075f2bd0": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.003Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.001Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.003Z" } } }, "53d65ec30475ca0007e7da32916549bd02696879f561f268e8e3a58c0dfe9de5": { "e1d20246377ea7703705aeea779bd04141833d80b87084862959aeb3e9a08c2e": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.996Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.998Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.994Z" } } }, @@ -13467,135 +14281,146 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.975Z" } + }, + "aea269c29122c965661a61ed9e0de26050201cfa241ccd1b34c694f29cebaf67": { + "zh": { + "updatedAt": "2025-11-29T08:14:49.986Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.986Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.990Z" + } } }, "5c4dcedff3da1da80fb63b9461c1c89223beee53c37a3b5a538edc528453f0b2": { "620bb0c22df1a23b2a8df3eb395373d44296904b0332797c29514f90a31606b2": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.996Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.995Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:50.000Z" } } }, "719a6d655a54f957cec2c65e95d6651040b93a639ad6aa44861b85ae09c1c5c5": { "fafe4a083f40e8f75644ffb779bcedb7065ad373f06a042ecf2238313aeef393": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-29T08:14:49.992Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:49.998Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.001Z" } } }, "82b281d3017bb8cc4db38036df8fbbba3430846e468a784c1b2e6d4d8e43b6d7": { "617961c999f1bf6eb48c03b5f56f99b3a7309dba7bcdb74914b6a76f36a56413": { "jp": { - "updatedAt": "2025-11-26T07:24:18.966Z" + "updatedAt": "2025-11-29T08:14:49.966Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.004Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.004Z" } } }, "8cbea57ac40a6d6358183da1d28c1a09304c1b4a5edf96e2c4a808dc6773ba41": { "39a62a98184d3c0536249ba36e562c954047436e58e929927516fea5318e895b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.002Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:49.999Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.975Z" + "updatedAt": "2025-11-29T08:14:50.000Z" } } }, "940796a1aae864d0eda15bb34a302626f3ad6a2c1d3af60ba921316d95e81a13": { "301a0a16ec26f11dd9fb52328307087f8c2528fea166cdea553309d6e58106d4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.997Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.997Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.992Z" } } }, "ab91d27df4d8b8148381ccfd51e2bc9b99a1625ef08e73f1d9a0eb197e5397a2": { "a1465aea8fd40bd2a71567dcd05c6ce53e13c60e2ac21919e271ebe1b6782f74": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.666Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.001Z" } } }, "b7c59a245d47fd54f7c7477cbd498ba2937399586e98674be51c6a7c40b2ae70": { "410fd44fe625de2b185ba9098597ace5e062b1884403c90912660d14d188d9bc": { "jp": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.002Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.976Z" + "updatedAt": "2025-11-29T08:14:50.002Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.004Z" } } }, "d03338e91e1f725469cbc573d2b5a49c055fe39e67ab09e92b408e3e6dce3361": { "fee22f53b36f6d80c05058f7c0b07e16a2dbb531dbf640d90efae0a82972bd4c": { "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.665Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.666Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.664Z" } } }, "e6adf4028e4ac7e7c24f84c4aa34ae7d43b6f397a67523ba3f4d24de317db247": { "93b602e423297a4fe948c7f19b73130ce3fb146f09d980aa1450c55a9055f392": { "jp": { - "updatedAt": "2025-11-26T07:24:18.973Z" + "updatedAt": "2025-11-29T08:14:49.995Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.993Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.974Z" + "updatedAt": "2025-11-29T08:14:49.998Z" } } }, "07567d62aae7f94a29e9f4d850ede3f6eec697596681ec8f0be305090388b473": { "781c617b76b44e877e7e119770ca6ecc45863cb3bae1a444fe8807d6ebada97d": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-29T08:14:39.677Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.686Z" } } }, @@ -13610,6 +14435,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.116Z" } + }, + "3a8f100e338d722f8c4dbb2e623e5c4dc5a4d6f3bb6f2d5ba48737830cec8fbf": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.025Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.031Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.031Z" + } } }, "153ff0c08aecf20c420ae5dfa80993225532cf87b7d9c41e419a23934521c9a0": { @@ -13623,31 +14459,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "9d361fb3775a562cb507335e776089308bf758ae2747ae0957bd649d98faedc0": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.020Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.028Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.032Z" + } } }, "24d0c9c911ed73221e135198269c3368d046b7994b57b0fb624351b888e71a8d": { "547964d07a357f1d9316aadc7016d3943cece91207d0037cea7d08bb8914f5fd": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.681Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.680Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:50.006Z" } } }, "32982205f1155c2c2e05fe89e04c9cd20828fb0a653c7c72c7da8d61c3253607": { "641d2a22f3cbbdbb5877f4694e0f7a70c2d4d0ea47aafe7ac478509d2f4bda90": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.691Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-29T08:14:50.012Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-29T08:14:50.012Z" } } }, @@ -13662,83 +14509,94 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.981Z" } + }, + "86296003488064b48670c7fa1dea340b94da850eefa6ecaf62711f1d83875b93": { + "zh": { + "updatedAt": "2025-11-29T08:14:49.988Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.006Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.007Z" + } } }, "38b350a818493921c30933efc9a00f13c8de2b1d444f825141d01c27a7c0dd78": { "5c8a7b7c41cedb9f12aa1dfb4a692603fdc40391fd020d73e7415f0890b583d6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-29T08:14:39.675Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.678Z" } } }, "769f4a7a3d111208fa74381508655c4dc5d7dcae5fe2808879e68d3cdc7b3382": { "489e0fb1db1004ec357920c6836eb4613ef37b11126cdd9c08bcfd3ba4aff449": { "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.663Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.664Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.985Z" } } }, "79e713eaf2edf1bc512ae5d02a7d5d250a9659ca697b83603287e03063cf76ed": { "4ae0bd2c9234eb6b17182e97f10042bb3a03df6b39a2c2156858ba7f8c5537c8": { "jp": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.662Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.664Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.661Z" } } }, "85ba3aaa892ebfeca0dd4e9f91647080ae86a451c4f6a00a9725e2f2d8687ecd": { "b2beddd5e719b038a7b64dcbb0affae7ddf832501e2aa7fafd227bbe1cb45855": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.668Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:39.669Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.668Z" } } }, "8f1cbe44d3d43c4cea34fea884586e29908abcb748f98fa025ccc41b62e45d3e": { "8e89cf7d6f4105f746591f40378eb84bf4bf9932ed4187023e334efc47a4b281": { "jp": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.667Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.660Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.664Z" } } }, "a094ce3a28e694708179862da79fbac7d2795b1716246328a6d1d45989e4d89f": { "01511979759628779536c4426b3446323cd0ba908ba9e69ed46eef6c4e519583": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.684Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-29T08:14:39.677Z" } } }, @@ -13753,109 +14611,120 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.982Z" } + }, + "52272796a3ff10b33a617542859f14d9522e98d92a2f558892a1b3822e8ba86e": { + "zh": { + "updatedAt": "2025-11-29T08:14:49.985Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.986Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.006Z" + } } }, "b28fb4d49a614d643a46b4d31f46daf5e9fe6cda08176cd2f5e078a055407bab": { "4108560a1744ad0710588b9cd75e007435917814d8b73b2316426c9d931d44c6": { "jp": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-29T08:14:39.675Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-29T08:14:39.676Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-29T08:14:39.675Z" } } }, "b626ba6a5d5d3ea8fc4f8b1fbab4067c3c422e1f441d82656ea4e1576b013f77": { "d39e1a92c96f946e67f7b31e6fa41e119a9a923698dbf319033ccb86b70446c3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.985Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.657Z" } } }, "bfdad58f0ce19b8378572771619d14adf32b34da41695f420ad03ed4496197bf": { "c5d8b4488de9c51f7fa4c711f9885ca220f45c37ba8c7062bb02813316daa7be": { "jp": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.659Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.659Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.658Z" } } }, "cb1ba7289dde002c321160e758dcebe6637312272f6a21430a36ca8d2bd0457e": { "6d2f41b7dfc6a91c7ad657ff5eb668944436fee3888a6396625bc67d1726719c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.688Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.683Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-29T08:14:39.677Z" } } }, "cdbd4e3a0fcbd1a9915e133e9c7749b9e313633614596b23aedac6d6da31105d": { "184622e2d0685a2859808cd7eb92c85650ed8abc39d7a38af056d81ff2c94654": { "jp": { - "updatedAt": "2025-11-26T07:24:18.972Z" + "updatedAt": "2025-11-29T08:14:49.985Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.661Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.979Z" + "updatedAt": "2025-11-29T08:14:39.658Z" } } }, "dedecc80a24539ab5ef48968c83b54eb08fdd06c15720daadff55822ec0b257c": { "5da52f81a0a0c35a9810a8ba27a1945c10ef4931f047eff638a1e08016f6bd12": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.669Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.980Z" + "updatedAt": "2025-11-29T08:14:39.659Z" } } }, "e7ff4d7fd0bd848202048d33c9e285c0b7eaa06b86b242461c43fe7e001d1b39": { "574ff1d32ed4fa6964c51389dc9f9d35f7a76cff9623137d2922ce0856a65215": { "jp": { - "updatedAt": "2025-11-26T07:24:18.982Z" + "updatedAt": "2025-11-29T08:14:39.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.663Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.981Z" + "updatedAt": "2025-11-29T08:14:39.663Z" } } }, "e83fb55099e0c1e7efe462a3fc836fad5d3f3480534f4512599d1bb0307a952a": { "00125ab6f5435064f526a97e752f345080fe710b1445d06711d4011db26a78f3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.666Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.983Z" + "updatedAt": "2025-11-29T08:14:39.667Z" } } }, @@ -13870,6 +14739,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "86d2b49dce63d0030956d9394380f458d82580fccf11182038c47ae25941e202": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.040Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.045Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.046Z" + } } }, "027f426455e0e6842638722daa037b778ebc144d4ad338fe61f0710ec20e99b4": { @@ -13883,6 +14763,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.112Z" } + }, + "c1078383e79ac339256601f181a193ab1979b13400901d0b702e398f5163d3ca": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.021Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.021Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.028Z" + } } }, "0819d9360d80872f0e20752e84412951fa413fcd532b41e457c8b552f0613288": { @@ -13896,6 +14787,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "d83c42928fec524182b7980ee07946e52ffe8f524b8943b83d109bf0a5e6b9b4": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.692Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.692Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.044Z" + } } }, "24d804d8ac3ccf43c75fb8b0dabf735d89f27625497f0d7acaf06933ccacda4e": { @@ -13909,18 +14811,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.113Z" } + }, + "9ae107eff975761568ef37cb2d50a6120d87504b7eba954b3c75987d6acfcb56": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.019Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.019Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.029Z" + } } }, "2e14d7ea42f23a61da8855e77c500092cd204a036888c976b84a9a6bf71b8eaf": { "1e988897ad46c538e51b835cd9cd1cf89a4e7059611c53ec91e71868db50124f": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.689Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.690Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.688Z" } } }, @@ -13935,57 +14848,68 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.116Z" } + }, + "7557e28163d56959272cc839ee4219d9744ff724198372cda0479d4869f1c55b": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.017Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.019Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.022Z" + } } }, "52ccd94aa1e934784ca02ff91c16f3972d775ebf46b09dc38022536e439186ff": { "c395705e691a1be5ddcfb6d1b262f9a0dfd9470788de834bcb6fbc5d0d8f0c8c": { "jp": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-29T08:14:39.674Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.005Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.680Z" } } }, "5564c05bb16d853324ac6b1bc9b36248c158160a7e1fbac14ae9b86cf5514569": { "ea348755a3baf8bbcd34194da4c4529bb44c7a9a402faf39e87b9d75135b0b81": { "jp": { - "updatedAt": "2025-11-26T07:24:12.117Z" + "updatedAt": "2025-11-29T08:14:50.036Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.117Z" + "updatedAt": "2025-11-29T08:14:50.037Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.118Z" + "updatedAt": "2025-11-29T08:14:50.038Z" } } }, "592a7f7d3a8dbeda07da824c065c0da9b3e247906e6dbf77674f6a63df3136da": { "2293abaeae3fe16820f6c7c9a37b91841e60a17efff63af19cb7a8d4a0eb2456": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:39.672Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.689Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.684Z" } } }, "59e3664663d669e021fbd29e32b23a365ecc37fceaccac1e3c9e74f070873d03": { "664e682e3d269a460d26982803f72d705695f346f7f43cd3b62de24703236061": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:50.005Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.688Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.687Z" } } }, @@ -14000,70 +14924,81 @@ "ru": { "updatedAt": "2025-11-26T07:24:12.113Z" } + }, + "7312a2f89d65b933514be67491fbd4c987461524ae097172ff5410ff3b41a21e": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.024Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.025Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.026Z" + } } }, "650407ab32a2947c9874bd0fc813344a1675577ba430ba4ddefb9497ceec4df4": { "ad334487bb9276e08638e9be4af54b1205755e694d6c1911d00059d8415fae44": { "jp": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-29T08:14:39.674Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.977Z" + "updatedAt": "2025-11-29T08:14:50.005Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.681Z" } } }, "77307f3a7d1b826bb6622b0f3ffa4c1f7706494839393590234d7206bbf2be8f": { "017f574127f909641a3e7c014420c6954edb618ef3d438854515fd0f5dd1e298": { "jp": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.682Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.993Z" + "updatedAt": "2025-11-29T08:14:39.676Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.986Z" + "updatedAt": "2025-11-29T08:14:39.673Z" } } }, "914120dcc6c64903cecac105d4df906767aa83b440456a677f5192431cc83d6e": { "4af035b51000a041cbfd0989fe3c52f7370aaeec63d4f8ae146a2776b899fae3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:50.006Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.987Z" + "updatedAt": "2025-11-29T08:14:39.674Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.679Z" } } }, "9c50ae2540822f01de38fd832846c44e0815140836bcf8df45e61a172e36831a": { "48e37702889833007771c8e75d0ebddc5a93b178a5f5ae6c2512d72beca89b15": { "jp": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-29T08:14:50.034Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.115Z" + "updatedAt": "2025-11-29T08:14:50.033Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-29T08:14:50.034Z" } } }, "a1a93279f18aea8b2a8afde127dc919f6b9381d84fdb78e820af9fa87a4f85d7": { "8ef32573cad40bd5922dd07f6e65cb11c503497f1996866bd36c8bd70fdbb4a4": { "jp": { - "updatedAt": "2025-11-26T07:24:18.984Z" + "updatedAt": "2025-11-29T08:14:39.672Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.687Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.679Z" } } }, @@ -14078,6 +15013,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.117Z" } + }, + "ea316ef388947a1bd8b8ce3b019ab9377bd0b52bbf557f4ee29826ea0406c8d6": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.016Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.024Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.030Z" + } } }, "b1eb514e8efc1da765f03844ec981e8df30e9e90bffe8f559550b33fcb148386": { @@ -14091,18 +15037,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "fe5653fd0a01cc377763c0dd39db11ab651632c5116e8e68e5b26336f447b84b": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.017Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.031Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.032Z" + } } }, "c35229fb2bf6081a5aa25c5273a6bc76f7fb1f8586da22277f9b09cdfe9c161e": { "96b4bbf5cd710c7028d1dcff43630fc1346305b9fc31fd06b6feaa5771a11a01": { "jp": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.686Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.995Z" + "updatedAt": "2025-11-29T08:14:39.682Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.996Z" + "updatedAt": "2025-11-29T08:14:39.686Z" } } }, @@ -14117,44 +15074,55 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "624184c131264cdb4084e3b3202e40b83320cab7475a7b58e74d2b6244ec0c40": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.017Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.020Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.026Z" + } } }, "d88cb52cd1ee657459479ad84c5c952fbde653226d9799e31239473fa8b0fd23": { "fb9e79efbf3a2d62721e7f715f0699a0dc1f1dbc6e75db72c520ba3026346f5b": { "jp": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-29T08:14:50.013Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.110Z" + "updatedAt": "2025-11-29T08:14:50.013Z" } } }, "fbb5789352a952225705586e3f21b0e7e42cd17127fe8ed8e8ca218112140a27": { "19f784e7b489f48a3d495a2e1c1d68856626b21b4cedf271ef931452b7add1ce": { "jp": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.988Z" + "updatedAt": "2025-11-29T08:14:39.676Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.994Z" + "updatedAt": "2025-11-29T08:14:39.678Z" } } }, "123aeaa56592e54f31fc778623c345f09749d4e0e65e902af7d1a93337a425bf": { "f2e0676875f34dd5520562d2cd21b217af1b44b68311b6c948988adef7f432a4": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:50.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.706Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.714Z" } } }, @@ -14169,18 +15137,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "0c123e0b345e289824f7799b173b1794fb0e64b2d9bca74c9615d96f2d87b4b3": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.695Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.045Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.047Z" + } } }, "1f24f51d58cccfdaab17312855078466a67ec6632bf8534638b69f8f5f3551c5": { "ac3de3782a6dcd627cb900e0e3c325463324737e43db6385a4a9edbf6ff7796b": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:50.040Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.717Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.713Z" } } }, @@ -14195,6 +15174,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.984Z" } + }, + "56afa0eb5a088f7a9f1763feba7e0a86e58b5f20fd0b80d4eb17728b4ebe4e4f": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.026Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.028Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.031Z" + } } }, "3a83cb18dec6067fc17dcd4bf9d92d724df7894996965a2aa6ddadaa218d8377": { @@ -14208,6 +15198,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.780Z" } + }, + "246e677fdb1037560ce0f99220806100065ce49a0a719ec84b0ef40a87caadcb": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.710Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.711Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.711Z" + } } }, "4db1e2e4946307003f6c8e7296d88d16ea1fa0a50642705d3f4a2f6130b44a03": { @@ -14219,59 +15220,70 @@ "updatedAt": "2025-11-26T07:24:12.111Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-26T07:24:12.111Z" + } + }, + "c65bebaf1409b6811c25b61ee9e1a29774f1a9a74497375c4b00bb9357be3fa7": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.018Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.027Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.027Z" } } }, "573d715ca8095f0e4ca44d1cba02fd75a74bbc9c173567252833684110e7eed3": { "87c69d03f3d553568b16a72f5fe7243c7fbedec0f55aa5c55695e0895009d96f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-29T08:14:39.671Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-29T08:14:39.670Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.113Z" + "updatedAt": "2025-11-29T08:14:50.014Z" } } }, "6127321ac3891bee9f802edc9f97eeefd28aa0d40a647d0fa4cda55abfce14ff": { "d3499050f8c6e7b0a1bd1cf5e8bb8e940304335d153d81d9717b6c21c16c2985": { "ru": { - "updatedAt": "2025-11-26T07:24:12.121Z" + "updatedAt": "2025-11-29T08:14:39.698Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.121Z" + "updatedAt": "2025-11-29T08:14:50.016Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-29T08:14:50.013Z" } } }, "650d9f2cc9a940fe5940498f6e144305c01bbf36d3ee2dc4bbd8968c9f8967c6": { "17de42c037b1a363aacffaae4c43b7e7c471839ed6cecff05326ffc1616e8599": { "jp": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-29T08:14:39.671Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-29T08:14:39.672Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.111Z" + "updatedAt": "2025-11-29T08:14:39.670Z" } } }, "6813da4ad4c4af5afb1c7574805fe2dd8caa6c96f485a82e9c901ef475f08fee": { "b0517d0f55cd108acdbbe709883cd25fbda01a6703d9b51ff50bd2116dae6e4b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-29T08:14:50.035Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-29T08:14:50.035Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.116Z" + "updatedAt": "2025-11-29T08:14:50.035Z" } } }, @@ -14286,6 +15298,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.111Z" } + }, + "8f32e4aae111f92315bc93e0ccdf602c223cf64f5840140b6501f1f14e174cbb": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.018Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.022Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.024Z" + } } }, "6fb070f1b02c940c98234a8aaec25f6c6469691d330c72faa861b07763ae4725": { @@ -14299,6 +15322,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "355de205d2e66f18b00c07141db16e3eae08111fa3207ff29e5d7e2db19cc526": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.695Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.041Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.044Z" + } } }, "9d8c420729f6dd40353fd0b37376eb59e28f1b3a71685df761a9e2ad46f35ca4": { @@ -14312,18 +15346,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "74b3411891901f287f4f0295c14cd3b703d6197988dcd91f4e53985964af404b": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.694Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.044Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.047Z" + } } }, "9fe9b6ce42a6ad2189bab2836ba94c9f99886df803b81bdc3dec38815dad7c26": { "2a6580470ab1e345d52a27c96f69c6e94d335299083f18b83f4f16b1913c6ee0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.775Z" + "updatedAt": "2025-11-29T08:14:39.701Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-29T08:14:39.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-29T08:14:39.701Z" } } }, @@ -14338,6 +15383,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.112Z" } + }, + "5db4f94f0470b0bb3fb558e3b1e3766ee12f80ad603da74665b1a15b3b16c254": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.030Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.032Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.033Z" + } } }, "bca19f630581f8646ca04081842168a1d45e2ea5896cbdbab33c160594c627c3": { @@ -14351,6 +15407,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:18.984Z" } + }, + "0e3c63c854cf8f55abf51be5d8395d72aed010f11ba09ea870f1dd42d4d16794": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.023Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.029Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.029Z" + } } }, "c7f475dc465af2e8a358403f37f7d9ab77fff25bfb2185434a3988227077f61c": { @@ -14375,6 +15442,17 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.121Z" } + }, + "957fef1200e01d1d2a8bc6b685146a1418c4d936418ddfe9ecb18479516293d4": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.696Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.045Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.046Z" + } } }, "cf53b09fb0c34e1e63e41a10d6bc7a6922adc30f419e11b91aa28c4b6550ff94": { @@ -14388,6 +15466,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.114Z" } + }, + "b2680ed1949ad3d0db6340dcfd927b99beee508808edbd641c4f0f3589bb32ec": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.018Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.020Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.023Z" + } } }, "d85a58d074e13f650fae5bc844462e82b569a15037cf4beb81c7fc31334227bd": { @@ -14401,18 +15490,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.115Z" } + }, + "b6d6c294393317eabba321f888c00ac842ed017623140b48620c5b77ecf9538f": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.697Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.017Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.044Z" + } } }, "e014a958a8137fc765da9797a531683aae1075024018fdd2793c345a9ea2837d": { "a3692c0caea63dccb572f30b9f84021d898cc0b99e942bba8475e5cddd746e9c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.112Z" + "updatedAt": "2025-11-29T08:14:39.671Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.113Z" + "updatedAt": "2025-11-29T08:14:50.015Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.114Z" + "updatedAt": "2025-11-29T08:14:50.033Z" } } }, @@ -14427,70 +15527,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.776Z" } + }, + "51115dd7a55d295b9a3eb7a76ba8a295d6fcab50c6dbe15e410efebd02969067": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.691Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.696Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.016Z" + } } }, "02fec6942d40034d750c654d9c675a575f12b3a87ec90a6e3786281d265a9b29": { "f8983bc303673b5b9632c8a2f95602dd3f90803ac3e493ee4ff7244ea4b98790": { "jp": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.716Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.715Z" } } }, "0393512198efa57d46b32a113a35375ccd26518fa34d3bbabef4214d4fb8b53a": { "8103e61160aa52995bd2806ebc1f5871330feb5a4b2c8de0e9221fa8a70d1ac3": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.051Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.058Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.051Z" } } }, "0c5a65f577c71fbc834405efc189e3c50da0f84a64b7f1b1ba76d9fa8e7a3e9c": { "2d31634c588cb2805bebfc13a4cefde978ae8d078f32a88954c1ee076a081d1e": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.714Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.717Z" } } }, "0c607ec56978fcf7cc9280f736b890c5fb289db3ddfbeb737f9ed97fa79e3f05": { "c01c4184a1e5108e2ecbbc865220b88f0c11caf78ba66781b92ad690c80fa8d3": { "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.057Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.059Z" } } }, "16ea5fa75d5d08e032a72f3d2f70dfde100b84192a3a87d58596c7a636e73d4a": { "08b83c6534ed2ed43f2e271298926bbac6bd7c4e552372271ab8f870588ce545": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.716Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.713Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.718Z" } } }, @@ -14505,18 +15616,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.119Z" } + }, + "bc07f19137cb6dabf76e068e43903d8f0c0d4a5fd3ef5e4c48ca713d51eae844": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.693Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.041Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.046Z" + } } }, "3e1a6a2d9604853fec0f6b9c21e1534bc36ba5880d4042f71f1d9a03ff9e0c74": { "50a43ff5465e5ed3b333a2938abb5b5a0fe5d616b29d9f1176535339c755b45f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.708Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:39.705Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.709Z" } } }, @@ -14531,6 +15653,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "955b894f3bdf01356a56ddde8e74375c28f36a9ddacf9f8cca1d929b82dc3c8a": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.043Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.043Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.045Z" + } } }, "5be58ce97a5c915ff2d4f6bb0a603580ec8a37cc97e4e9b54ce41df65adbfd1a": { @@ -14544,6 +15677,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.120Z" } + }, + "8c7e75be7714da47b7c687d7067a073e9ba05d82b6595b598a376227cab0ee4c": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.697Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.041Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.046Z" + } } }, "5eb08e96fd1bc79722d094e6a779abcf8a842d610d831653012ca3687bc9f9d7": { @@ -14557,6 +15701,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.780Z" } + }, + "a7faed462f96219d02aa7307ac7bc7935bca6700485c60f90a7438b05da3f66e": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.709Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.710Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.711Z" + } } }, "86002a1712dd0604dc6572e5d62e8b5302340810c0d6fb2d6a5457e65c731ba1": { @@ -14570,18 +15725,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.777Z" } + }, + "ef2543418d200cf81a07878edce91cdbee829490d86129bd3c779f48958f1b32": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.710Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.711Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.712Z" + } } }, "927c8bd22c5edb0ea1387b718e08b478ba16818cd5723ac48756552d7439254c": { "11b3f30b750a5e0956357a5f57ba8e702f81cf26a32d8a0825cee915379b0137": { "jp": { - "updatedAt": "2025-11-26T07:24:02.773Z" + "updatedAt": "2025-11-29T08:14:39.699Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-29T08:14:39.700Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-29T08:14:39.699Z" } } }, @@ -14596,18 +15762,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.123Z" } + }, + "c6165f3ca7b3425b951b4a1571401725d547adf52dc6626c445215fb9218c8f1": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.693Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.042Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.047Z" + } } }, "98c18fb7bc391069017a8197ca9b4b5c5a8218b2cc79f1210a3aba08ce470c6c": { "81814115cad79ea901cacf1a4876697b9b219a7ce07476d4edac8f5cfb5017fe": { "jp": { - "updatedAt": "2025-11-26T07:24:02.776Z" + "updatedAt": "2025-11-29T08:14:39.705Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.776Z" + "updatedAt": "2025-11-29T08:14:39.704Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.120Z" + "updatedAt": "2025-11-29T08:14:50.015Z" } } }, @@ -14622,6 +15799,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.774Z" } + }, + "6b17506439ccc3610f6d989dbfd30e8ceef573be8f80fb3230ad3a6b4a276542": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.692Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.696Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.016Z" + } } }, "a5f04cc970babcbd17a73219fd4d3f1d299602d839f96c355b2d5ca53d5cee5b": { @@ -14635,6 +15823,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.773Z" } + }, + "e965cf783f03102b23d52203220a90ea4ad4eeda8ea356dc2888850e3a1ee83c": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.693Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.694Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.042Z" + } } }, "a6c3bc31e00e18f2175e34ff2c0292484093e1b725e792b68d1075913aa4dcab": { @@ -14659,18 +15858,29 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.121Z" } + }, + "8b70f77a580ae511ac0bf35f88454f6df63aca38b1be27503cffe5bd9b3b0d0f": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.693Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.694Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.697Z" + } } }, "c43792a75d02793708f0f9c298dd1e81a2db715e26bb86c9a3a5e14f34e785c4": { "76526beb43a3126f9cd6e8837bdfd7a2b5b294aba899560796a163b8963fb64c": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-29T08:14:39.736Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.774Z" + "updatedAt": "2025-11-29T08:14:39.701Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.775Z" + "updatedAt": "2025-11-29T08:14:39.702Z" } } }, @@ -14685,6 +15895,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.124Z" } + }, + "9b5a33767927dbd5b8d2768daa909d9f65bb2a2f716af808a8f3eb55f623603a": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.042Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.043Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.048Z" + } } }, "e1bc67bc420afe0f3e7e9ad857f155267b70dd99307c6a46ab1d985186a0ca42": { @@ -14701,78 +15922,78 @@ }, "520ab775b334277fd5691012ee012e3b785025e0c7722d8a9b7554a5f3a04f2d": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:39.706Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.708Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.709Z" } } }, "ec512023c5c9e376d6b5a73b27c72543c329f1031a88df1142e318e852a6f5e1": { "e3ddcb697170bf6b9accf7bd9484665c071ebdf44c1609b8c1f4a6ae733dd1c5": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-29T08:14:39.737Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-29T08:14:39.737Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.734Z" } } }, "f411f73869f1597bddd3a69a70dcdf627b2f48802b68eb1297c49cf998a1d590": { "6c152f17b58caad6637a04e4d427aba059026b111c90e5aa764f040e05e669bb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.122Z" + "updatedAt": "2025-11-29T08:14:39.698Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.123Z" + "updatedAt": "2025-11-29T08:14:39.698Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.120Z" + "updatedAt": "2025-11-29T08:14:50.014Z" } } }, "0bba267be6ffcbb62a544c365f5d2cd85d6371c78dc289e5697b0225352a76ea": { "95f85b7c7a43494a5f08ae259de69c8952afb7851b1d9a887ad3107d5e6cbc01": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.080Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.078Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.064Z" } } }, "12f796f4ae9f25130a8cfc11aff488171e7376f25404278d4e5c173c8bf9ed02": { "55069f671a99d799cfd16eda4312b66b5a321376cc69b52c58ba054f313fa404": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.052Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.055Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.052Z" } } }, "16c87bceec945d0aeefa7e76d421913b507e3b04716834b3894e9fd3174d2613": { "b43921e7c1caab150d19b0823696bd909b5e9b9dd41fe7847acfc9dabaec0942": { "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.091Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.090Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.090Z" } } }, @@ -14787,70 +16008,81 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.780Z" } + }, + "7ac8d25006b0218725310bb4f50d2afa2fa76b42500a9587fca779027db7c47f": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.712Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.713Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.713Z" + } } }, "2644c145de6d61cff7556d3efdff355e849b2f38b5c7912fbc2eb07360771f61": { "0e301628684a655bb2d5641c57775c3259b037ac338372d82808d6c91cacbd8c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.118Z" + "updatedAt": "2025-11-29T08:14:50.038Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.708Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.707Z" } } }, "2936efa9c627e5f00c7abc38b09aacea29a31481a83c21e719db82d0ba4eed0f": { "60b3bf0f8d4b00d715fe94daf3931f6351a0e38fe807946e5d1f9eee04425171": { "jp": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-29T08:14:39.738Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.739Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.738Z" } } }, "337fa5ffda5b1ce15febb15e28d78f509b83dd0442c0eecb4e5fd5ad01cee570": { "8ad0cc19f45e168f3328286b8c922f25ddb3753ff16efc3a1795161778bbea66": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.068Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.070Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:39.705Z" } } }, "3a39c3cb40c4a84e5848358c7bcda5a305e64fba4846580eecea963760143cbd": { "1a63ea8e13a6c3989444c8189eb5c95920d36ded548a2cbb106db39f91e17f56": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.061Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.062Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:50.049Z" } } }, "3b2a0db3103ecc795ff82061e46875995689dee845c28a19697c2e8b7d78fb8f": { "84bf17e2315c270d4f26795807428c5ef311a937dd6e53a4b6f3a8e26bf5e771": { "jp": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.715Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.714Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.715Z" } } }, @@ -14865,226 +16097,237 @@ "zh": { "updatedAt": "2025-11-26T07:24:02.782Z" } + }, + "ec159a684acf88c327d88432ca1c26e16cbeb3306673c56da4f7747eee906117": { + "ru": { + "updatedAt": "2025-11-29T08:14:39.712Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.712Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.713Z" + } } }, "548882c1623ad246688470b47967ff13ad16868ecad4f09349b0182efc755985": { "76fc9813a272dfbb6dda3bb0096c7a2eeb3bf0a58d344e26c115c075a8cdf7d0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.068Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.067Z" } } }, "7d0d5bb4af482b39457517f498efb3ea46e33dd5a7cfdef6d18b2beb02e7dc2f": { "a7f9fe4cf3ef806d2de5eb8e1f83c674deb8224319845c32faa2c509b9f0d89a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.066Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.068Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.068Z" } } }, "819fce8b1343a94dee6cf3e428f8d46ff343c43b0d83b49efe18129ccf292430": { "af1d949b76a7c871e4cdce3092a3b2e2b1ea6afca4c4788054f8ff3eddde3ea5": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.050Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.056Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.050Z" } } }, "8756460c34802f52ffc72c46fd775666b61d2134d4e3d1de0bf4111a5a049571": { "483cc85982240fd19d9aaf9161c58f6f4b1f2cdf226fb60169450e02caea8384": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.062Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.051Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.060Z" } } }, "99effff387a3391b66ab69348b19106aa7ae02149e5cdda15d9bd9397ddf4c41": { "635055619056b153a2e20b6a09345d76348336b24340ba32f815de9c85a7f2b0": { "jp": { - "updatedAt": "2025-11-26T07:24:02.777Z" + "updatedAt": "2025-11-29T08:14:50.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.734Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.782Z" + "updatedAt": "2025-11-29T08:14:39.735Z" } } }, "a0698fed4f549f79afea06d1dac666b108eb6f5dc2fd3c91aff7c13f9d635593": { "7bafd49c863eb3620b55c3516c62d1d11ad2c81b1333e7396261c18b3d55cf9f": { "jp": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.735Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-29T08:14:50.039Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.733Z" } } }, "ad1402ffed17fc7c6fda3f600f70cf8e3bbe5384d766081c16c2c90b4a775b7f": { "623f2f8c2f6006597fa106e18afad1304117a0a599684c3050b5f92f433dadf9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.061Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.060Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.706Z" } } }, "d6127c27c939a8143d6bd93d737c445238b16aea350cd52caa535082aaed407a": { "af21361ca18f3026c0fcb3b223ce74e7a213c2e9016d2f7596b5103f9f243027": { "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.059Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.067Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.069Z" } } }, "d679b331b013310d0726e18cff38795d35a48a549ce862414366ed5d37b17a5a": { "6884d15ae61a9e31fa06e9f6cb793ec44513338525d28650cffaeecfdfd55f59": { "jp": { - "updatedAt": "2025-11-26T07:24:12.119Z" + "updatedAt": "2025-11-29T08:14:50.039Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.732Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.781Z" + "updatedAt": "2025-11-29T08:14:39.718Z" } } }, "f23d1fdbec8862f67bc4eb334787e78bade64fa097b14c338abf676e73a1ca62": { "0206d00d56a0c7be7a356c6499d1bc4c3b24602fe48380f49f1a8be277e30ae9": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.714Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.718Z" } } }, "f5d22ca5e2a60035bc7b1c39046c553ef2238bbf8c611bd22963a3cf3fe67663": { "9a33263baf26f23ddc1d61444b9f0bc17fe15f0d44c6aa520661947f7bc28d34": { "jp": { - "updatedAt": "2025-11-26T07:24:02.780Z" + "updatedAt": "2025-11-29T08:14:39.716Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.715Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.779Z" + "updatedAt": "2025-11-29T08:14:39.715Z" } } }, "0d3a0a09b86406c2c362ede819ee030f9d92d058939579cd1229e361973022f8": { "9fc104791c743a764dffa282d540ca4365e02a6a6590d6c336de81ff7f63da24": { "jp": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.741Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.085Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.086Z" } } }, "14364235369dc388419efc9e290886ddaa202d5023e8adc55d75a61c89fc336a": { "328695ec26f7fc60b0c8aec17edefe2b5cd222a635c116a01ed4259436be44ae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.101Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.106Z" } } }, "14a65362c725c7a0fae1767f0bdaecab08516f4549961fb82c9b0d3889476e2e": { "4b5208315e755dbc3f295c8a58958e452a782c2f41e4965b7aaafc2ecdf93523": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.089Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.090Z" } } }, "181aa5509e2dd7724e3095fd6c0f17cf6fedab2635b9af1d57fe9d1e2801ec31": { "bf2760368d2fc3a4c455358f8872f13eb6f6e7b8ccd6d529c68dfa016882d216": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.104Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.084Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.080Z" } } }, "5181bec59897499f787e1b509cc19c69de2efe0e1437cc2001f2c7dbe8022440": { "54af2191cc8de0b1a73c6bfeceff12420569139b7347df0f18a111a00cfa0d1f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.076Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.078Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.077Z" } } }, "59475ce3a8014935df370b01b5266883e7814a8041f963545d8edaf3119557f2": { "53cc67b8b0dbfb95e446a4d98d10dfc35a026203fad1b1a20cb6bf733faba4e2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.069Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.072Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.072Z" } } }, @@ -15102,962 +16345,962 @@ }, "d6c562ca4d62646ad4de68704867016d1f98e9422a7a7b9d1dab026eb4c410ef": { "jp": { - "updatedAt": "2025-11-26T07:24:02.778Z" + "updatedAt": "2025-11-29T08:14:39.707Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.707Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.708Z" } } }, "6d2c1d43528de97c8dcb1e3618555c13b1ee6ca0cec9035a38fdc267403c6c3a": { "a09b919bea9302ab3ba5a119614ec1de086c78f2af22957d06a895b8b1504bc9": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.053Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.057Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.056Z" } } }, "84d27978ad24cbc0448dc0661dc1cf62312406d39568cc877e9bee6c04e93677": { "4120b13b5f03f7c2fd4dd243edcbc718d6bd291d7358050064f6599242eeca09": { "jp": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.055Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.052Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:50.049Z" } } }, "993eb4cbf451025e383f5baa954ba930c6f9ae51ff01592c72b8d36662548817": { "6397e782e35c68ed2849d7a8210eb150a2820241365b2424b92b3ac99815d60d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.083Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.080Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.081Z" } } }, "bc95ac30c6163794df098cb1c5b0c612d68e460c1fee0982a9fde6ad2158ac24": { "d710ab3ea85690006a2ba44bbff81541eaffd450228382acc7544df0e34c7468": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.061Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.066Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.001Z" + "updatedAt": "2025-11-29T08:14:50.069Z" } } }, "bdea2c6c34b1129be3efdd889576a52c92a915a41e1639ec5331bfe00948aa9e": { "d5c5bd7080a73f05e45d4b278cac9e1b97c489d95a7c80a8edeeccfbc35abb0e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.063Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.053Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.063Z" } } }, "bef9b0e0b7b38c7969e61c98c564c4f45f4514c4992c99602befb825815d3fe5": { "ecbe5e563d38c0a661a9495fe8b3be6dea6041fe9fe0a6e674428f8d203f2c76": { "jp": { - "updatedAt": "2025-11-26T07:24:19.000Z" + "updatedAt": "2025-11-29T08:14:50.063Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.057Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.058Z" } } }, "c86c73e2e1466ca9839d03145d28d089d50433e69d452f195d963042ce89ac2f": { "f65f3977310bfcdd03981a63ac5b1d00c85b04cbbc5ef4d29c352006d88c1be0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.089Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.085Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.085Z" } } }, "cb9c09aa37313bf52611e34b607eaa3775f6ebfd79387f2120b6b2b2ed4b46e5": { "b033c9754be40272847cfcdbce3fd43701961388f8efc8698510876cb0c0fb40": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.080Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.073Z" } } }, "d7bfcfa62fea0cd11e8181ebab38199db1c954694d8230c3cb8be3a89f91c476": { "c1ce68737a5260a794d17040e187ca291588ef715aeba34369597a7058dc2af4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.079Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.088Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.087Z" } } }, "eb4daa639a63e99d988bfe1cd009befb853ba7171f88047823ca4d63e119f46c": { "db3dcac7ca205ca613bb9129a98b90f70d1edd49164206d1bacd86ccbb885f5f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.088Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.084Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.083Z" } } }, "ece18ee5cf148911a064ac3aabde31461f3fa90405c4631fe64e67bf35b3df8c": { "babc66efa89a5cb73d9a68a0dceb5ae1559780502d074014931e6370f64030af": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.071Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.072Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.070Z" } } }, "eec5db41f767e87040d1a1e1a235ad804968c2645819039af5e1306f75ee2ba6": { "3294839c4121817eb15af16f39ea52c308ef56de049782978aa71dcc4c38777a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.079Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.077Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.077Z" } } }, "fcac219896966a54530a8593af31aa0dd688a431b44e0f3c677722d49352eb30": { "764c0b5706ee7c8505c4e4a557bdfcf617fad088da12e5302081d2d0510f71a1": { "jp": { - "updatedAt": "2025-11-26T07:24:18.999Z" + "updatedAt": "2025-11-29T08:14:50.058Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.997Z" + "updatedAt": "2025-11-29T08:14:39.709Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.998Z" + "updatedAt": "2025-11-29T08:14:50.054Z" } } }, "febea1a8af326ccd97db3bc68c3ffe9b9d02860dfb6225e2ad85613d0fd14f7a": { "96025027a22efdcf22fae68b1f8666c6d43d7197ab56d27461b40b4566ccacf3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.071Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.070Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.071Z" } } }, "07413031937c2e03067e44df8e3cbca1210ee434cba21c6bfa6e51fe5d2f01e5": { "1e96680d8322f2acc44b5d97b8bff6f35462189f2158321fb5f3892804e98d6a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.109Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.108Z" } } }, "08048e81a0b10f6fc876c8e10e896bba823ef23c25b37974243d3ce6241e95be": { "fa7004278db4a71dffabfc42db57fec5a575fb3dbd7222d4b9792bf19848b5d0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.096Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.099Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.095Z" } } }, "184cb7accedb381551a80c780323d8467fa7bd7b87d916cb1c6e2e1927c800cd": { "20fbfd2eb1f5b24eda2f90fd903779fd0847f0d888d3b04f4c7e56590eff1492": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.110Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.111Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.109Z" } } }, "1f9e1a47c221609e49eb77fb61cad9a84a56bdb680185de6655f77145049570f": { "d2bac435d9afc706018821f07927cba0b34f6719b4e95a2c242a869d2c00be3d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.073Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.095Z" } } }, "1fd11512dba8b586ce114f0a09f748f438a3592e967e6b26fdb70d49b49b5b34": { "528c254f1d39fc4b566d364735917ebd190685375530f8192104891def887095": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.098Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.104Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.074Z" } } }, "22dec589b8fb9f267b747bb6c4caa91619a82b138da7ac22fafdf2a4d36dbe70": { "540a7500cbfe21ee07e22edbd55ff6af883a067d691b6301d93bbec754f9da7f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.076Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.076Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.078Z" } } }, "25a566b63d1b51f62e85f3301907bb9851c8e295092c6c0cbb274855aaf2075a": { "b194d71f6380d7cf9309e9c89f192bff2723d4c46d48e2aa2b48e736c874804d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.083Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.742Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.084Z" } } }, "2dc1b2de19552e6b04e43bcf12a339877b5cd1caa1251210fa995f871b2381a2": { "8023c7e209034ddbc60f9efb8a61b992915d01ab6dcdc5f5a0b08c1c7a1cf28a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.108Z" } } }, "356f390220f614f7e13052b738d6bac3386bcb14e99297bc57a7c7bf37c10fd1": { "eed67b4d5e2a37a8d51c1aaf6d8810650b97bd70d00122a88ebb97c212da9ee2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.075Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.079Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.079Z" } } }, "35c7bfba55131ad9d6116db29b6547a45eabafbca7d547b5501ea16d51eede3f": { "6a8e1ca55281999c6130ae572325abcb150b29cfd12ebe451133060b6c502a1a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.104Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.102Z" } } }, "43b396ef0d459a925fcad74ebe7dbd673c6bb8eab1d24fb377b596b6d6850d5b": { "83184a4d72d70281ddce4c2b92b731c5b7e8f98d6d6bebeedbdc0a053adf947c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.107Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.101Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.102Z" } } }, "4d4c6c8d13e7ac14a5f189e798e199562f2150ad644328ef3e5b7e6d397aacb0": { "7c2190f84db7a1c33916eca37c2632206233059ad999d42ac355995a785c5d81": { "jp": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.086Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.084Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.072Z" } } }, "5f7094d809fbf8e07ca4e02020e14a570a112a588701724679f8375a2bfbecb1": { "d84676e935f15fc8eda0f1c0db79ad9cef52b93ee23e53f9891fe1aaaa1180ba": { "jp": { - "updatedAt": "2025-11-26T07:24:19.002Z" + "updatedAt": "2025-11-29T08:14:50.073Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.096Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.098Z" } } }, "7c4de22baba4a87ac92a5d821ddef4976b0c230d25c52c53dfeac09fad83b108": { "6f7f34ba690c91122f3ae8820b83f342061fa594ff253407eb57463d3c34c326": { "jp": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.081Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.082Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.078Z" } } }, "95b82f3948cc48386b85537e6acf7fd6313c1898cc6cfcb47de65f3d618b47b9": { "f133bde7d530ef897396fcb59df2fc8c01b400e070c72c6a25647dfdb9a15538": { "jp": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.091Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.007Z" + "updatedAt": "2025-11-29T08:14:50.092Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.092Z" } } }, "9d97fe2dc29c4e251fff04450d9d510ccf9c2e831a0489dda3f038dcc1a6a2f3": { "e5572fcb5876d8a6b1d1de543d82369a494fcc0715dd6012be5bbf426e7ac03a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.110Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.108Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.109Z" } } }, "9e660b008ccbb63b66a28b42d2ca373909f19186af16b9c41ba664f7930e07fe": { "41b27ab4937c7b922d42316551438b4ad659c0ecc6b4fa06f15edf97230d1798": { "jp": { - "updatedAt": "2025-11-26T07:24:19.003Z" + "updatedAt": "2025-11-29T08:14:50.075Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.082Z" } } }, "ac6b549d962e823e381f2519f7e5e9ff23ec0d86da8d61b9555feb375c459654": { "0f0b86bed0cbb0312f32be51c009ca122e78f92ff738c6606ff98754fca7f43c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.088Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.004Z" + "updatedAt": "2025-11-29T08:14:50.081Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.087Z" } } }, "af7eb4d69ab4cdae0eb49d2ecd090def503798009a9d8e43c2370f01f9a1219d": { "048d3372a598f7a300c38f0ddefba7da299bf7d8ba7fe1a30bbf53fd7ec3546f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.100Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.096Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.074Z" } } }, "d613460c9b562b02355db0de5e4d5e795d93c8356530d72c4e6943e450e0cd79": { "21c14d0cc95de05e66c6024e0bc731b06c4934474cc10eeacdc8bce66de73868": { "jp": { - "updatedAt": "2025-11-26T07:24:02.783Z" + "updatedAt": "2025-11-29T08:14:39.740Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.006Z" + "updatedAt": "2025-11-29T08:14:50.087Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.005Z" + "updatedAt": "2025-11-29T08:14:50.085Z" } } }, "d79d5c1626358051641a02a5df10627db3ec1f8bfe82c284ecff6fc5d29ba24d": { "4b36bae2acf0c20fa2db7f654f8bc8ca933e4db7d7940a5c9c9a26463fe1a7cd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.097Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.106Z" } } }, "09892c5c8c7770850dc4f12c85271ef2eb4054c5c9c132e0c016cfae2c946ba7": { "dc7fead9cdbb478c71bec3f2d3de2e7f32d848c704aedac7d98e3ecb52061139": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.128Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.126Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.130Z" } } }, "2fcab50b97bbc9aee5c0c03f5a35d374e8c3cdd3db10dc78091477c88a2c1277": { "0a0ef87ced393ab506690dadba9b95b3965777f4f3358eb4d004ea111fe10a51": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.097Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.074Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.098Z" } } }, "326c8895de68add9af3b55b704f3bfc1105c0f592e4c66fcf4716d6ad3d6bd4d": { "67ed218e943e01dfd5ac6127ae3673f4c5704dc7e706fa765d94c11dd7f80e59": { "jp": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.133Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.134Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.133Z" } } }, "3aef4f3512c85d4057c69557fd85794d38328c9e61205b126b37d4de45a963e9": { "06d1c97a15302255ab6d9a474e72aa8993ccc93d6749dfd1e5e94970da469d29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.128Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.125Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.123Z" } } }, "467b72fd8dba8502decf3c42bc9358fa8c4d3014dfcfe6b42bb8f4dce198fd62": { "a67f1de09a8a84f9d6443a0df3a49146ce63494d30ed1c458b9929b32d5a4b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.130Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.134Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.135Z" } } }, "4a37cce1f00cda917ca47dd0a1a69934772f9e50b5150732050d2e9f70a019cd": { "f5d8080ef6746049caf9a9d8037b9090eeef2259b54e9f42ef3e6a135b796e6b": { "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.129Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.137Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.132Z" } } }, "4e436a71846d9aca6f15dc8c5445f526f911657bccffd77d51b5a4689a95bbf2": { "1ada5cacc80d636b19794a43afd3d71292a74c9e3f3fa93f182b39eb84ad7355": { "jp": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.103Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.103Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.012Z" + "updatedAt": "2025-11-29T08:14:50.106Z" } } }, "625ac60abe1e4f7ce4df8ac9bffd1f30f906501c1b636c41e7dee039c1280348": { "eaab285929dea7d9ff8f319faad61a28e866d384a56d15e9eb7a2ea10d96b567": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.096Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.105Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.102Z" } } }, "67c93fd175b134b8986f749e1afceefc6f06a4487d9ef161d2ea74e2be618233": { "5418ed61ccd90e17c44bbf1d4246b7b4344bcf595b331971dc74df17def6dcab": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.111Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.110Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.114Z" } } }, "8719f0b66c142c6db2cf8773ebaddac3b3d310bd046ca6effa5bb15e73d1a00f": { "9c001ffc30fb8da63ebd6c0931ef3efb9ac209edc160ae449428bb65298622c3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.127Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.123Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.130Z" } } }, "89ea779c156a999fdf17c325da1e81dd07a635d696dfd5a115e631154d3dbb2a": { "ecc1acdcb21d77d65ebcdd760265565e99254e242903d6b4483da0a6b4a59482": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.131Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.137Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.093Z" } } }, "9b137d113f115786a055cd8fbc160635ea3e53512ae73d845fd749380bc1f381": { "0e565f9a4b2a92384daeaab520393c6426e3c190a2625839b4ead735b7a693f3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.122Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.131Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.131Z" } } }, "a524ef715c9704a1e92f4f92e0b9799ff822e7bf9860bf751ae2b1ff9edf0afe": { "e0f8014536b364d9d9409cff9471107e76279833faca677b2ccf2c077400b851": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.095Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.100Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.100Z" } } }, "bc010b67445245013c815d8c8dd2a711a400f2ac89689de6a705df179ad8c706": { "58a5d26b93b4269bbcac95ceeeb1329954babd6a907538f5319432f3ac4e6b22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.126Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.132Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.124Z" } } }, "c0ac70d88c31f863cc7a3f822cfa525fe69266c4bf831f94c2029759cb9726db": { "b931df20b4f6c77ea8d226087a40d67fa3ecf5f9d09ed73922e7aa8f8f763fd7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.127Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.128Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.134Z" } } }, "c58c920060a64568fe6e344fe00a5ce4d720ac37a93628692770ada830c5325e": { "4a343784a2e6508b5e218dd32d01eb13fe7c9d806b2cb07a5c39a775f7b2383d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.114Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.114Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.013Z" + "updatedAt": "2025-11-29T08:14:50.113Z" } } }, "d61225a37fe0c4d963dda12e6171915748b61bb4ea252b20fee7017863e0f8cb": { "e22f186111d1f322fd63ea2a2ab6b8dabcc933c9f1a1d547efbcaa1d9f78faec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.009Z" + "updatedAt": "2025-11-29T08:14:50.097Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.075Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.098Z" } } }, "e59d25e659a24273c3eef05daa226fdbfb119134fc9c360fb8f10fa1eda0bc5d": { "cea9fed32032cdfb1fc07ee3fd025b189b279642029231324022cc8c275879fa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.099Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.011Z" + "updatedAt": "2025-11-29T08:14:50.102Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.010Z" + "updatedAt": "2025-11-29T08:14:50.099Z" } } }, "ebcf5c14bcf3f123a8337f0e4d01711d0d5350b19f8fceb4989ba4967a454d71": { "fcbe8a223dbb47bb59f5c3e6880beb175753d21025800e5178cb322086eb6eb5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.125Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.135Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.132Z" } } }, "f8131ef0252b8ff50e0e16a5c5a263d8c4c19d0d5eed0109ad5127d0b7f1e617": { "10eec051f15e6d2b7349c390f8baebb76014741ed3b8e31aa94bf797e786189b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.130Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.136Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.133Z" } } }, "57ad9bdcde77c82a8b9abbf11d3820f549bfb779a29aa35c949fd4b27ff2f01f": { "1e38948feed7f1b2a7b35c47b430e56f07e2438c56f10e45d636ec500990a43d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.131Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.128Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.015Z" + "updatedAt": "2025-11-29T08:14:50.123Z" } } }, "7ceb6e3c9247297b0f7f32b5bcc5fdd805490fb8b1ac4cb176afdba619355e4d": { "ac6e6531f103ea9f5613e39ee61cfcddac7133be00040a3d2577c40543aa27fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.129Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.127Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.133Z" } } }, "b623b9673e0f28805a4afdfc8013cc9c06d3af3bc31cc33238b2d1a449d4888f": { "141f6e9d777628dad68e29e4db62adc7411f17cbe61f3611de81835eed95ff15": { "jp": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.125Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.124Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.008Z" + "updatedAt": "2025-11-29T08:14:50.093Z" } } }, "bd529fa629c3f10310f525658df96bc82a80d75ff52d1995cafe1e4b13e747cd": { "ff7e68ef737ee5b8e75daa40f60eb811c121bece05086608bbe25c6ac85d8715": { "jp": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.138Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.137Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.138Z" } } }, "cbd3fd46a4918ee9b9919e72d00bd7ce3d00418bb1705c843c677adb3e595a3a": { "0613ad7af0509f61658a0f7a5e17e617139bdf209f37e63f862416353f1241ef": { "jp": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.135Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.127Z" + "updatedAt": "2025-11-29T08:14:50.135Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.129Z" } } }, "e1167cae2cc6ec3ff98f99cc5fdc814c1613d183ffc5a294e5002a5c76629f89": { "bdc0fd08e9185e494c67e0405a76d6b5ff3f2a66fb66986f38ad9fb1486504d8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.126Z" + "updatedAt": "2025-11-29T08:14:50.132Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.136Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.124Z" + "updatedAt": "2025-11-29T08:14:50.124Z" } } }, "fddeb9c1bb988ad91fa2ab2fd48f16446790394aee1f2ea892b74b4703663d8e": { "40a994cb1728118007e9bcec1d1e95be3ceda608e471c1a73b546b7c438f8ebe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.125Z" + "updatedAt": "2025-11-29T08:14:50.127Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.136Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.128Z" + "updatedAt": "2025-11-29T08:14:50.137Z" } } }, "08bffe1dc74222857bd9847a9079d22910222fbbdc1dd9975d3beb50f284f3ee": { "6ff985dd3eb042cd0776c0981bb360df764da84db1d5f50ba4c7bc2fd4394a58": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.275Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.274Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.275Z" } } }, "3a9bf422a9a85629cde7696a05524d19ff37ff8a14e26aa9d363708d50ca69ae": { "3106e22f04396e24e2bcfddd311b6bf015d441abff426e8f3e45320a55f20c46": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.277Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.278Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.278Z" } } }, "0b2918c33c54636514f9106c16c6353f3c90189cb35c245462f264976b158e49": { "8b5e41f784e6af3f274d3cbab3bb71a982e9a0b2df5cd5050b3f76eca71460f7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.276Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.267Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.269Z" } } }, "190291cbeb8e03da636d545882454df1f5969a43233fa8547a340888416e0d7a": { "1e21922b278cc488c7ca6142a0b58330666f67ff429c778024409f871aeca347": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.260Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.319Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.316Z" } } }, "1dbfde47d0ccaf8fabcd5ad6a4296155b1b096aae0b5f8d17a8c1b756b2695fb": { "665e7928e61709a3964eb76535bc335c1bee18c8bc09733558199e232956630c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.269Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.271Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.267Z" } } }, "1e6d8899d944f96b533c9b1689dd0f3c45d1f4d88d4d1edd3d0cd126273c28ae": { "874433a820ac2a172772ed12a2a2e43d64d72b5fa3f8c9060c2ea70f9d9969b6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.272Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.274Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.271Z" } } }, "267616b5e710386f1e95782b057051b61f78cf2ab9ab90a87b76171e1110ba0f": { "526635ff55be813366ca95dd8408fe2713af702ad3c42ee3f6df159c36d7d754": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.324Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.322Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.324Z" } } }, "3db2189c4ab253714a8026c40657f8d09c5b44880bacd30f5d37a00af55f0af9": { "2e5559b28181e920ab535b8433f1644911413cf5aad2b7f7f2077a2124cdb9a5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.275Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.270Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.270Z" } } }, "4887a31d41443a8cec80c653b5cb1471ad7101392e2a0fd85344bf550b4479de": { "5d542d21d2aeff7420ac405c3efb0280de56bfcdabe3edfdeea55aee2ee0816f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.269Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.268Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.268Z" } } }, "5e3e9bc17b90a0989880b5acd7291677843b0466fc3c36993015c0a7331f4c86": { "50e422154e7d9340b9ae3e608a02ad691373881011458d12ee9329b251e2ee21": { "jp": { - "updatedAt": "2025-11-26T07:24:12.158Z" + "updatedAt": "2025-11-29T08:14:50.234Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.280Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.280Z" } } }, "6820315a7841bbc8c89a60ac5aa8c0fe4457e414cad746f3bed1650c3f297bc6": { "6d8963200cc850f442fe2995954f739d20436c4a7fb4b2ec7f8a636bc53779a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.281Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.274Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.277Z" } } }, @@ -16075,117 +17318,117 @@ }, "3b63277eca58a6be86961cdf77d03b10bf3995740802c612a1fe8d80ea7d20ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.235Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.236Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.236Z" } } }, "e0c7e0ffde8dc72698165f5f5a97336beb9082111bdd4a6c98f10c02ab69cd27": { "1bd7f94ef79ae4a259d5eb60f577fdcaa8d2926824240d88238ffb4e9d917715": { "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.272Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.275Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.276Z" } } }, "09967fd0502ac05bc286aeb301c2cc87873b2a18ef14f3e2acde54345b2ce839": { "ced484d2a382f8655c9d000bcfd985aa94545bc671aae3824c264e06b17c1fb5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.261Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.330Z" } } }, "181adac272e2abd83cc757fde65fb79cacfbbfdd22c49560ad9938dc95ca360f": { "6aca92cecd7097cb7ee90b10d02efba74d48a3de1843308bf7b14b842592c336": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.320Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.317Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.324Z" } } }, "1e8da80bc94e12875fbc8b4285abd87a9ebc00408979ef39716bb53ce4293704": { "cca901fd78a63bb4eb045aec0ee20699b9ea63520630a96e5bc254085761c479": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.330Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.331Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.329Z" } } }, "28af1868b1ea9cdd8d1446f03dc1a91a48ed271602879f18d0d3211752aa2e0d": { "38f892b234c9e0a9d0e3e6bf087768671979427a8bbaf831e2c0cd94e5730d2a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.335Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.338Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.339Z" } } }, "352b7210abed12f4834ce3966861f5819c1b015976a552f4d8f3417367d6519c": { "aa0583b1c517ae46447bcd58d7475ba0f4350a3b5974cd1a472f07e84ea2b12b": { "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.747Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.283Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.752Z" } } }, "3e04e93b41ef14736c12d8caaaae2fd7c113b2b4ab71ad84553b87b688b2ce7c": { "44da72d1f89df587a02ef24e707acb1da8350d35e7f7a73fc92e5b863e479a62": { "jp": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.339Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.338Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.327Z" } } }, "3e44364087b9660f0daf48e77e2d51e82485581dd45ba3635100c92a48f5cc81": { "32a51ef86f8ce4d5a89c21ac07056345cd0ad1dcf0c3eff8343941896b7a8a62": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.264Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.263Z" } } }, @@ -16203,78 +17446,78 @@ }, "f1f6c6ba727fcac4034e8e533a8a14914f296de5811f8ef69aaccc190ed52c04": { "jp": { - "updatedAt": "2025-11-26T07:24:19.020Z" + "updatedAt": "2025-11-29T08:14:50.261Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.284Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.284Z" } } }, "56a2d0968dd32b192f6e6833bf129bd2a1a73e16d498c9f8a64c8e8cefcb7635": { "85317ab67c21185490c8ce6da9f40ae75c6aa792d046b52122da1555de6a0d7a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.321Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.324Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.322Z" } } }, "57fb93819b163681fc7674df87acd51d16808daf3c9a80875363e714ab6b6f0d": { "589fc5521d34b691619a0775483550005c0339c397f9c5eb2ad84a68d38fc0c5": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.325Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.320Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.322Z" } } }, "5f7acdc3b5ad3c4b70f2e0f6421eedcef49bbf5fe1541b93de796181d282e3f8": { "c3b3c36e1615ad52f46683413733ab6deb9809b9216880d962f14d2b316e6812": { "jp": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.277Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.279Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.280Z" } } }, "720286aedee663b0895eadfbb8c855cf28e8c889a5c1e959eba2cb56410fe0ea": { "8b424c806172df3664b5a02f66fa091e75d922eace7c6d17ab06a1cd4d48ded0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.321Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.325Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.027Z" + "updatedAt": "2025-11-29T08:14:50.321Z" } } }, "72359f73659f510486d116f7315a779a8e182fd9217ec98122618754e8e8e523": { "b7f70662c0d64e5760316e2f601553929e92b4cd5b7d382d9d395b743c0236de": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.282Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.159Z" + "updatedAt": "2025-11-29T08:14:50.235Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.281Z" } } }, @@ -16292,260 +17535,260 @@ }, "13a75f2e1510d071925413f0a9794c0c5df227d3f3007ca6a25a865fbf3c7afb": { "jp": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.262Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.262Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.026Z" + "updatedAt": "2025-11-29T08:14:50.263Z" } } }, "a27f8d321849f13ef579bf79bd9fb504adce87fc32377cb34f1d87d0247b62fc": { "0af225620d1128bf2b7b6df1fd290b2f9272232c08e057bbcdddcb8da980d877": { "jp": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.278Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.282Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.282Z" } } }, "bf4aa8d8478e9cbccac2af56a2392959e788a6b441ae1d334d378fe41c813431": { "03be8e55e0b7b3239928d3c046bcafe55731c78e43aa66ee2a92c237cad32296": { "jp": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.280Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.276Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.277Z" } } }, "c6f8d4ed5ef7dc56f976117869cc7a69922f064662bcdd47f24b593a903bb511": { "66256e49527646d9c1360a5db02fe360c867281e0fbebf9751bf3d0a5e4e0116": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.323Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.273Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.023Z" + "updatedAt": "2025-11-29T08:14:50.276Z" } } }, "cf5cab052feab37e254b75324c3a852334a8eb3c58db22a1686c9494d09f443c": { "d809412f215411acf69b12810108cd424016766dd4d30a992351f8e69bf650e3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.273Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.279Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.158Z" + "updatedAt": "2025-11-29T08:14:50.235Z" } } }, "d9f334133320c651967d1b5b665ba9cb709fe4d09178893258245d70b28c5b25": { "ab1cd75a382114032d421c93d59ddfaae337e9528e1ac6b02cc19764422a2124": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.336Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.032Z" + "updatedAt": "2025-11-29T08:14:50.337Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.331Z" } } }, "da0fe2e9eb4d4168fde541e5a4aa216882f11f0fe02c65758804bc42306051b7": { "460c5141199908b2fb1f8ada87d50d25899e1061548dd77278916ae9f0194eb1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.025Z" + "updatedAt": "2025-11-29T08:14:50.281Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.278Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.024Z" + "updatedAt": "2025-11-29T08:14:50.279Z" } } }, "e1c1bce938fcd121a541dda56b44194cec991a3c399320d28f68662d4f2aa155": { "ab303b424478e35d2600d95fd49a29737cadb6308b63d04e43f98d10c38b5cd3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.331Z" } } }, "fd5ff75cec53563913c25d3a84cb92ca6b7f928115d7912cef78a22dfc907f29": { "ba4164cf48205f79abd50e8ce1180feb106ddcdda361d67fbf580922f1a8bf3d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.273Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.021Z" + "updatedAt": "2025-11-29T08:14:50.267Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.022Z" + "updatedAt": "2025-11-29T08:14:50.271Z" } } }, "176d0068a5182e14c24f7b86a941e2993dd5d5375dda5f359181472f50bb49a6": { "3c0a49ce0175e9ffb151adc18ac51e16f2d58c189a49b071eddff19741b2773b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.759Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.751Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.761Z" } } }, "2fc9ece7b731c86425713493bf6fdb0053ccce96ffd9f63a70eea4019cdff660": { "547949490f707e9c4812b2f1acebb85c8f7858c6f4c8d030784a54ffa0f6764b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.346Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.344Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.345Z" } } }, "356a5236e325bbd80f92c622b5549c7f59c011b169fdc94f7b59ad1948f64d59": { "32a464d65d3033a6f94c395c523bdf9d52473033f37bc7b58a4c7d5a3374d78c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.343Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.343Z" } } }, "4dcf3a152974b0406b6bb68f5b1c541fe9249595ec4170e386cdf67f9e97d6c8": { "144e0319e32e38db32a1efd639ffc72bf732e5ea7b5d6a3d0883a97e4bec0cf7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.746Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.764Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.759Z" } } }, "512bf2a261651531d1f44db97f0e2477f9009f4f748fece66e5ca2554439601d": { "f65ce8822ff0abf42d5c376dd8120812baee55885d0c7b7b65bd770ce9d25050": { "jp": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.345Z" } } }, "65955c38f425b134d13cac38e2564b302a84b647113466a30fa84df4625f2aff": { "e5d27d0981cb097f6f8db2c3366ef654946ffdaba0ea5433e234e0200fed3d99": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.759Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.751Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.750Z" } } }, "70760b9ea84a1492768f54f60022928ceed80c33ef8d2cbbe522324f7979123c": { "5172acba2103f95752ebbc8f74579f1012ec0e81bba84d6402deb3f9ab3b0bfa": { "jp": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.765Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.762Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.761Z" } } }, "832f10a64dee00c5573ad8927271c0f08e6912344a6142b218901f374557d6d4": { "c00fec44d98d20ecff726432315131e9d6815d1bc6d528bba1cbde655c11121f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.329Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.327Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.326Z" } } }, "85aaa20028d2fe29973bbd19c0fe7f0bbf9b2028122048baf8aa80c366fa2134": { "3e3cfccfbfc2a9aaaa5c073111f54d43e1d4a01447a2fdcb70bbf2ad0fa40c15": { "jp": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.328Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.326Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.328Z" } } }, "8edf9e4f287ceba4ca2d82f14382e035360e320bcc403a4bd0ffc3569444e7f7": { "0210849faec51fc728046caa3f03b71304bb9c646dc07169ab1c6d9e340a0aec": { "jp": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.327Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.324Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.325Z" } } }, "9c07a7cf8bf10809ed5421b224c9702d1daf802a6511bc28a61380182a3cba5a": { "4e8ed6a1feb2aa52a5a2a4588b3ecb8b8ba68dec83a27b9280790c81f51a60e4": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.765Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.763Z" } } }, @@ -16560,31 +17803,42 @@ "zh": { "updatedAt": "2025-11-26T07:24:19.030Z" } + }, + "2f0734e7c9a31840e186f5a334fbbbc73d1d52db49e8bbda9d6d1527b330a0f4": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.303Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.305Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.306Z" + } } }, "b39b9077d3c9edfb0122eda19c18f981a977ba3d4b35e87ca4e9808c93c00357": { "c4806c1db71a5a0e8cfe750303156d37b0c67170fa9901e7e2fcd40bc40df990": { "jp": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.323Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.326Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.028Z" + "updatedAt": "2025-11-29T08:14:50.323Z" } } }, "b57ac847efe3da698e4e7e930e7c66f735f45e722a25a0fa39bc6f7bfcec60cf": { "9c431dd0d8265db20267a05a0e5cddc327c798c7acfd1be5071f066d5a7aee28": { "jp": { - "updatedAt": "2025-11-26T07:24:19.030Z" + "updatedAt": "2025-11-29T08:14:50.330Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.337Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.336Z" } } }, @@ -16599,1006 +17853,1017 @@ "zh": { "updatedAt": "2025-11-26T07:24:19.038Z" } + }, + "a9aaf3d0acf90c263febea571cd562058a89cc9ae231894d698d45f35f8a8089": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.286Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.296Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.298Z" + } } }, "d6df5c4a34d83a6b139258c32c70c202447dbb8bd299cdbc95f1a4df8e0183c4": { "cc987465957a6c156c8cfb8e7e1f5591232ce2a233ba2e10cdaa0502c5170fc1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.745Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.346Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.749Z" } } }, "e8326b6e3e229b53f7f7616dad224e62d5aabc8c99d1885fa0b294be36436442": { "e0c19959bdee8150958356d19999762296868f26f8c58d573bd31ee946774713": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.746Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.346Z" } } }, "f6456b0e678701e28c6a4e322798fee754b4c6d0f806d50583a4b3bd2c244c77": { "b8b48f150dd2033fc11782fa83bfba12af99e2588c361eae29e969d7df966696": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.345Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.346Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.345Z" } } }, "581431969901be3a99a89764a4cd843b136cf34d9c36a58c385d297bcf0b5576": { "848b4e2ed1094aeeb74cb89d7d3f155262e075c04ec6a136f164406460b1c404": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.744Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.033Z" + "updatedAt": "2025-11-29T08:14:50.344Z" } } }, "90b8b253ec086b1363c721e07a29dbd20c3e79932831c40618a9e15eaed1259d": { "558092fa5958f7bf2b9c27c89f455619f6ca6f3513e83b59425458536609e8ef": { "jp": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.750Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.748Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.749Z" } } }, "b22d1260a64a32ed7c646aebdc8304e5522445a10e936e31715082f3976c0efb": { "0350b0c4a0edef07c101045887230f235288aae9414af376658d84671b54adbe": { "jp": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.346Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.750Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.747Z" } } }, "ba3d45a637c836f2218890eff93fee4103508fa1c470944799207121717e02a5": { "f3fd1aa8bafa81bb6a7e865a5de62823158a0afcc7ff7586bf136a8b47ee3a88": { "jp": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.743Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.035Z" + "updatedAt": "2025-11-29T08:14:39.745Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.034Z" + "updatedAt": "2025-11-29T08:14:50.344Z" } } }, "fb6facb17dc3579b44508a305bcb4895b64ecd0ac72b1f50f97559b26bc78b2c": { "ad02c360d5787e1cd581329efbb507dd02fe16448697b4344569b5bc44e930ea": { "jp": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.763Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.038Z" + "updatedAt": "2025-11-29T08:14:39.764Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.763Z" } } }, "035ee5282a6d20879fad6bfb6f79b4341721a15ea3c52c10046b1dd3709aa16c": { "58cd6998f41fdded6a804039b2debea7d2278499d73c45aac0012b7439df220c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.465Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.464Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.466Z" } } }, "26fd7d38f92eb5055170efb295d4a4f87a521a38805a47e252302040001b2050": { "6311029c9bad9285962dc8c797429aff225c5d236c038434dbd0c88cfb8a7048": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.457Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.483Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.475Z" } } }, "3f43afba791f6baf15364b9b47e22c85a9f1b3dd6af0e12ec732f9dcec39457f": { "1dd4bcf22efaf403e36fb2a77e769a0046ad25b9ce5480ba0ffe16c707a0ef4e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.492Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.483Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.483Z" } } }, "645f7fd9f0334b6f31287f3ff16746bdf9b9befb1bef269261f6079af9ff22a2": { "4cfca9fae37346c2e6b247de1cc83bb1880d5d141f5ad266dea6ae52b8cce258": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.482Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.440Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.489Z" } } }, "870cee0b248ecbcf72715dfd0eeb85ec9af5efaca8d3edcf0fe8c5264910fd76": { "31443088162bd3a031a32984a7f4bfd930cc979d324a47439b26f35ddd40c4c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.491Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.495Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.486Z" } } }, "87cdbf09a8306f33d341ac3e84a3332c186b170f3eaade4500b0517c76c52c33": { "27bd6d01dce2d6441ee156267183789fdfad03cbf3cae1fe51042763a3ae5190": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.483Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.481Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.465Z" } } }, "03d4f9de31c6bf8adc70ca8cc91ea13e8e9e9c9401061a886ff406f2ee77507e": { "31a8fa488c7303d5b196d590f58b9ffddcbbaf82dd7d661a3d06b19f60b7ddc5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.470Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.507Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.511Z" } } }, "185920906ded891a9d2e00cce1434c3336837203f6a4afa9c0afd1752f259e14": { "fb5ace8ecf41cd7a84a0650f9d96ead8a0c11e0b73eb701d4b8a50861ed41f3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.491Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.476Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.481Z" } } }, "3b5b38cf7b3fbbf741ef360cdeaf09b58c18acb3ff66337f95d902be5f6db59c": { "b37e005c51f403fc9b37bb6c5b5edef44101e2fc840f20186238b36701cc8e6f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.490Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.494Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.481Z" } } }, "3bc42dea80614a09ae6a300caa882b3109109bbf2c1ff3e4a3cad15872847cb5": { "90eb1bd6cd2087520e2d3b6a42056c3549761f9a48d001c400844b96b08b2d5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.490Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.491Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.488Z" } } }, "4864254e07b5f2ba04547ffdc42c9fa734db92774140cb47efb6c312ff52493e": { "6dadcbfab042a7bcad0c4076a815d1b10666957ab124f50642fb026d185c6859": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.446Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.480Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.492Z" } } }, "4b4055e2a3996b0cc1db8bb8b7f1a428a61fcab906f4eb7fc9e8525523570823": { "fe2aceb75f41309c99fba4ee2a1fcbdba1e53d1591a97e9fee22b69867854012": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.506Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.513Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.512Z" } } }, "4c57ae2a858123d1bbd05031233c5f830692e6ff38484e60425dc1e644619e86": { "ac07bacf3135df09429ba59c3085014c51cd2dd6322c81c9cf515a50ac42020d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.503Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.502Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.502Z" } } }, "5f4dd4a5e3b9c2038ce5d97add1c57db4cab04802675890f9a71c7e24d65298e": { "54f6ee288acad5771ea6bb244846d3f7f6f97153a3e95cef843610f79d82f51f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.482Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.475Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.486Z" } } }, "8c9ac06d9f96470f385b45eb7382ea57d23824bef86ddd9dcd04eb31af945385": { "8fd53472854410898a96195caacb583e709b2c67f304949a81fcdc9a6ab77a22": { "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.489Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.488Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.494Z" } } }, "96f086ac06293e9e587823d8e326b7bdd10741ec2cca41ecf709e6dfda01a137": { "8cde4367a08c4c85a443e691e36a03de277bcadbc7b5b8042f83da242fb60262": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.480Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.486Z" } } }, "98763ad1765b4f7ce59ab7c28c03d9f16eb7ba20340f1fd72f141425b73dfcda": { "2b4ac034aba018ed0128e4b4b5e46817e96795dc002eb687680ef694d17118a7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.461Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.465Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.462Z" } } }, "a1f67d04d8c6c016319715cd37f1aaa7fea045040cd960873db250061b59677d": { "c042f748c77a461dd754ffe542382a34bd504df511e412aaa671006d2a6ce920": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.461Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.462Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.461Z" } } }, "b6e6ba59aea8d42356d10f15f3e251c9ecdf84b70f6b284cc535f8f2715be871": { "78c8f7d218a9c211659cb2bb3308ce5d14d1718fcdc5e47d42d5c5f55050e6f9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.174Z" + "updatedAt": "2025-11-29T08:14:50.466Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.463Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.463Z" } } }, "b96f31274279db19ee455ef4a211f35232718d535097413acc9e87b2c16cdee5": { "d1a30df1933d77a7366535efca514780aa4f237e66085e619643f85b025ea495": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.479Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.487Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.446Z" } } }, "be5bae686c5d8c7787f030404d9391d2b796570ebe3949ebccadac637ae696ad": { "aa76d4c663800697eb6cffaf9162ddacf8d4a6e9e85ae8732672b1aa668497b2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.464Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.458Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.173Z" + "updatedAt": "2025-11-29T08:14:50.462Z" } } }, "c61d725ce51260e373784d5a559f17b1c985d873f35f4f40d34e5dc3c9d30214": { "164319294d8a4a2d8ae935edd6e5941fde821158fce1cb0fdc3c94aa7eba994f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.460Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.441Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.459Z" } } }, "c9a3c995b2d1f1da16df65c84fc5fcd7d61a80112b46a37925da4d4c5cdfec2c": { "fe45037d34e9b052151f9190e1da1d3bf5cd89744c552cf345b160f37129f8f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.495Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.493Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.495Z" } } }, "e87d7bb771e6e969df1f4f17a2cea74b1703104f920ba5110ee4c2bc95819b7f": { "c626b9222d67c0a16c11e25def509ff96d4a34afadbccdcc1676284d3fb3c55c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.059Z" + "updatedAt": "2025-11-29T08:14:50.442Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.458Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.459Z" } } }, "f366eb4cbbf4ae87e0ea8145cfd5006bd57589104335fc046ede417d016c390d": { "e26bd50b67b6a44512d1f83c42aa88dd3b0ee7eea44771e913a93704b405e585": { "jp": { - "updatedAt": "2025-11-26T07:24:19.061Z" + "updatedAt": "2025-11-29T08:14:50.456Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.460Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.062Z" + "updatedAt": "2025-11-29T08:14:50.457Z" } } }, "0dec45ecddb0d4b9ff3311f5a670eaeb053be15ec02969e2e3cc776a6771ff5c": { "77a1b67ca7c88505859a9611495e54062c95a3d5051d05c9862ba6120252576d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.523Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.527Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.520Z" } } }, "1345e1194d63be447e8235ac3810d70f7853efd69e98e071d82ffea7cffd7a32": { "40371c6acad0719623ab143c6991d629d5eeef18fd54755245385719989fae91": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.508Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.505Z" } } }, "1784873802e351d4cbfd164226e7d919a480bb1d6312139fa09de23c15d16a8b": { "8742e923d01dd09dc7d8778dca915632a84b942a268948d3212bfca23e4e87e2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.503Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.508Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.505Z" } } }, "1976a270e928ec95aa014d1eb571385ad93c7acfac83fd172543fcf63d413493": { "28f4800b7936b39a171e2fb6c8317b4c9829a963ca30e0d8f2cb33e3e1dba27f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.524Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.520Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.496Z" } } }, "19d053d8db1755b3bac1323b8dc5bdf881a37b3de8c55e8397cfd48c70b492c7": { "a35e75c19a0f228c55c8e74114787fa88e13457d020f241643da1e080c35d9ae": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.513Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.503Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.473Z" } } }, "1de644041acf945417d447dae1559f7cba704ddb7f42f4989d75f53b3432bcc7": { "0d354a4bc3cf5327de48753ad84ff21b24119bc6b87f048f6f36a86e9a56461f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.506Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.505Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.504Z" } } }, "21df29d894f5394f8a93a1ff43ddfcea466286f726a703a29d7f5ad5f777ca4f": { "f9004a0faa2530c5a49f802aa2e8e063889d07b4b5779757539ed40941914621": { "jp": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.518Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.518Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.519Z" } } }, "22ff9a2316c586c12132ac52204a80c3282c99ea70504b739a00fc4e769b9090": { "9b6474c5f66a5e775df7e704ab5583bc77d7b503d80449e41bcb0fdca582d72f": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.515Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.499Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.516Z" } } }, "642f1cdcfe6481dcca55bd2f485397c27b2cb519506bae85d0903d1022a9a534": { "d58e38a4b38f0454d5c08c7d2887270f277c732f8c21e5a62fa24568ae4fc2a9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.511Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.473Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.512Z" } } }, "76e148edd42e2339581c7f24e0a25ab51ee37d3723b355157641afd3cf2a92ac": { "96f0f82692a94d11ec4bd22df9bf9c367d91f54e7f111247f17715678d4f8a7c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.487Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.479Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.481Z" } } }, "877ff646acb9d8b60cc0a8c397ec6865271899314d2f8d8c3bc6835ea0a51d87": { "cf8035df5e02498f9892ec6d01d716e4e210be81d6a338a2a670b395f2d05b5f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.484Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.479Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.478Z" } } }, "ba2b228d4949b83493253e6cce36fa61e4aab29868007f5c4dea719bd97fe4e3": { "bb371d742e1c3d8bcdd77214bf030643a0331f8f48e7727cbd847a8a32b85ac5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.489Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.475Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.446Z" } } }, "c88c05312ecb48fece611ecb971d8437aee67aab577a01d65950c88e236c100a": { "d28f12f9ff28bee751ec769892ca255d368223c72a14abe462c9cf6ad965a8cc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.509Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.513Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.513Z" } } }, "d517690990eb5a5034e28f3526bde41c42990306742079c31f30f4ed4524ed91": { "9c79376ce670521bff71e976361e6729afb8128c48c2bd62e07e55c58efa6cbc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.474Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.179Z" + "updatedAt": "2025-11-29T08:14:50.487Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.474Z" } } }, "e226489ddbcee1a5f588fea5844e21dcac309588b3ec1f6bbc9f7bfd26b0953b": { "5792c89f06fcaed31fc80316244e3ff2495629cc4d68214bf2ad0fc8b2cafcae": { "jp": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.474Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.475Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.477Z" } } }, "e3904a052cbf5a3387388c389ae010ddc49649dbbbff19900f769f6e6cbfa1ee": { "e3e518cc255f67640d601fecd3cfb11ea7e915ddf282acc6eabba8311aae5b22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.501Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.500Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.501Z" } } }, "e6ad4f2ee58b9c424f0cc4e12e443aa3bb9dfb641432accc87e403a8b0597b0b": { "d64cf4716347332440eb8c9bd7192e0eae84a3f3eb49ad6ba4155f87567e3861": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.502Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.492Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.180Z" + "updatedAt": "2025-11-29T08:14:50.493Z" } } }, "e8d810b58d2fc954739ecb8eae76ec7772a7459c01a08dd48ba208a5ab4b2b58": { "0d3df994d73dcce5dc7c4ae8f510488dca241f13863b2cb49c97f6056079afb1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.476Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.476Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.178Z" + "updatedAt": "2025-11-29T08:14:50.482Z" } } }, "ee906a548fde378c55bde17a104978853c964efcc0ac2037f2cc5f90ff301836": { "f49e9e3f91b64b3519c5cc4cdc59ffcf9a84b52eba96cc9a68e95e42dec254a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.499Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.499Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.500Z" } } }, "f17585a5d8e2bdd6a2ebea5f856955881ef4c473fd73048cf4f26e56bdcb5db2": { "9e7753f5e285750271319abb9baa46c784486772a2b4da88514c28c5141c5c81": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.516Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.471Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.516Z" } } }, "fdfddb9175ea6844a8f625eb6ff292798d8dda51dbc62ca44009000f3177a4c8": { "a1fbebb2555661587982370786b093295909d4be9fcca7e32ae5eff02acae18d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.177Z" + "updatedAt": "2025-11-29T08:14:50.478Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.176Z" + "updatedAt": "2025-11-29T08:14:50.476Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.060Z" + "updatedAt": "2025-11-29T08:14:50.445Z" } } }, "04fc2fc59d087b4841db1401316e4d1c9ac88f144242faabf25ec2e969a5215b": { "414e7c4dfb6cd3da8443de0d53c94c82fe3258fa5fdaf93915afe2a8ec3736d4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.533Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.534Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.521Z" } } }, "2fe2ff96c504c59daad55285eb365e9e69fcc5eddd301d8a0409670d1de5a9ac": { "79af085e05f9fd1374cba79aa1eea65a5fa7bcadf0fcbabfc3df348faf04e6e8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.524Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.533Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.525Z" } } }, "32c8d946bfccbad7f54bc00de27ceee1cc1719758ec7a678b9763d7236502014": { "6c958d1bfa513f4a8e0811e9c383ecdf775c2aa645e088ea7d02462f9209a69c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.524Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.521Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.521Z" } } }, "341eea9182cfeebd2c27c019d06a39d1fcf951c990bcd80fa61f11ffc6f9e196": { "aba92e4ddf93c8ac27c276aa33d276f9987cda30270a7b50881edac3ee8d0b71": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.526Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.498Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.497Z" } } }, "3fe31c561edbb5416b22ecceae952bb5b07567cc07d75cd64ad4a2caca7689f8": { "af620cd5ed38d2654712e19961c6712bdc7c780d345e73f17ae49396a20d6df0": { "jp": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.510Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.510Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.509Z" } } }, "4afdda2989ef4d77a80eb6666ee0e5fd90ac3afbba1e33f8e39a07be3bbd203f": { "6d99a0d2cef83d17f6510958c4402246edefbb9b9d564c2e37e017791950e3bd": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.523Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.527Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.525Z" } } }, "4ecdaa59771417d8a6341e9feb60dbd9c4d4fbb10361d6cf230a66334329d458": { "32e97893f5bdae1c411c78d8f927f38c3f5f53f548071542f0aaa587e832cecb": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.537Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.535Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.536Z" } } }, "5ed43729b9d1c584d6d2715ce2c8e0e8690a779f998a5295f954f2f562471776": { "1691e237ea64aacab998e397d87c92e5419d9695a9c24f1829f61653d169f1f3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.474Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.506Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.514Z" } } }, "6b19fbc50a3d75e95082802f1b3acf6a3fdda3ff18cd375f0468fb5136f2256d": { "3dcab33a3b2dc5934e1b739f426935f58ec2cc8e37d9a43754b1941d524c7eb7": { "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.553Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.549Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.552Z" } } }, "7043bd98baa35080107f5165fe9bbec5ef39eb9956052fa0c10ef9ac22039a33": { "e6b73b30c4502fd5f9cd04636be35210ae5ea65dc8343c3daaa83eba16905924": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.523Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.525Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.522Z" } } }, "73cc61c275b13e314a195a2bcdc4cbfb3fba91139f9fd1bffb19f48a659d4e6a": { "190e7c7b34bba92cb96c18d30898280711152aa225a02af84331070d834800de": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.530Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.522Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.526Z" } } }, "7478bdb164a78a0066fd05a6a86be0fa7a2ddd64b6f73b9baf2265c59d70f4c4": { "e97df2367ee337a5ad2b8ce514b44485caf7b24462a66eac4a3d178503301830": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.514Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.506Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.512Z" } } }, "789c0931dffcacd3c5e4bd954c1cc49f734d35378bd8d9f099bac0b7d7de0017": { "58519a4d43db394ea6d5c15ae1e4f7bfc823bcba6a23e04e1f1b0fc5aea36241": { "jp": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.536Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.536Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.534Z" } } }, "85409384bc3d4ff1f1449d76a33ced011be9773bdbf0758e6975a6dbd1ee1dae": { "1fee80d8af00c415d442c78b9ad825b9a0656bc47f1eb00d9ac9cec8430f1454": { "jp": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.507Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.512Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.510Z" } } }, "940bcfdd1a4ad18a6a6ccd9181dfd460e21675b41985028b535c556f22904357": { "8379073d04e59c3c4b33a28508240fa2ad889504e267a63230a17f0b31b60377": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.531Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.534Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.183Z" + "updatedAt": "2025-11-29T08:14:50.535Z" } } }, "ad44e0a653a277028da523b8bb2ede38b5fb8ae3edb129aec78609264961e45b": { "c58dfcddfe9b317538f8fc75e87174efab26fa62ab436b5d3a1921bdcdb71dcc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.496Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.507Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.509Z" } } }, "b0371f0c5ed81dd8c1a94c3d4fbb5068eda546a915ea97e900025b7967fdc506": { "1adc889763f86e0775ccdc2cb7db8ac95b53182b5f48d36f86a8daf7373c5e8a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.175Z" + "updatedAt": "2025-11-29T08:14:50.470Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.065Z" + "updatedAt": "2025-11-29T08:14:50.511Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.505Z" } } }, "c720ce0e77810fdc639cfe83c2df1fe9c3d97ef4dd59cba6540e1d9e354f6866": { "3f956529d37242046b0834f1c686e59dd0dda8c1b7de96710b47b1ab8e5544f6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.524Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.181Z" + "updatedAt": "2025-11-29T08:14:50.497Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.498Z" } } }, "dfd805b622edd8955d58dd44846aeefbda562b1c575f0740533a458f2478f495": { "c61769f8b34a280fa8e6d8215850f12fe517dd969c26c4527ce9543b9b4052d6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.504Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.064Z" + "updatedAt": "2025-11-29T08:14:50.508Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.063Z" + "updatedAt": "2025-11-29T08:14:50.504Z" } } }, "f7fa9ae5c1d4a87ba39f7e52c396a41963265a407116a9be68d7fbee6e43fa14": { "bfc41c969cf12203663097a7aab28d304963f4e8f2c4310d76f5d5efac423d0a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.515Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.515Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.066Z" + "updatedAt": "2025-11-29T08:14:50.514Z" } } }, "03b5ecbbf39334e6da0c384a22e5e44c1c2d4e7293956c81e85ebc5a1f9684da": { "a8ec8b1cfed8dd821d7646fedd89af692c1d5c39ff7e6c8263486a44277b6811": { "jp": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.550Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.554Z" } } }, "0b126951a3c780c939a55fe4567f097c8702408c235f214c5763699ad6daaca4": { "5b529866221693a79922a1408a19f5b678c1f0fe4b7ca31e7401ad0a4ce64dfa": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.561Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.570Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.568Z" } } }, "0eafecab32cbe234424b7ea9a0db39d81bfbd85c2d891597fa1309dac8735c8a": { "94efd6e0e379a3b02b71963dbf0699cd5c5ab603e5cbabbb278630c8bc3eed6e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.554Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.554Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.554Z" } } }, @@ -17613,395 +18878,406 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.187Z" } + }, + "21ab0993ec46252ab7b40a1b418b9c04325c81c889a8af72daa16bc54b1f51e6": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.519Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.519Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.538Z" + } } }, "22a6c0463fdb5f5bd56c1f342f979b7e0fbc638e39a22abae139379b580611b6": { "c126bede64139b7c6ab143d42c036651e266197fad3b70012de0b058cfc8a7b4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.567Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.562Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.566Z" } } }, "2f0ce2fe6b5d1318ca2c2c11f3ca3100561f2c3b056eac0c92885f76ad381df8": { "22f366f08d6beb4fd69cd03348a69d6ad0fa2634f22a96d663380fcc3e61900c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.547Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.550Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.551Z" } } }, "34bd47b9631a90da1872337df6289e0170c67b0cdd5f5773b7367e05d2dcfe48": { "7bea2cf57bd47e48dbaa0fb6eb99c5614d61a80b75f4b14d7d22036a5315b2a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.570Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.552Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.547Z" } } }, "3fae7c4513dfdc82bcd5d84b957baba453f6cf9cb2c3086a653e40e66ecab9e5": { "ebb4c00f401d9fc73b63d71739322aba770f129d6784c881ec5e9cd702ebc982": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.552Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.544Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.553Z" } } }, "8681a5dfe4cb1dc88d34f905cd6f0b880732c556d84f4c6c1a78c2a42a1e2e94": { "937c3315f8641ae220b02e6527a850efc428a4de748f9fc10c3b23118f915818": { "jp": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.550Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.549Z" } } }, "9679382c066536c0e977c5bada387315bb3174921875fc2375dab0f8ecb14a9b": { "775c06f4143e15814d67624ccd103ecbff901762e4be69292f9800d11986493a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.551Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.548Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.517Z" } } }, "9f914435087a98e271276ebb87f255c29380082ebf766e89899a246c457e4677": { "71530532e2635eadb067e7bfc1e67c37d37113e6474b6d00295249b91f5e556d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.526Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.526Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.528Z" } } }, "b5043154caba774e4d5afd58609e8705791d168d7b610c441a9f5eb0c01aebe8": { "8640bb0e91d0ce2469cf06735ac41d782b10893d26d5a5e4bdd88f4ddcf19c10": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.529Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.532Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.531Z" } } }, "b6b46b2ddce58f83297d4fd3e22a20c0689c8846b02b00d6c901ad29353143df": { "6526c7597b3e43dfe18fbc51f8dfea10476408a65acfc8c77d19c20114264de2": { "jp": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.522Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.528Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.524Z" } } }, "b760d26fdf8b09ae16032e0dbdd66a6e812e5b85cfc1a2dce387a41c031415a5": { "2a83ac2cbaf9b2ed36fecb623007bef63f6aaaf537e37429095c3057b999a156": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.529Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.522Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.497Z" } } }, "c94404af6396786f2d99e4b9e86fe62f37fba23be9fb0992cb4462421350617d": { "8e9c8e608b5e9c9eb4f01785fa62ca818e1a1957a5723d6cb412ed71f639a50b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.531Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.530Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.182Z" + "updatedAt": "2025-11-29T08:14:50.533Z" } } }, "cb7281a29c8577f9362237b726ab73efa4133f66aa1f532e94603029a6608325": { "e7e9ff403010f7419e6fe70d3329c7fb4d95f62d59d52fda8025ee90af8ad89c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.532Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.068Z" + "updatedAt": "2025-11-29T08:14:50.520Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.527Z" } } }, "cdf00c31e8da5ad17f2b40732cf7e7baf65150deaf7488eac143f7201d1dfb3e": { "3c8db57986756c0b913b89d2204dd19e77508a68267dc6a6d737df290161badc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.070Z" + "updatedAt": "2025-11-29T08:14:50.529Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.523Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.069Z" + "updatedAt": "2025-11-29T08:14:50.525Z" } } }, "d28f5c5276140aee0909af043384a73dc6d1e54e307092d06f03528d2b1110ec": { "c4f358e96fb5460080efb17e46f53d378939fef04b5fcad4e3e2c5a580a10128": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.552Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.550Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.548Z" } } }, "04a08061427f75ae80f6c5be1bc33f6ed46cb17ac49c325b49ad3ed082b48721": { "8c2b821e3c5410720085eae977687f3169e4a39395d1aed6e45d331e39dc20b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.575Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.579Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.584Z" } } }, "0f4329370fc5999889692e3e2374c65bf3f4dd5e8903e64957d654e1c712ee1e": { "87fcfd05b5f0e870d641b6800c171abf3d47bc7484fb7612f4151d70caaaee3c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.555Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.587Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.586Z" } } }, "100c02e77cc38427381d9c58741ebe9d9d8964c870d4cbb14624da2f386e6691": { "2d845a508a5f777e5f61b8dae330312410e821c6f517150d000bebfbc18e03df": { "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.586Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.582Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.556Z" } } }, "1680a9db2b149a398008cc3048b13dba799f74c5bfd3549470992ac1fdd41eea": { "2b8b81210547bd248aa80daed1df50ad236049f83eec7fed484a31e64906811f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.564Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.537Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.562Z" } } }, "1b89e2e1ad09ff845cbc6d24f7a759d61540214cea8a5c79bc2e68f266ebcbba": { "9d8c96f15a9c91e38b4c55448e86a206752b8e56970d31964de0de00beac4133": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.562Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.561Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.563Z" } } }, "25332a58ba046cb340c206ff61639fed4457a1aad56ffaa7b53917205f1bb761": { "ca54f12c897481de5b60e4f4170eccc7217a2e000c56dcbfd023eac144ae760c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.557Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.563Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.567Z" } } }, "45912b7cfa3611f18ba43d31b4bf270d57e4bcee3fdf2ac5e2ff6ded3b672601": { "25bd45fdbb02d82cf7af7820d3acc7ccf1701c6afe3cfae317a6b4ac9289a67d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.588Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.587Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.586Z" } } }, "5a251aa88d6ebebbfbc12913926476ff0da32b3862d705b6ecb28ea2c559b45f": { "b32b63bf76eb2d854a947bc3926ad7d875cc3ed3eeec677de22a5a760014a32d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.564Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.565Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.566Z" } } }, "696be7be6ffadd8471bfb91d7ba6ec45956dc7e449f3fc81dbaa6fa67d66b3be": { "8aa635a63a82ddcda9a254960f313fdd8f129e472d9fe8d3e6dc10d1b38c37ad": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.546Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.554Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.549Z" } } }, "79e7241d6edd82b0dc1989f7d3211668c2f24f997b5fb74c55c6db437b7da25e": { "be2734886fbef14228e09151309f47d77c7dc82d6b8d68b9d3f8b6dedeaa8944": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.547Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.545Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.551Z" } } }, "7aca79eee9aaf67fab4127f69bfa7778f63bc7a7f6b384bee18e809c672f7b49": { "55febc4e35972c34cb1792867e0fc3cfea4841faadf9de0e30f4502a613b8363": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.571Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.570Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.559Z" } } }, "92f16152dca7a77dde912f0a5b22ce16b22c2dc499873bbedb28221aa56e8739": { "f3fafaf3dde2049ce02a32a17ef225150db00d0562e505ad5431a06ed8974f2b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.559Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.544Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.567Z" } } }, "972010f567fed406e9bc7e9fa61c22b7128c4779998665424ab71c46338d1f3e": { "ae02d48d7b29f026ead3f4af508a4e2b3a97657cb5051628dcbbee9111248f7f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.552Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.551Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.555Z" } } }, "a15ab08919f6acfa97670cff9afca686c2351120dfd9d4f8deb2b45ddb99aa0a": { "d344fdb9b77fe64b9863b88b7aea7e3a8e4c7d7db3d3d7a7d7584b626a3c8054": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.563Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.565Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.559Z" } } }, "bb1dea393979951d316dea0be45235c346fe0c28cfe6756a5876f4804290c7e3": { "d3ecf8e3f0da56d9ba8034a953040427b08dc7fa1c165a2173308415b8a6d17e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.563Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.562Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.545Z" } } }, "cdb1f009589e1e0b485965e6b6f62f110d284ec9f225d0eb9717cf9f54e381c0": { "694473bb486e1e21cb8814dc53f5204436b1e5ffbd3f851984bd46f00c011179": { "jp": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.517Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.067Z" + "updatedAt": "2025-11-29T08:14:50.517Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.551Z" } } }, @@ -18016,1435 +19292,1446 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.188Z" } + }, + "7f17768c7754fe62726af95719e525e92c0e64ec5573a51db338fa863d1513be": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.519Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.538Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.539Z" + } } }, "d7c9bac812afb3a149a06c61bd4d64e33efbdacc006619f813e625307caa403f": { "bdd5ad8ff2c6c4cbf81696dcd7cf80196be279d10a61a61d0f45caee15d90df1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.563Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.568Z" } } }, "dd8bec416e1a990e1a7ef46ce2f7761b51432155f4c149641fdc484fffcbe786": { "e43ff80310727083fa06482849132d96578ddd46a8478a49dd3bf42b62882609": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.547Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.565Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.566Z" } } }, "de693811d680fc3f30e32c9bc40614fb35f73f55847f45a16264e614a65d74cd": { "8fa72ae7500048bac519db43150657d9500e969b9167f548ec14e8f2a73052c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.188Z" + "updatedAt": "2025-11-29T08:14:50.550Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.553Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.189Z" + "updatedAt": "2025-11-29T08:14:50.553Z" } } }, "f05e54b97f0cc26e7e6d19993081fe3b3e87410932334968bcda276a9ed28bd3": { "1d9ae46b239c5f237c2f10a2d4e4c6dbc9261c9c864accb4c80b847fe59481d8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.559Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.557Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.565Z" } } }, "fe5b39e56c19c291226f7e3197f67720f7eec98c8343fadf7b1a283589869ee7": { "afa11621c4420fe8e64e6a032e92ea848928d0c35428ff0c7a1b50f7215c04fe": { "jp": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.548Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.187Z" + "updatedAt": "2025-11-29T08:14:50.549Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.186Z" + "updatedAt": "2025-11-29T08:14:50.545Z" } } }, "010d68e65065006bb03ec5afd6da3fb00d5d932dc58d86d356a1fb32041700a1": { "097920bd8ae55b0c4c40422f164718639bf789af17784fc7d268a39285332660": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.578Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.585Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.577Z" } } }, "194312689f754af1eadafa36fb316871d927e7555a7e9237115b13fdf9c16217": { "efdd19891bd36c4b5ee32e3469c4609b62a971eec1305634c7e49ed5d594e5f0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.582Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.580Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.587Z" } } }, "1d9872faa89c7d85b9aedea5b9a72b7f79022036a883f0d76368ba0aab461711": { "70eda1446c7a201ec8f6c37abb74c39a9535a96ae3e057af6538915558876b9a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.573Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.580Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.583Z" } } }, "20fbec5fbf3b5f7168ad991d57410b2a6e132fb9884af790cd2c4a29f361d02f": { "36ab0d9536cb78b918f577f351ad01da73a11122ce416a9654035e7dd9a193bd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.599Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.592Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.604Z" } } }, "286853d39a677e8828ecbe663218f27fedd5bf2bf0e04f6a0845b378f6e8eb8f": { "b384e9d652969f7c44b75186494dd5743f6f7d29a2d07cdc6516f906170b8ecf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.584Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.575Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.556Z" } } }, "31135bad715065dcea06e31337e3a5dd947f27dc411676ba95164d339409a83d": { "763ca58dfeaadfb6457a37642666f8a6557e78cf6969b41e8b1c31735f7e55f1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.603Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.604Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.600Z" } } }, "3d5ae5ca94ad055105e113940b4e5f4f01c26351d5e0aa85b01fb3569699f7c7": { "db7ea4892aba1694aea64f46778e44e4d3a93c6f1d8d5290b4d72c844116181b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.584Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.583Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.576Z" } } }, "42c6ee1d7586b75ddf294b270cd91e6cbfc04990b03c458263060339691f65f0": { "e28070dd3b8f9c8e1de1f84e6213088ded4997089a0463fdced52aa0d7126bee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.598Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.599Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.603Z" } } }, "957a8d1238fb98455672f68cf73445d00c58150afae706f656904ea7f56bbef7": { "438d8f6bebdf4c4f748f67bb045a037db4fe70bfbe607e05bf05fab5e60702e8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.575Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.580Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.584Z" } } }, "bddea4d6e2b142218cf0aa18075b105f560306487a43f98ae93666cc5b0a2088": { "d82b30f533151c915ffd2fccf00cb93c7247a81a9af41c32c0b6ee0a941f1dc4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.545Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.569Z" } } }, "bf43a73f5fb45ab9aa1813ec5b3c6567e2f43085622a3981fc47bbafb9f28c10": { "e5f80b1293069b81103b1bd7abde9c4afd1e877bec64781bf8b20adfa5b92acd": { "jp": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.558Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.560Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.184Z" + "updatedAt": "2025-11-29T08:14:50.537Z" } } }, "c2092e34e0d63b8d13f5c437a2c60457a006bad8bb89baf8c2cc3dceafc6ec29": { "afa4682df8ae8c2d39481ae157b1d008ea8cf2cf75aa79ffcfdf3cacb4d9b0be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.561Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.558Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.560Z" } } }, "cf7f50d7a1e362e6ebac5f8205b53d0c8eb6dd0efeecc010f23b8d8f09ea8f80": { "b7f62ebe9c2d110ae4ae2cca482b48cb6a82bf22cf7a6a11933cd85ee6309d22": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.559Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.560Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.560Z" } } }, "d1838a9b36c0c0fbc1be851ae978af65ba7e34ab07c37daf5e5c0c741129fd76": { "14af3666e0c05efc3ffcab87b38768b94b93945123edbdb09cb8537e7a7d07b0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.562Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.569Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.564Z" } } }, "d488e5566dd6bf95742db0d7525010310bd38f5971c4a87992a3ec793feba8bf": { "5ba7a81bc990b2456dc8374342d01a7253db45b5183ee93be9b51553586efb4f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.582Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.583Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.574Z" } } }, "dbd27b188ad3cd04691439c723e924796170d0bfdf59a9e9b53d90caca0178bd": { "80b5c91060724e755120c034531a62ece1e13c4c261ac38e2e448b4e2d0e61c2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.587Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.583Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.587Z" } } }, "df4069454374e8aa9593f9687f16b9e3b26d64e2b0082ac22a7123faaef82740": { "e7ed1c4a6adc17da8ad5806d7ebfbb340ba0839bd13951ceea09267bd14c0a6b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.578Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.586Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.585Z" } } }, "e1f18ff34031035a08fe64318b680c893d2d37fb3ac9d30c908d0671a1180f50": { "85e7c92ceca8e1da3949120488020e40a9d10af04a565222bb41223f27a16de2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.582Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.580Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.577Z" } } }, "e4102128c26bcb3f9ad172af76f46d964de749c24c132d5348f9ee3e3de5951e": { "9f2615fd10d6b26b0f5f878a17f58c2100fb6bca45e41b0b5783df222e6dc6e1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.191Z" + "updatedAt": "2025-11-29T08:14:50.560Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.558Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.192Z" + "updatedAt": "2025-11-29T08:14:50.561Z" } } }, "e6493689e0bffb010f12f340386981233dcc9a2f28df11fd9a6e6066d3c5ce8a": { "8de8a8317a3584199eab7b620cccbff20a6c44103452bed63f66cf645cda12ea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.570Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.571Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.568Z" } } }, "f1b73f2ce3c7b6d1ca6f0f28439acb8cc45586fb6f3d1fda35224a8483871689": { "84181ea71df19456b8c88cf67e1c18c054443ce40152a17b3fe3d33911ecc651": { "jp": { - "updatedAt": "2025-11-26T07:24:12.194Z" + "updatedAt": "2025-11-29T08:14:50.567Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.193Z" + "updatedAt": "2025-11-29T08:14:50.564Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.557Z" } } }, "0060f21968d741d1a0f39b19ac2622ebb5065bdb709b03e138eef82e28e31244": { "2670f637399d04628da2e0f038d37565f781605423d4d054185eb0cd33613948": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.590Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.597Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.593Z" } } }, "1e131dfad9800937839c4d2f0e5ef58daa6a99e44ee4ff5ea4e66de6069c7c37": { "f76c1f685c5d14375dafd9a42aa84e6f31aeb5b84b0d8c24a2915f02c875d4ca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.613Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.624Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.629Z" } } }, "2149ec9c3299895bf0097e125705ba36a1e04efee5f43e59c08371caad0cfd45": { "349711e0368c3473e04141d6855c62a92897b88020143c2fd44659089f128368": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.630Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.630Z" } } }, "2a714f7169c51c1804757b5577385bc512ba198c41b0cd228e98a66dc148abb9": { "47388640fbbd48eba401a20cf2754eced76dbed9147e6841f469e2f4acc14075": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.605Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.602Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.596Z" } } }, "3f24f2c556bcea3bd4a8da649d898ac0d1aa590efbf76127ecbd252c8df9b55c": { "87fc99663ddeaf7b1d38d03a534b4d0b7cbb70edc9c3b460d5735be114f9f413": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.589Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.594Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.589Z" } } }, "42ee6b1cf2d60dae66ca7799b6e3c96a470d6fdbdff801031e35cb9e1891dfdc": { "ab655d464095f3f0a801879f7e0058f71ddf7741b59f1ac855f58f9f7d807344": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.579Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.585Z" } } }, "46e9f56a57a3931558fcf69333139681d05b4c2f69040e2cfe7a939c976963f3": { "e1fe2166283accd68531dcb58d1682b96cdfd9ca452ab7df14ceb9a7623b7419": { "jp": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.602Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.606Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.598Z" } } }, "46ff568b059cec990fbf679bc4bed642abea08d09f7bafd4747a7036515b95cc": { "714391bd24db523bc05255d05254efcc0766f0f4b43e9f23aaaa7548eef953df": { "jp": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.586Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.581Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.581Z" } } }, "4fbdb5b1520dff0a17e0429f575aa6011097f81752684475262c7ae6aa200bed": { "1ecda987c93d49e1fca1c7c93d39044137cd955db9a36fbd10169f0b85cbdbe1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.596Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.601Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.573Z" } } }, "5083281bd3b547bf9df36adfb2bfba73c9e0cc795d0090fcfa111ce30996f661": { "b09f8b5ff58806fe3abfa9da3b343ccfd7b8e980a6c46bd43dc32927ebac6ce0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.592Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.591Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.606Z" } } }, "5b010922cc17b528fce9cb609955f868e53ad71f5f8622066d24f7b3953f893a": { "83759792792ece10deacdd4a65c5c3b089a7e420df7df362574464fe94fb9408": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.616Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.617Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.628Z" } } }, "5c4315a7496585196dea68631d46489e99dab1c8daac61b452a0c580a509d21d": { "4c3fab4892c9a5c579a3017bb4cbe36c271aad9734d4760fecd5bc4ac75d16d6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.593Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.592Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.596Z" } } }, "857a5c3ed29e79d55112d1802865f308f93fcc1035cbad65451f1392ced56b55": { "daf1366f4d86b97aac48da95d72257524192b5104b5dcfd34230427de3762a51": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.600Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.595Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.597Z" } } }, "8677ca6f754c9510b46dc0569151e8695270e1ddc3a7791067d3b1b9e5ed0ce4": { "daef99c2eee6c12072def84a2de12f54a7398d20df2b000023b0e91f2100e934": { "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.598Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.593Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.572Z" } } }, "9056916609446b5b12baca0332da8e5e8ad117eb3017488e4c5391bf09af1c65": { "5c1ac19a6dd8304196f8b5c3c4538997259c7d50017642a246b97a60197a70c3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.579Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.584Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.198Z" + "updatedAt": "2025-11-29T08:14:50.583Z" } } }, "93878162d293d38a3f960218a0ee8b1904f199878f15fb0a11f80cc5c6b78ae4": { "38c7da17603cc8d822478a774e4a0851139aaaf988b5e6ac6aebd7c75546c08b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.575Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.555Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.581Z" } } }, "9dd17b4dded970a85df00496de13a74873211a7c3eabb2bfaf1670710eaff639": { "3c77cf690b82a05ac07374c03da339b16bb18f1f69cfa9c51ba296c56cc2f48f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.592Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.605Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.590Z" } } }, "c9c4898b83cd686a39de5d1507a5f2308fdf824b67d0f19322fe25b8230ae68e": { "81003853e9247deae604d51fc5acc18e581a4e0c4f0d79dae6b9207ceefe7142": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.605Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.605Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.603Z" } } }, "dc429afc1c845ad436d31b61fb908e473d3a84f5a8919f5d78c6cc647e6e44b7": { "f94a5951c5c6355f3214aef3392f0e31f245f1c2a14bce98a45d190388085326": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.573Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.578Z" } } }, "e8b753d96adf0305cf90b9e579ac4cf927e2e7f187ad62582b9b9a11bab53b3c": { "d6af628ddd5106feb87f50888fafc6fb21ea322d5d658688b385daaa6e2bbc05": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.576Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.190Z" + "updatedAt": "2025-11-29T08:14:50.556Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.199Z" + "updatedAt": "2025-11-29T08:14:50.585Z" } } }, "eaa9435dae8d90063d0ef13fb0d0245e00f3c444e99fd608251e1fbdb283ad76": { "5671b5319cbc284bc1f4dff7b698d72202dcbb66b153aa004c508aa68e5dff04": { "jp": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.574Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.197Z" + "updatedAt": "2025-11-29T08:14:50.581Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.196Z" + "updatedAt": "2025-11-29T08:14:50.577Z" } } }, "0045741a471f4dac9a3db4c43669d28583bac040167b1d39d7e25215fcda5ccc": { "dab964b634db47350d340e0931ec7aea4b46dc1764c4d7c24c6cf164792b3f29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.637Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.640Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.641Z" } } }, "189388fe355c19cd463ff375adbd81bb8d731d323bbf7cf2cdbbc3058b2bd826": { "5ed3b23bcc3bc844b8a42267d9198f127c4ab515a87acd7da5858ed9dd6fe278": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.623Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.619Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.627Z" } } }, "23c47eb4902870785fffe1e4baa6e41d6084e1f924e6ae197c27e7b51f843750": { "052d52be77d868d3d26620fa34155f9eb31b5090d664d799d412457b60c3f050": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.616Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.618Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.628Z" } } }, "242658032c19f8878ea27fde8bfaf1c2d950073ef6e50d896370f00b777e974b": { "9dced94c1aa74f4a1989dad0844123eff9d336fc99be750b0bd645446ef2190c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.635Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.611Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.639Z" } } }, "302b0ecec3c1a1792dd0c359652c37057d430e76b3e96aa7c8afde8a7172dc09": { "3c7b42d588a09f60f2e03cc7401555f547ab89b4421ae45faee2a50a6b0b0401": { "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.649Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.639Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.644Z" } } }, "52bc7e8ec1f25b547908a73830b6d7664f88e3007b6ea89191268490da4b6c29": { "e4376d6532a2d24e4f86f129429881de208f3ea0ab1bcb5f5e31cb841a06df0e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.623Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.618Z" } } }, "55d7240c880120e92dc6163e0ae953ba2e5f00fe1352161637e7b7057888a3b6": { "d8020d4cb0f5381e78c97181bfa0e7bd2ff6585f606db5db616fcb0afaff7589": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.637Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.643Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.642Z" } } }, "59b41159dfba51bfc26167978b1127378d106b8d443bfaa28a298294319587b0": { "c8e3b18d83b85dea1ed5df57b3bcb5d76702cc3807eb0d8ccc3a2a6bcd46acfc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.635Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.635Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.637Z" } } }, "5a412fdae8fb53a15204e66324bb2d0da4e638bc75ac56e67179382d206d7374": { "02f14c2f65f281503e41f11f04ee9f6cd6ab49c4babb7d84453226444e626ce3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.590Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.613Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.622Z" } } }, "65b791b7c4a125ca183cc9f15c013f5460cca336367cbe0b2dfc01f119a90d1c": { "1a1f03cbe833217e0e2c1ae7fd100d78ebbcc8c0657e571385e72c88889a8da5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.615Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.616Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.627Z" } } }, "6fbd798e9fc4be572840b3ebe3124e7c1982606aa96d7b42be53bd6c1ee9676b": { "123889af8c3d0c2ab264480c584493f0491363fd067fa94edea8459b1555318f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.620Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.623Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.626Z" } } }, "a44ac107c2f03ea1cfc68d15bea4e84005ab3111943ebc6245e22ba05bffe8e9": { "30eb0a47b3a70c9804063775a6d033975254804002f913220b776bebe7566da8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.591Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.601Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.594Z" } } }, "b8b5935e6157dbf3000442e0ae9da10c119186446dab9b0b6ba59ecd8e081b43": { "3aec0cecfebdb1bcc89b6b5e6d7edb63838928162cbed60f94e123b0001dc3e2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.628Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.610Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.606Z" } } }, "c2b6b4b09ba9a1b69a2623b9e76c0169f2800d8215a3a24ec9aaddb566e07410": { "a509a683d08d5f5fa0027e4566599afd99d8661f1932316929ed7b7f5f1434fc": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.573Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.591Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.602Z" } } }, "c78d724ce19757f519a89ae81413bdcf8c707c62709608c1fcd90f8f2ad2737c": { "ed98e153a80901d835f37a02ef176c4789e69c4833533e0096f7181d92ddda23": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.613Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.620Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.615Z" } } }, "ca734035b219f4714c9e6c2cdca7a1904792cff5ed4cbd21e39a0c5b2a486565": { "73b78bfc9381e1ef4959ec2997ac7ae0499ef6be647ea0c493a48b57261785b7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.610Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.597Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.600Z" } } }, "d7e629dfded6aa789e7b13dbe976a72e204135dfeb9119292f63ce16cd39473c": { "995d171ddfcf778e23a9288af9f2f3b5372f8ce14a4ce8feb377503b79703cf2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.621Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.625Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.620Z" } } }, "da9d4e8b0bdf930b4854e634849ad3b851aaff67143620d95a9ae1e5cb3a7b9a": { "bbba21070424707e5a6f8591bd4bfaa20069a36dd6b196fdc7050d7a1ab8486f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.195Z" + "updatedAt": "2025-11-29T08:14:50.572Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.204Z" + "updatedAt": "2025-11-29T08:14:50.604Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.591Z" } } }, "e774d95a2c81c53102c61249027c7f00d0f3179aabfad8f71a51ddceb6505a11": { "e0d72b4c4c836c1bd36aac8338da95ae7abce2d57528db5e7d5f1ed3d95b6f29": { "jp": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.622Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.588Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.626Z" } } }, "eaef488a67183c3737450e1c070243954054aca5bcd96f3b4148d73f6a7399fa": { "893797365249d93ec499eaffe4b1ed5f848af3451b59dc62b1c2c0828602a016": { "jp": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.601Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.201Z" + "updatedAt": "2025-11-29T08:14:50.590Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.595Z" } } }, "ec49a0cee949d263027a7b97accd10ea82850898c06f8611df19e985e58a554b": { "33e16cb7d3af2bae2f39127844a9524539563891c9e3db379b8d508c23f9b634": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.617Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.621Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.589Z" } } }, "ffb2e794247dc89ebed0e232b0ca7c0962e63c5651c684b4d99f74958eba032f": { "3e28ee25ce5b288bcfcc6aa247be220c6686ae678dc50aa107da3672ec9cea32": { "jp": { - "updatedAt": "2025-11-26T07:24:12.202Z" + "updatedAt": "2025-11-29T08:14:50.595Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.203Z" + "updatedAt": "2025-11-29T08:14:50.599Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.590Z" } } }, "10bf6a851bc722dc218ed84feeaf049930bd2d7b38be10d0175a4b45da4c9e3c": { "72a26e0ef3fe81a02e1eaba48c8ec2828431893b8e50ba8b3dd2152f58c16698": { "jp": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.650Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.649Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.636Z" } } }, "2ba4aedf1481fd714296b22477ae890f08dba4b0496e12c98e62fe2811b6431f": { "e6c19e03fd150258214beab57caf618b7ccc0baf4e6d85d9c67796cb3ea9fd44": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.669Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.667Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.647Z" } } }, "2cbf8ac76941d9ddeefe32e9f176ff03397d09339a8d40eb2cfc57efa00fc1d7": { "2d3d7395ba3898aa08ea4bb981e7bffd7607a25fc091046d7a6a359bc9c589ba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.644Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.648Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.645Z" } } }, "2cf9993a309ce837e0def1fde3b9ec81b984bdc367d668342cfcfe3647301013": { "f44de4bedc5c963bcfdfb8f911d7420b96d114fbac92a40412a2594ce4bc5180": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.643Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.652Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.644Z" } } }, "3682e2d45de97f6b173cd748b8b4d7583b7f1420f40557e91bf935dd09b009da": { "28eeefee37cae95ff6cae2142c3e8807b596db44875ceafb1b3e3c2b4f5b62be": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.645Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.638Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.649Z" } } }, "49403ebf7c98c9603a561ef10166db22cbd8708cc533f76c0feedc9aabdcf4ff": { "512f607384640e8f1cbaf19b2b517930edc16a84b9a618f37f91116a4393bef7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.669Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.669Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.670Z" } } }, "4c4a469c4038db0bd30d547c74475eb77e6b3c4d4eb98a9b5406301541d45581": { "32eae8f070a25e27b3cb7b763fb46241c3e69525a2c4d2ba527136f413a778a2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.641Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.634Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.643Z" } } }, "5e529ee6f1c6b44d742cab16c2436b0f98d61cee3d67b6c243eb91fc94e5747a": { "b5eaa7df44d170d16be268ccac271b07809b8f738fe7f6bc1658432e3f8af2ad": { "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.669Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.666Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.667Z" } } }, "69dc87a0a0efcdc9ce162824232e0caf45af3973a79857510730075407dab81b": { "f55102d7e2ca214c7f9f0866a2bb860df9999592d3a40c6d9b97a2ca5a47cf98": { "jp": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.648Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.646Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.651Z" } } }, "7cf646c7ec8330a693b4b1f30fc05c3ef68f7af5200b4c3d5be55f5e6c627d12": { "b392f20796bafccc3efe1e80f4e6ac3a7db083acc7209c5e540ddcfe853a6127": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.633Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.636Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.651Z" } } }, "8b692c2ad787a446b25292433cebf4bef12b92c8e1c334682420d14be45948e3": { "59296f60723eaca7cd5a35c2a97534cb75c9c73d8715867db0a0e547de415157": { "jp": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.644Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.636Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.647Z" } } }, "92ec8f6b08ecfb56cf3d8225b5aff3170cfbbd0aa5775ef3532b3a6f5090f16a": { "24d1012de894e965ee2332b480daaca127319bc8cedb17d9ff8c5d9d4b57de00": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.615Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.616Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.617Z" } } }, "9f34b6230075d04ee88d715b8efa4b4287ac5ef974d0bc4c4940ad96532f8fcc": { "8527ee18d786491e874ba6c6733def703ace3ed743538e924d577e8b8cf2ded0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.618Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.622Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.614Z" } } }, "9f6597744edd6252f669f69c58d2636f8aa9a6b09dbc8b995f9479c4221e22e7": { "308c3f9e814a2ad27043440f48438bae8864dd4493497ab0a517cc656aa82356": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.630Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.624Z" } } }, "ac52e240a096d2b15ce8bfe0c48a2efac10eda017b425c2339c5001cfcb72318": { "56334f7f1fa03f9b3a42096ca5749c43c65a9573954fa56e40e339606f36c1c8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.612Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.614Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.589Z" } } }, "ac7c945a9a70e136f7bf663953e5789b51065cda16bb4013fffa3f1f5633a518": { "79c8e3c46a6ede7e07368f66bfdc60525ced4d42f656a8f57a26ee701ec28b66": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.631Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.631Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.630Z" } } }, "c36157e661a0ed678a48034a7b5806bdd2feedb466d46088c035d8bde2fd79e9": { "4b9ecaa4510afe985e77b7c0bf367ca64dcfa7463bb738f45d328855c7efc166": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.612Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.633Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.647Z" } } }, "c3d15c85d4784a496cd8acb62a731024d5bb9915807be3522653ec7b1167d18a": { "608f13e19408e1adf4e6688ec8886b26bf677b304247727063c881c2d33f3968": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.629Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.207Z" + "updatedAt": "2025-11-29T08:14:50.619Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.628Z" } } }, "cd116d178423eaa55d4970d5d78d398dc1e5099ee13c6221d781e9ee5978b899": { "ec13b6563341c4b7d66f4d675ef48acbc1e40f169c0016ceecaeff7982621eca": { "jp": { - "updatedAt": "2025-11-26T07:24:12.210Z" + "updatedAt": "2025-11-29T08:14:50.628Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.208Z" + "updatedAt": "2025-11-29T08:14:50.622Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.209Z" + "updatedAt": "2025-11-29T08:14:50.627Z" } } }, "d0d17f6390066626b3cd9b1b5cf3bfbe37d88dad9a6142c1db99eeec90102fa3": { "f10f076ae99bcca2c49fc911b738e76676d074aa2444ae614ac526d5065f04f7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.638Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.641Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.634Z" } } }, "f12a63823b74d3b2b90d31871ee06bcf19ba66effba17bcc94c800ce464bb39c": { "5f9e4fad6300cfb262a29845e8e0aaa91d2938f09671d81c5ae2b2c69f9a6483": { "jp": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.588Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.200Z" + "updatedAt": "2025-11-29T08:14:50.588Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.206Z" + "updatedAt": "2025-11-29T08:14:50.614Z" } } }, "15e69bdeb4774e041a333e57689381522781cd859797d0c321068053bd1ac55d": { "ecfdec0409be257ba876146227e2e778ae5f272c3aa56e2fbc1cacb35dd43ca1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.664Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.665Z" } } }, "2441b704f1648bc3443c9b054ec8854f3764cbbd77801b8747d10f0c1380e055": { "8946d488f9c46e6c14fad461ca002a664b5a2d6561da01977d53a7c95d31e4bc": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.687Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.690Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.689Z" } } }, "253c517a16655bd1af2910bca26a946ec5b5257507a84e5c1083bc68edcbaaae": { "383175d865a3e8e5eeeec2ad520a6706a7fe906490a2365a6c124bbbd35fbaea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.655Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.655Z" } } }, "2c3512a703d975c2b75e7502a141cd8a3e8b086796e9dd5b92d66f1f2a58358c": { "f1c375550607f160ff41977c4e39aad3343f7094f427e196bc55d8e72c22aed3": { "jp": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.680Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.660Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.663Z" } } }, "371cb4852709d9ca0ffc244925c1336472d7b3607e49eb600409ac2634d29c9d": { "2c08ba9df01012e99f6db6d87ed3274138d3991bb7ef1df26cf943bbe938c83c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.676Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.683Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.680Z" } } }, "38065e7c3b022c9edd666529a176fb393cfb28490dd15161ec6ac71c2d9529db": { "35e6467692a1dada24e738d0c85e6530cad77f3c956b13d30d9734eec88985a5": { "jp": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.659Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.661Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.659Z" } } }, "3c1dbc013406b1c31a215c47a6b9edb7f3dcaf68974dc2c38989fd26dd392af4": { "54d4adf41787f75b127c52923ea0abbe3e269714267d20e9e3f8f38afabbaf56": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.631Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.632Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.633Z" } } }, "3d0840c01249868fda2bd1e95b3f042cdf2c618bd34004df654106ee3d7fe77b": { "abd6f88511214360a8b3d4a7acb1e68208916aae6edb5e22025418320d437381": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.690Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.688Z" } } }, "3eb17266fde17cf983c1426830939c4712a727fd7eeca3116f2fe348d7489f01": { "d7d5ceeef5f34571ef1e4827cc0966f80aabd85dc08e22be3a3583aa8cbe8a2f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.660Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.662Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.661Z" } } }, "6bf7c7b51f6adc00dec7d08e30d4d16d28e682b5d83a2a9112cfe37d49b6b1ad": { "3faae72ad8b1f70ba0b49e66e434c0ca46525d70f145c05758337bee07817ae9": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.638Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.647Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.212Z" + "updatedAt": "2025-11-29T08:14:50.637Z" } } }, "84bcc067be4c969ca78c33fa50f4efff4f2a2daacca3a415c5c86d0fceedd5ac": { "2eb8e19e71aa05266f701be373a387f43f2c6751db4a43fdf67169c2efcd862a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.650Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.642Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.214Z" + "updatedAt": "2025-11-29T08:14:50.642Z" } } }, "85d48d85dd722310026bcee5e22617e344f2aacd9f8e9ec67d816fdb2703a37e": { "92cdab1f6b712fe93f35828375006e26f4c9671ddb601b08780bfafa9a16e196": { "jp": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.645Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.638Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.651Z" } } }, "8d8defb12045ea6e4b617d20e5212582181c730d58236e675147eba18be53d95": { "c53f9e7ae5db8452601cd25c2b2d9ef7eb21620b4522dce992bc50fa2ca137a0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.657Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.666Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.659Z" } } }, "a5236951d982490ee0af310dad8356d6d6153f403e1ee58f4ce2f1c0eda6a81a": { "c1b636cd594663b0ead8b055a758d770ff99552ec72b5c80bc4f4e7f722236c1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.668Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.663Z" } } }, "d4c8c149a2085ffd9c567e330ccc163bc309990242e7b28d9b404761f935ba4e": { "37cd2110dc9673e6ecc3c129fd27e5e27a8e403857f4a2d17738870cab29a747": { "jp": { - "updatedAt": "2025-11-26T07:24:12.213Z" + "updatedAt": "2025-11-29T08:14:50.639Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.649Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.650Z" } } }, "d9be63b990bb973f2145b0fede5008f532e3efe16cc74b19670e7c30fb33cce3": { "6520ef784c8cb65030b31629babb751b59c90c4785704dd342ccc7196be05ee1": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.663Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.661Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.666Z" } } }, "eb49ba497d8db0f37c1298e8ea9f8be1b244b82d159157e8ede112df8f3c919d": { "4b16adf3d0e0aeab42ce3ab01c36acb9cff5de72d7b2802148d15353f359ea9b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.664Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.663Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.663Z" } } }, "ed2113745ac93661c6152589c4303163561a52fecfcb50853a532d0c4d3c4c8c": { "91a36f6307074f27f0253a1a697372b4dbbadd48aaa0cb2381adb6ffad7ec3ee": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.666Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.664Z" } } }, "f7ba33421a28aa3de7f23177b5e40153a4f0e0efc37a2106a3e8b5708fe45005": { "4211afcb557ca12ed79b2828ba3000b6bfc93501ef7266a7012e6f73ca63a27b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.662Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.667Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.668Z" } } }, "fae26c9194eff01a95214ca36a03f887f3e266e90a64a4b894ad55f02c179bb2": { "7386d025ae2748ca0b87ecef00be245390faaaae8fa265f80c33e3480d854a49": { "jp": { - "updatedAt": "2025-11-26T07:24:12.205Z" + "updatedAt": "2025-11-29T08:14:50.612Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.215Z" + "updatedAt": "2025-11-29T08:14:50.646Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.651Z" } } }, @@ -19459,837 +20746,848 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.213Z" } + }, + "ef588f2b6385c55726c920e57be588ac227d274976872debd444eae9c0c673b4": { + "ru": { + "updatedAt": "2025-11-29T08:14:50.610Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.611Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.611Z" + } } }, "04c615906de14bff138af4cdd85c3c07b4fc5433296761dca010e8ef60f78e93": { "91810a26e7bbbe9ffcd2f092006cc98930eec1fb41bd4802d4297bf1f45413c7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.673Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.687Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.678Z" } } }, "1580309aeb8bf89a02431ce4e3958695fd0114d89488a627aab1a37097044adc": { "a04bc210be5bcbbe776786b33eff75770784c182f110822abfb00ecf17ff032d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.689Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.683Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.687Z" } } }, "176150c0e3d077975a3bf364d1abf67e535d6c7aead2f176b61c34aca79abd59": { "844838ff96f065aabb06386cc366cf66f183135f983db2d969bbf61b47c89398": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.675Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.672Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.670Z" } } }, "1a55a8d8cd9d21c74eaa692dca8aac6491f16ba3aee28f43616128e2d9ef200b": { "da55650acb4be1e891fe2ae5f1756740a01821cd992f3a8ca4695951fa27e52c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.677Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.675Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.681Z" } } }, "1e61b3b890446ac615cfca4d43e26692a7bc7544426233b862918b5d3fb722da": { "68327a573af2128ef9f8b75c6d3764adaef0d6d6a2518cca36e25acebd3d72ff": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.685Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.685Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.682Z" } } }, "2365f342aa73537207eea12c5ea5e59b84982495f018fb65d762d8ced77d7432": { "303a2bb1adcbfc7e719c1aac71a6de6454f8a1ba771cf607483f97b277db1bd4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.672Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.670Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.679Z" } } }, "361b5b1d32de2ebb3e52e8460adeb4b22ec4bc8ca04ceb0e717fedc703a31195": { "10b62158d3216eb8065dd2ff7515e8754275c4c7f5c6d4eed8d2ede3b37286ee": { "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.703Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.704Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.704Z" } } }, "3e3f9cdd02598c16b281b93fb32c30b1be85298c6b705aa31bfbce0e5880e103": { "e9242354e112109aceb1f980cb5bd9997a81807b4b2b9ad51d2e395d6925d743": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.653Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.679Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.678Z" } } }, "47db68ab348b969e40c4783275dbc11e1b7c3f0d1e0f7993066d41cd80abc360": { "eb30b9830f751c6d73c63c4e71376e8e862a1b79d67ead319e3a93512cfb332c": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.688Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.686Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.686Z" } } }, "49e360371f0bc0d697298f4470438952e521fabefd1b9e98218955be3cdbbcc0": { "974e376db0d1f6bc3a3c2778b18c785b8cbb420855a07c1b3d0cfb100fdf6562": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.690Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.697Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.691Z" } } }, "58cd3f4391882ce670046b8d82826c3c127fcee3b6aa2afc15ff717cd3d10d71": { "5015c123581af2b4d332b12ea65e8e6ccfdf0a8a5c76d9fab3a9a30aedfe8767": { "jp": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.686Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.686Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.682Z" } } }, "5d6ff265e282770018f2a3801b1d623cdca059cd587edf9408ad75b7f0427f29": { "7bf23f00d17d99986e4f0927c2dad27c8d9b95293b0f84a3bd9420e9a2cd90c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.662Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.660Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.657Z" } } }, "92e00a40688842f014f868586a36e069a52b6ebff0afa9668aa0116030f149f7": { "507162d0c5f858cea0fe1b5f4cfb599166143072817567489682c950f1313b5a": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.656Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.658Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.632Z" } } }, "94305f7921348204002c5fceee250d8a329b22e97297f5de432297ca6b6ce190": { "68e6800c1c85abed9956b13cc6c1349b8178fe6cfb23ebcc8aa5475efd99f8e7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.654Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.687Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.684Z" } } }, "978146b52bf1385e45bd326ef044217c2dcdc8bb47040c12f8ac16274fa8addc": { "229b20a3b9f2e01d63cbf0aa22d459b44b4535cff9593d53b6edbfdd28847fdf": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.675Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.677Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.681Z" } } }, "b65057e512e1d5ba2b482da61eb41e96a0451b3633379d8bfcd74a74bc5c5255": { "d590e32dca83cbf697fbc724c2b52de9f53b427e55f5e82add0e7c98c670b72f": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.668Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.668Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.668Z" } } }, "bbc79010b259fcfbd187a6891a0f4fb7b780904c181f0266b6753f4d179bbd0b": { "9124cca07daf9271adc7984d01efad4c1a6d47441c45c6be540d3204e5502916": { "jp": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.654Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.655Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.632Z" } } }, "c04de4891f93a0ba91486fc9aaf76205c21818b034acf58a753695af7332b3ac": { "783554b75229a238156945270a3356288601a5016510ae7113ea4d4f746a89d9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.688Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.654Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.073Z" + "updatedAt": "2025-11-29T08:14:50.689Z" } } }, "c5ee15352746ad76714767dc88162427e77db4c02b35d0258b67bb1a35882ab6": { "1e07570b89f9d1753c7c6fa5c9dc7f96cd00626361968edca1ee15a898637fe7": { "jp": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.667Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.670Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.669Z" } } }, "c9f381cce8333661e63bd1e01d8c4f1774748ca4686351ffff148b88e9e703cb": { "e4a9139614a7f11d3b10e77e31631df6b358e364a358b51b7e9d35e161a62d0c": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.679Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.685Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.678Z" } } }, "decba6568d82bbae43bf10ae33288e0bb54460fab2d76fb910a5037c036d8b31": { "b3961ee327c6fafcf4999b1abd14b74444d3905528c75bc8bb8c2bfbefbe9765": { "jp": { - "updatedAt": "2025-11-26T07:24:12.211Z" + "updatedAt": "2025-11-29T08:14:50.632Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.218Z" + "updatedAt": "2025-11-29T08:14:50.657Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.656Z" } } }, "f8499afd2bca127eb328fcbbb1d86926a4b6ed99899c57bf912940e11e81fa53": { "57d37a6031f92bd82e315b49237fe134b84352ea376fc2fb6ae7f50d8a63cb03": { "jp": { - "updatedAt": "2025-11-26T07:24:12.220Z" + "updatedAt": "2025-11-29T08:14:50.665Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.221Z" + "updatedAt": "2025-11-29T08:14:50.666Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.219Z" + "updatedAt": "2025-11-29T08:14:50.662Z" } } }, "00801f2886d2097d3f3fd23c2495271df83abfb95d59a9c9a2b4a905b8ec2d19": { "20cf324bd963db14b9a1a4346dec4811329f6ebe733b3eeeaba7616399e4d20d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.725Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.724Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.729Z" } } }, "0d7f085589a701521498ae4f2032eff79402e3efaae1bf069e42f610cc1714dc": { "65b6c024a83d6653e55cb1503b9816b66a3ad761b629019961fe3f8f698afb45": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.693Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.721Z" } } }, "1b24b02c3b8b44ef65014e1185ac74c302c13f1cd510990f907cbfb6af75565c": { "153f09d0dc6e1710e949f8df69bcf6dddffcd2f29e7b48e271192abe56431443": { "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.717Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.715Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.718Z" } } }, "1d3ae6305b61a5daa4272a2fdf5bc89befcde6b3c3cd8ac506e835ebca98d2ce": { "7cfed78448288b1e3ce81098eb348b43d832571045d5f68b5c05727141c3c15b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.732Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.730Z" } } }, "221df8cc4bd4c59f72e569ef5c6a2072eeed57f90181a227e34cf111231768d7": { "c38114543f910f77d0865008910f7e9c6395ef18ca1ffab216e250ed274cc4f4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.725Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.720Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.715Z" } } }, "2dbf7fe23f006182359a9db8a0997fc25605a170bbf502414f10a4d0445f3741": { "a3d059702798e7975e6104e13702831f09dab10cf354c44b13f40788c8b697a6": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.721Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.727Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.728Z" } } }, "36a66d817a53f3419052a70bb1815a864c606b97c1626029b4822b58ad82c762": { "3d820438e1d508017cfc5d486b3974a03a6f0475286a479dfda2cf575d825e99": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.702Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.702Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.703Z" } } }, "424e2c03bd385b0d797e5742bd8f37c67a6d1d9878707ee374ab10fc13b79f63": { "a39308aed08887cbbf1b7ddcfcc47a901be42991586b7b0c15366672b1a8486a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.709Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.711Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.709Z" } } }, "43e8a84fbf33b51194a80d037248d79de4e1436f50520586eff76e3d3f2af304": { "f19d15b264b03da92de17398ccc6c09d43af2b4d24b0b7c5e1a05393cd4b3fa6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.706Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.707Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.706Z" } } }, "519d5b1a64a00744511c1f3e47df4f483237ba323bcad90f4c2eca4ce9a37794": { "f9c93f24237acc26028d821a685b28dcc71dc3b5ef28ed3f611cd0074fd7d695": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.671Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.674Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.071Z" + "updatedAt": "2025-11-29T08:14:50.684Z" } } }, "595165a4c673965a825c2516944ed6da341d1802ba4af0d1f8e1442aba248fa8": { "8396ae84019ca44433161f57c91a29f40404e3a589100e8cca8e8000206607f9": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.698Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.673Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.674Z" } } }, "7e455500c000c9cf2e608bee5ea8ceda40748f754e86eb2dfa6fb808fff46087": { "bad6198b79924e96476294bbd990cd527edc29dacccf3bc3408a2a70258e5f0b": { "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.705Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.705Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.705Z" } } }, "976d169b47215323ef4cab38c850345f280e34b651c35ee7a506d07e901ec587": { "91662735bc3f121c2f531adc960066dfb766691e7210f186029e52bc32f80b4a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.698Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.699Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.701Z" } } }, "a2d877584716bec8ddf5f64a0ba5fd7a0a6b67f9077bed82dda87ee72bfffb8c": { "8d6d45dafb5a931c179b3f202896d1e34592ec42eecee9e2f9c96e83bc4cc999": { "jp": { - "updatedAt": "2025-11-26T07:24:12.222Z" + "updatedAt": "2025-11-29T08:14:50.654Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.072Z" + "updatedAt": "2025-11-29T08:14:50.685Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.683Z" } } }, "a5c7b243af8ea45f4cac1779bcbf974f63ad2778759dea05635eca542de84b9b": { "d7c29ef5219d22555b84953c119240e3967ba43e9caba2c80886d14046eb7fc2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.670Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.691Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.691Z" } } }, "d20916d14ade0ee04f39675be5d395d4a057b6b2238ab20a85bf425d1e48c431": { "1ba41582c1e8ebc8a0609ed6a4c503280d425de63584ec900b123ce79c518b7b": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.680Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.216Z" + "updatedAt": "2025-11-29T08:14:50.652Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.217Z" + "updatedAt": "2025-11-29T08:14:50.653Z" } } }, "e4ba3f71170ffd976d7ad1047d155c73155719b1d252f0fe0608a02ffa3d64ca": { "a6ee74f4a5fa3c471abd0d72cdd9151b4614ba229d109564ac3a2e5c5454bd4e": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.691Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.673Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.706Z" } } }, "e7b858b48d1c9c70d32c523d9dc6357d0917ee69b16fa5c6a88fd2a2cfac0098": { "092cf9506a86a0643021a3bc1abcb0426387f5124df02aa60181da49a76114c0": { "jp": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.671Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.671Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.691Z" } } }, "eb1a1f01631b05bf1533ffd2c55c66414eb49c1741c154d4907afc8f73f7235f": { "9a41183439ccb685d921031462bb9652422322a842f20a13f989ee4825c98e54": { "jp": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.704Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.704Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.697Z" } } }, "ecc50ef743da07587f50e2e433c891d853c4145a43e14073bee65beca199ca9d": { "e3d9d895a670833c385d032550d1d2f2e8ecc66328713f84bde5f6eb645a9a70": { "jp": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.676Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.676Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.224Z" + "updatedAt": "2025-11-29T08:14:50.676Z" } } }, "f811cef1e60d3d76b1890136803c78a8a4f1f5c0702d5e269d8ea318cf5bc7b7": { "8ed2a0a54a6b4cc5249d9184642124cf15bfe670fcebd8151de225c2a95e77c4": { "jp": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.682Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.671Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.223Z" + "updatedAt": "2025-11-29T08:14:50.674Z" } } }, "037cf7beb5f9d2290c0e219686b1115e8e4b773c79f541f5c81f9a4989e58cd3": { "3f6353039db49376892bd891e326535ed8f03543ad08cc2ad5b7bbbe193ee94e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.719Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.724Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.722Z" } } }, "0a6b34520ca8168f8c366dbf6721239ffec9e0995481a49f17e32bfdf43182b3": { "d12d9428ec537b38678164b4a2d6a7eab105d1f3658778da83f05b64228fece8": { "jp": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.715Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.714Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.718Z" } } }, "391cd20c30f8013777a8a8300b0127fdc765340375b9fa4c319adee3b24ec843": { "c91f5ec1d83b0cec76d7a0b4857bf98e46315d814f9cad3887ee4296fdb30001": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.729Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.730Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.729Z" } } }, "4fb36325d48e506203d8d75bcf6b70879d8bb4bd5ac0aef7b03cf1d784b85934": { "e592ec6dc8b770289b11562b8d28fce8a2ed7c9589b8caa85832638eef552890": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.758Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.760Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.760Z" } } }, "54668b892baede02e5b6a5cbaf788773fafac8277e523ed65fc920f4ea6df2de": { "0163d4482566b616b6e411361068fbb4094a1c1d66cab5c5f906a2faf1fe96f8": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.758Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.696Z" } } }, "59d8ec79d616c3429926d7db76bd740cbaafbbb1efd8c22b46480f65f400d6ed": { "a215229132a79542224dba0890d25487c4b0a3cc5a0109d4622445912b1ad347": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.718Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.717Z" } } }, "5ad0090f8bb37d66ad4ec384fd8c183a6ce6d85bd5c293bdc484cc9f40bbfc3d": { "fa3251d9fbc086f42e5d133962432d1e0e3306745b593aa2bc755f7b16f5bfa2": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.722Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.720Z" } } }, "67deff08df6c97036b3da071e7956e16555880aeb53c7d8ac63d1316e5f89993": { "8b19006f70430697684ec4194432408cb6d68b05965376bdeba185e83774be1d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.720Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.719Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.080Z" + "updatedAt": "2025-11-29T08:14:50.714Z" } } }, "72054126de2c0ba649ef4842d3a88e42bc8fbabd3ec579abd629308399d48364": { "f53eec1c24f726e22bbfdd53d757a2f052bbadb6e11837183028dab74cbef510": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.700Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.701Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.696Z" } } }, "79354c33a23d98f8b63fe6e965aef5d6b18cdc962e36d20a3b148d8cf335f86c": { "a1b7db6e0aac3869ff670ca64a57cc2cb592944192a99aea022777ca4d6ae73a": { "jp": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.706Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.705Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.707Z" } } }, "8ef8c9df9ddafcf602e81139aa8e6731772a4658d96021c4f2181a1d5e213669": { "bbc0b523bb0b92fbabe619f5570db6bf3895fcc93bc57a5e31d9f3b2110f036d": { "jp": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.710Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.711Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.708Z" } } }, "9a882460cbd2fdc9c5ff521d87a5f2d2b7ccd55f1ba81bfb3906e7ca923d1c1e": { "437e57c81c3f0872003cb47aa8df2359ae68ecc690d887ec26b6e38a740144f6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.702Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.701Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.703Z" } } }, "ad780b9bfd73ed606b7968549e04e8b3334085724088340ad05f2447559d540f": { "2bddef7ed07c45258897c9370efaa505180d67c313bb2d16ef2c830e5636aa00": { "jp": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.717Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.695Z" } } }, "ae79c700aca5153218493e8a943d16630b2f7ea345ab07e3105236857b43d93b": { "b1e073c8374abc5e997e5c6b5beb49db3202f0731072d2c28d7fbb0d58ae5e38": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.728Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.726Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.727Z" } } }, "cad443b0bb3344ed063f7aa4c7fc2b79aced5e32830119e2376d8bc59ea14c52": { "7d224b4658e83885570c772a1a61546603db3deadf2539b9ba2ed630cb97e6a6": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.701Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.699Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.702Z" } } }, "ceefbdcea6747301b15ae01324b1afd1ac12aa220ed2fe99add6fbe53f6c7269": { "5840e875e6ec0ff5abbf5480df1b95d85a50786763ab037f67b711d24e4e67c7": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.700Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.694Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.077Z" + "updatedAt": "2025-11-29T08:14:50.703Z" } } }, "d4d0c35c5f0beed1c59fef3df7f5bfb3c862a52553491c973702a3bc2127649b": { "57ffcbf7d6cac66182cfea77cf8aba9e7c9e489b22f114253119e9ff7f8c1f83": { "jp": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.692Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.078Z" + "updatedAt": "2025-11-29T08:14:50.707Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.079Z" + "updatedAt": "2025-11-29T08:14:50.708Z" } } }, "e14b170922435b64e35287ad9833a81f16ff54cafad9dec0721b50d4150e5eff": { "a7e402c7578841050808aadfed7d6deea52ece0e68f8352e2e942645abf29aa1": { "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.694Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.695Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.700Z" } } }, "f613caf640545aa0661fb14392a49a46e530351b4d92bd137405952d82f5b4c8": { "d8b96ae66a4502def2f78fdd03f27807df147056c6b3fc7bc330500d5a9451ba": { "jp": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.699Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.697Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.076Z" + "updatedAt": "2025-11-29T08:14:50.700Z" } } }, "648b00935dbd871b726296d698650b456ca7a653fa072fd74ce364e23a608928": { "ebc9c5357fa68d5d160cb6ddf6f938a834ac5bfc24d527684b3b9feaa9bc6a60": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.725Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.722Z" } } }, "6d063f7195776042aa3f0a6d982cef56abab4e4b689ea926e2fc79ed09f5a2ff": { "cdca3b6d03d5aff13d620991a578cf9aae185e67396d308d55838c9401281d25": { "jp": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.726Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.727Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.725Z" } } }, @@ -20307,117 +21605,117 @@ }, "000b1489bccc8788cf74aa6329f6c98ad06511f167f46f1b934a958a5c6ce2b4": { "ru": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.692Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.074Z" + "updatedAt": "2025-11-29T08:14:50.692Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:19.075Z" + "updatedAt": "2025-11-29T08:14:50.693Z" } } }, "99b41ad75a6b23d70cb86b644a533c095785f9bb812c802ab52b650473d678ce": { "aa16d1a33d3312895cbf47d1ede82586dfb4df0a3507111d6cc8823a5446a979": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.729Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.225Z" + "updatedAt": "2025-11-29T08:14:50.716Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.726Z" } } }, "be4a5f793e39d6e7b18691ba8685878af8c580f898c9f09efc5b93e0979b3902": { "b95eddde3a53a14028e00000ea72057696b55e352e2a30cb66fda415c9ba5d5e": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.724Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.728Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.228Z" + "updatedAt": "2025-11-29T08:14:50.727Z" } } }, "c6fb4739e8e0ce948c34c03ed0f585498d9b45c24d566dfb8456926c4160207b": { "1d24888ce8aa77edfe5838c52a804ab3149a5d9497f036556a3e08576311a7ea": { "jp": { - "updatedAt": "2025-11-26T07:24:12.236Z" + "updatedAt": "2025-11-29T08:14:50.759Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.759Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.237Z" + "updatedAt": "2025-11-29T08:14:50.760Z" } } }, "d917e72b0a533c5af5b78c94fe1c05954dfd7ee48fb7ef7ab50f924f25fd68d2": { "b98abd6c9ba813c4b4a7cd9bc3018c8d18d3b4e71c0ec5233cf5d8da0a0f0441": { "jp": { - "updatedAt": "2025-11-26T07:24:12.229Z" + "updatedAt": "2025-11-29T08:14:50.728Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.731Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.230Z" + "updatedAt": "2025-11-29T08:14:50.731Z" } } }, "e05df611d62735d38ef4d916bb8f4ebe7a8d79a8773dcc1e94584527d5291d29": { "6ed109f9852559b92ce5667c817e8c2bc706b8ada65ecb41dd89ea0a07d5a71d": { "jp": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.721Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.227Z" + "updatedAt": "2025-11-29T08:14:50.723Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.226Z" + "updatedAt": "2025-11-29T08:14:50.719Z" } } }, "8e4cc87be65a0de0b75cdf694f1e368b68e721094e28ad05d1ab2af1aa7c97c2": { "b4c7e25600e2e0bab1150a0a7777cdce0d61b9c3e50a9c73e33bae121c92cbba": { "jp": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.914Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.914Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.268Z" + "updatedAt": "2025-11-29T08:14:50.915Z" } } }, "9dbbdc5c5acc11dc5874d8f84c2ec9210659a18cdd63bcc17e5b9addd0e11761": { "ca5dbd38b58fcc4d7a89bbb3e287de8dd7982f758f2a8e314589026ceed00758": { "jp": { - "updatedAt": "2025-11-26T07:24:12.266Z" + "updatedAt": "2025-11-29T08:14:50.888Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.273Z" + "updatedAt": "2025-11-29T08:14:50.933Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.084Z" + "updatedAt": "2025-11-29T08:14:50.886Z" } } }, "a1ae550295a483325655e321e7db058409614a56e29a23b67cbb7b001c387ca1": { "8978ba1f0ad1f751ccb53c78a3aacb61cbebe5e747e9d35fcdd7d9a45f55b790": { "jp": { - "updatedAt": "2025-11-26T07:24:19.085Z" + "updatedAt": "2025-11-29T08:14:50.887Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.909Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.267Z" + "updatedAt": "2025-11-29T08:14:50.910Z" } } }, @@ -20440,6 +21738,17 @@ "ru": { "updatedAt": "2025-11-26T07:24:18.960Z" } + }, + "286b947a3d644f84707e96a4a80f3a46f47bb75bf677493bf29a2c4578bc47c3": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.647Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.648Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.648Z" + } } }, "757c782e8d474da0f84ccfdac904b2cece14a9ace176070652ca6e68725754d8": { @@ -20453,13 +21762,13 @@ }, "4123bf4754603cd137b2c347ddc2ecbf727880d70156ebaba4224dfc6513ccdf": { "jp": { - "updatedAt": "2025-11-26T07:24:19.029Z" + "updatedAt": "2025-11-29T08:14:50.328Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.335Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.031Z" + "updatedAt": "2025-11-29T08:14:50.337Z" } } }, @@ -20482,6 +21791,17 @@ "jp": { "updatedAt": "2025-11-26T07:24:18.936Z" } + }, + "b63564ec20730ecb181b7257817dbde4f1541c1b85a389cbe3cd4e6e203c48c5": { + "jp": { + "updatedAt": "2025-11-29T08:14:49.932Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:49.932Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.933Z" + } } }, "955f5f9d51c1666e2ab36912b9d7ce9512a594a94c3d4f68bbd34dc0b4b29a4e": { @@ -20495,13 +21815,13 @@ }, "2020a467b74c2031b09501bd31ebb2d005e1c3d366aa4673be3ded168b7cf3c3": { "jp": { - "updatedAt": "2025-11-26T07:24:19.036Z" + "updatedAt": "2025-11-29T08:14:39.752Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.760Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:19.037Z" + "updatedAt": "2025-11-29T08:14:39.762Z" } } }, @@ -20524,6 +21844,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.081Z" } + }, + "1e00e7ce8c07b67a72f3c30424ca0c2d930cacc231adf5a1336f323772ff2edc": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.469Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.469Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:39.469Z" + } } }, "ae8f86a4950495ec40a22f13e62e97bb26b60535bf2661e78523aa5c7694d172": { @@ -20545,6 +21876,17 @@ "jp": { "updatedAt": "2025-11-26T07:24:12.093Z" } + }, + "a99976a7a738ebb33cada2f4d924528e1f6779ca2332591b2c1eaf27105ec883": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.588Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:49.743Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:49.743Z" + } } }, "b56483af638a1b6f0944e0c00f0fa305176ee14ac4e45829309f7b6e538490d3": { @@ -20566,6 +21908,17 @@ "ru": { "updatedAt": "2025-11-26T07:24:19.025Z" } + }, + "82debe159b38d56f0f7e43e16823ebbfccd913c0fde77cb1d097d676eb7fedb7": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.265Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.265Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.265Z" + } } }, "d77d62a6594de01ac3e3969fc055ae87ccde060e7d7acddbf4ec2e3d79a2e678": { @@ -20587,6 +21940,17 @@ "zh": { "updatedAt": "2025-11-26T07:24:12.200Z" } + }, + "18ed02e06f16dfce881d97046fffde26c9f0db28c8ce1161a1f73a89b58682a6": { + "zh": { + "updatedAt": "2025-11-29T08:14:50.555Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:50.572Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.572Z" + } } }, "efe7462318a21cb44aed58f2c59069ee34b55da9d484d24f8da7d81958d002e7": { @@ -20608,18 +21972,29 @@ "ru": { "updatedAt": "2025-11-26T07:24:19.008Z" } + }, + "0af616e387db07695b2962dde0bbbd92c2ccccdb78cfa45a093fafcc97b3918c": { + "jp": { + "updatedAt": "2025-11-29T08:14:39.742Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.048Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.048Z" + } } }, "466fe68cf77ba8d2f7e6b11a62dcea8f2b8466f8161a1a4fb8352442e971815f": { "0fb852baff9f99f784eb97ea0fe1e81f329d845d7e142f0cf03f1c59b7c10b6e": { "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.243Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.247Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.234Z" } }, "35ad145cf388d16f5d4a4011168a1fc7287db6205d3337996d98df0726ff1b0f": { @@ -20634,26 +22009,26 @@ "16c5698666ea7909d9e1753e9b13a5de1a08200f19d637afa8cab711a0379f73": { "38ea5377628be1984cefdabbe1181d528ddf34276864ec19a7193979c8dca03a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-29T08:14:39.244Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.246Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.242Z" } } }, "85911f3bccb6d5539862e976203980d7d51391821089a818a002e7424e1242da": { "d7b1a435f7e4fe293383e5e8731be7cd7008caf825855a2e246a89ce3676aa9a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-29T08:14:39.245Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-29T08:14:39.249Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.239Z" } }, "4ca4488b6240f0969f58775cdd28b38ea19b72d09ed672806dd6066698e103b1": { @@ -20668,13 +22043,13 @@ "237a635525e427bffb1c840b646e1b41486b8ccabc7712217a3d66d8c582f1b8": { "727edae2b97b38f4fc6c0b0dd353075d4fe831d345dda64ac9471ceaf897e490": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.246Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.242Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.241Z" } }, "b1a18bb55dc19c1ae6d59cc1d7b85fd42acff628d3ca1636bfb8236189f4e211": { @@ -20692,13 +22067,13 @@ "7f4450440bea714d4def4ce9d273c25160fbc93f8195d945039db1f03871b626": { "98ef39e86680ea8421985ec9e48a11480382a84780d7c51e21ba7c7c08ba5de3": { "zh": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.220Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.220Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.218Z" } }, "046a9d5b6025a5438969893155368430145da58084c1a1cdb51b2f442bd31728": { @@ -20716,13 +22091,13 @@ "96339230d0b0662c9043872f701165e62b1dd1a9ee98448c3678014c12742331": { "f9dcd7d2195374981d74d8864cbac9660f4fe55a672e340bfa424e86bd032bd1": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.246Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.236Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.236Z" } }, "6e8878bf1b9d227317cb48a45ab9134707488c84ad6fd609253a2e8ba3d90635": { @@ -20737,13 +22112,13 @@ "7b1152a9f1bfab485338afd2d917ac4d27b6ac598d4df8c416b5d34f5f2f2dc6": { "e85d9475b25d51b62300a450688edb90649a6b929805c4c6c7dc02c5c82425fb": { "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.220Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.645Z" + "updatedAt": "2025-11-29T08:14:39.210Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-29T08:14:39.221Z" } }, "77b3f7333c54264798591573269c51eb187a6530077b8c89d00454a32b3814c7": { @@ -20758,13 +22133,13 @@ "ff3c9f598e696982267c2ce9a91a552bebc66583c1163dc1c4b27f82c5102f1d": { "128e8ba5fd3b5e0981c42ebd31c5b3e87b6845262805a4f4bff3b70534bfda44": { "ru": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.247Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.235Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-29T08:14:39.233Z" } }, "21345561752f0d94aea8069e30373e2f370e4ba9287cafef0820ff4937dc0a05": { @@ -20779,13 +22154,13 @@ "0361e95538168e72e0cf9076b4f8a823f82bca2acba30f30499d1d7ab6a5509f": { "d46f5caa45acdc3ea0cac4ee761116eca50f70acb1faa2569b6101636d3704f8": { "zh": { - "updatedAt": "2025-11-26T07:24:02.663Z" + "updatedAt": "2025-11-29T08:14:39.247Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.248Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.248Z" } }, "7eff5614e108ffbe8fdbb7cb7a60ce43f1c34abb8dce2015fa7c6e289db7874f": { @@ -20800,13 +22175,13 @@ "4914840b74cd4cd05b93446005c1a3f9b45c7e7816eb8b20c953782a78417420": { "66ffb1d1eb8cc149ea48f7ecfeda0ca180b36051bed03928a1992c631dc4c19a": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.247Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-29T08:14:39.233Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.241Z" } }, "40abf84cb8f86fa1a58b9ec5523ea457c40aaf25e3b348ce068ffc50600529bd": { @@ -20821,13 +22196,13 @@ "7c40f4e2df36269b352d83d988edf0d606726b28f6527552e7eea3bbecafdef3": { "199bb81cde4d12c23b1adc97c7e2bce05a479079d23a4bb65c6826ef95452990": { "ru": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-29T08:14:39.221Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-29T08:14:39.215Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-29T08:14:39.221Z" } }, "370a91b8533a723d2e4b1549c35c6735c837f2f50c1c4d609903126372f45d30": { @@ -20842,13 +22217,13 @@ "1eff56196650aabbed5f57974122db842d54e3093cc55755e2f4b980a957f4ac": { "598e57a0788cdc232382a72f993fe05e0d9a2ec8e815e0b23e6780d39b245171": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.248Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.235Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.240Z" } }, "4adeee00af2b7dc1689945fa1a3ea72870eb8d82635d23c24f5afacdaee2d9cc": { @@ -20863,13 +22238,13 @@ "3c95fa2e161d494b4ae0ef9bf3131f3b028f13b824f5b7ede9ad688d11b58387": { "904fe0150e0e8c168afe250519fee5a4c27e23da832c312dcab667da64fa503d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.056Z" + "updatedAt": "2025-11-29T08:14:39.248Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.234Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-29T08:14:39.244Z" } }, "296904d83e2f05abd0d201b63756e4993fc070bdb04cab19f7310a5f4982f1f8": { @@ -20884,13 +22259,13 @@ "19260fee9e23907e67f7f4589d997bab22cbabd4ffa0aa96806703a3b19aad78": { "1352a2dbb90191a61432180810a0431b454c526d658886e1c33fdb1c71cfc2bc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-29T08:14:39.232Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.238Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-29T08:14:39.233Z" } }, "7032d2644260720142d73bb5705b9bb1dd26018cb12c421cb43c6bd87452858c": { @@ -20905,13 +22280,13 @@ "c71190c424029f1f3166b0dc0c975e43b747cc77aaa7477e6c8834baafd715ec": { "40fb6fb53bc03ff95d4c2a5b88f33db598b6bbba4a8c8273a31dff8b7c9a3fcd": { "zh": { - "updatedAt": "2025-11-26T07:24:02.644Z" + "updatedAt": "2025-11-29T08:14:39.209Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.218Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.217Z" } }, "35eb622d4a1673d7a2b49ac6d4fbe5151e7dad205dad7c16e0e36879a5bbb7da": { @@ -20926,13 +22301,13 @@ "3490c72ebec2d9960e4cc311de931030fc0f1de3f2421d0d2a30876926a983e9": { "20143fdffbf6f144ae3f0a848c2c4135b1dd5359078f18a35f86e5ad0368f0bc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-29T08:14:39.212Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.218Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.219Z" } }, "716d4abd1d53aff3d2fbee3ec30720b9388d98d71e41c650e6551e5ee79417a5": { @@ -20947,13 +22322,13 @@ "df1cbab9f5b7839553ad76ad0b3799099daaf2d5817b6bc1eea8369de5c5842a": { "3a49b42cc312e4959cc3883b924f895ba1f241473240bcbd42a5ff859048c600": { "zh": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.257Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.273Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.258Z" } }, "66576350fa60992186887698075dc59ba76bb735288c2751fa40b91ce10698f2": { @@ -20968,13 +22343,13 @@ "d133c163191364466953c00a3494895f7b213291fa7eec0a3286c15ab6588c48": { "5b79efc25b16535ce983e05832f4052257d44d2790af29323a727be1048bc054": { "ru": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-29T08:14:39.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-29T08:14:39.212Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-29T08:14:39.211Z" } }, "de7e11301702e7f96f6fbd025a9103d0ed8c30b19a1bb2d879dbd161c1061ad6": { @@ -20989,13 +22364,13 @@ "5ae13595aec14e94efae48ed27bd30882ef99ca22e926c6eecac01f4a69b6e60": { "4c6c9c998098906955cd0a416322eaf10b8ceb9a33df69bb90b4e0206e58399d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-29T08:14:39.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-29T08:14:39.216Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.647Z" + "updatedAt": "2025-11-29T08:14:39.212Z" } }, "832ebe1b67ef5ee07034a93035676b1d6ba9f009d34428f33f25ec2daaa43771": { @@ -21010,13 +22385,13 @@ "52f1e721b650aa5a8bb67053afa7caf447a7332e92f416526d36e8941d726d04": { "8c41257fcdc2d116e76c9a1609bc65adf58513acff260b8f2aa36d74bccf31da": { "zh": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.234Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.239Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.240Z" } }, "630e5b84780be36656bc937645ed65fb88179d11247d1e85ea1205ed29e6f931": { @@ -21031,13 +22406,13 @@ "5a0ce1710868a408e43b0c9859a80ada3b08b93b0d26cb45f2ea004556e9d2b3": { "ccdecf590d1994e9c17ae91e353b32d2f66c08e379ce1eeb73f06a674afd8375": { "ru": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-29T08:14:39.213Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-29T08:14:39.215Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-29T08:14:39.214Z" } }, "a2d654d0961b9427057876a5b47403d5864939d9a0cc302f7941e73ea9093498": { @@ -21052,13 +22427,13 @@ "9b3e13e23b506d9d9ec9b2c5fbf8b9d2a62e1de7d0175c5f6330498124203aac": { "86c47ff8f3b3666e1a6b49b2c8302b448389e1e3b41ab3b1450e055082821549": { "ru": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-29T08:14:39.210Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.646Z" + "updatedAt": "2025-11-29T08:14:39.211Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.219Z" } }, "8c1816d77d3551c7d6dd5710ccc8274f66e5809dd3cea3606629893483ebfef7": { @@ -21073,13 +22448,13 @@ "30f843a3827d19f26bae893b6a89699d15924309d3ee0d771f1309eb391c8171": { "a5eb46f97ff75367e3c2a77e86b555adee47157db34a73cbb68c4faa8e14d033": { "ru": { - "updatedAt": "2025-11-26T07:24:02.659Z" + "updatedAt": "2025-11-29T08:14:39.235Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.219Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.662Z" + "updatedAt": "2025-11-29T08:14:39.245Z" } }, "655ba8e4e20f3b5f89cae3033f51649118b5face2393e69b8ed2d63f7c170bed": { @@ -21094,13 +22469,13 @@ "15cacb127be1afdc884be3ff13c61ff48d4ae41e28740309f5f445002fb0fa90": { "a9c8fa4f53951ce4026e170171a0517a80777e9037e5bb2f16eab83d3ffaa9cc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-29T08:14:39.217Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.651Z" + "updatedAt": "2025-11-29T08:14:39.219Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.648Z" + "updatedAt": "2025-11-29T08:14:39.214Z" } }, "c6b1ffeb8a927241e2108dbeb02a8cbb166d5b270f1e7cdf770147d6ef83a7d2": { @@ -21115,13 +22490,13 @@ "941b4aa0aa9dbadd0a190a16a820e2bcff3884350dd172d2d70c5e4bc21490d1": { "429135ca177730d77f47327bd61c6aecd212a21d1a4625d711d13a6e0c6886bd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.260Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.260Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.259Z" } }, "d744ea0501987d0d0496e17c8100a30396b41d2cb02d4b4937b9c75678cffd0f": { @@ -21136,13 +22511,13 @@ "43aa5066af84a8c935f0fb2dab57ea37c855c50a8c4bf2fe5da1196726ec9767": { "8102f53c258449f037fd5c8bfbe1d4547d061cf4c8af817be8f9e6c45a4504b0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.237Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.239Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.237Z" } }, "bc18044844f416597eef2c300fc30d72ea362c8100b916b3cde37fd6397a9e41": { @@ -21157,13 +22532,13 @@ "a3a2fbdc5aafe02b0407589bc3e1a8e94202c17584b7025219f1bfd6b9bf4a39": { "4874e6e4325e8473fce83ceca9411bf266bf400e8eb78d3c9e8eec128469d820": { "zh": { - "updatedAt": "2025-11-26T07:24:02.660Z" + "updatedAt": "2025-11-29T08:14:39.238Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.661Z" + "updatedAt": "2025-11-29T08:14:39.243Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.260Z" } }, "1b128db269c12be2125d03f195c663118806c04caea0bed54648c79f2879ccee": { @@ -21178,13 +22553,13 @@ "4877e91053b08c2c45734e5085ccf9117e8354554dd8460e2ec3e3afe7aa0ab7": { "1e4f5fb2eb3f3d09c80229402157ba0cccbf2f37d7521185e9cbb71109edeb84": { "ru": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.217Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.650Z" + "updatedAt": "2025-11-29T08:14:39.218Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.649Z" + "updatedAt": "2025-11-29T08:14:39.216Z" } }, "ff50c271592348dfa10d95b4d2fa83784b90178a9865e6dcf8c7996829ea7358": { @@ -21199,117 +22574,117 @@ "a444951bd73cb75b037df1739eb17fc3c4057630058e2cd15b863d55feb1e497": { "be2b70c111bb68681c2eb58d9d87da824e86dac80806aaf1af31eb7e683ee46c": { "zh": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.357Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-29T08:14:39.368Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.373Z" } } }, "b61feee503868b9ae36d297816fda3d2e834c0f1ae6f4deeefcdd9b66b895886": { "4ef342336cc701c4e8d32cd01c1302bec119023fab8a7c695a4baae3e097696f": { "zh": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-29T08:14:39.249Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.253Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.254Z" } } }, "b2e9e9045947db36c00975d8bf16f27ba366df3f4c68a977779fbf5a78b77948": { "046cb0e8076cf8c0b6c68469e0acc454e928a24cf0dfeb0b83292ecb2957f821": { "zh": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.358Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-29T08:14:39.368Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-29T08:14:39.366Z" } } }, "a8580441e057aef43ff213b00764e321caa0062300adad449c1147c6a00554d7": { "803165c43e8eb2cc396419bba2e85a710e5a34fa1c1f8c024a4ef0cd296866fa": { "ru": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.382Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.393Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.383Z" } } }, "581f0a6e4c0d192c8606c68934251365ad7ea4136bd5acf7058f58a76f6d5710": { "ee59cd484bdaa73a60bc061cc701d580ffd417f73fdcd689e3fdd983d9f475d2": { "zh": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.400Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.401Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-29T08:14:39.410Z" } } }, "8d435bf9e6c99e8e1a52f439de6bcbecd2baf3265ece4535053d1e1416ca45c2": { "0c0d01e2f586c0d713dccf1bdfde13a36570342ea30a52d1914566a1af56d594": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.390Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.388Z" } } }, "ff15f334dd81c6f832484d8628568a040ff836d4668005abe916911afbffe911": { "5255a26915e56655751575c9c47141ed725215520f648de9ddb2650d95ec7c9d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.358Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-29T08:14:39.366Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-29T08:14:39.367Z" } } }, "84d3a07f6bb23015f78e31d1cc93e61eaf670a2dcee7c14342d97b32fb037866": { "e5b0ff50a5b4e2b593b51ad0606dd79a8525ea9ba7bc58e22bd24ad8c5a925cc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.359Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.372Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.359Z" } } }, "54d5d67f63f4e8a40581478b2c6f0684322d03116d22c84c5ebed5934c483f47": { "04a1c4adbd60bd15811afb47b49c06837b0eb88b3c5f243bc17465571d25d192": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.383Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.397Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.386Z" } } }, @@ -21324,733 +22699,741 @@ "jp": { "updatedAt": "2025-11-26T07:24:02.700Z" } + }, + "44a2121418c10665853a536dedd7553eb6cfcbb6bb546a6e81e42e329c80cc55": { + "zh": { + "updatedAt": "2025-11-29T08:14:51.058Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:51.058Z" + } } }, "e9c8787fbd5d3ab34de4fbc2069baaf46f6986970cc7b8edaffc49a991d61cf1": { "7b366931a91740ebcbb465a17f5142106ecae677c271c9b69d08fa475ef502a6": { "ru": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.359Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-29T08:14:39.369Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.365Z" } } }, "14c0bbca8f7e350393ed679d410ca4b9cd58e0c5ee29885f7e65beae7f51c703": { "82258f2bbaceee1cc2b71c162991c1eb92c67498d494693cd385b4bbbb78fedf": { "zh": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.384Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.398Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.382Z" } } }, "dd1f243e110cd8cd4c72fabd62923f7077ed63859ba2c578b1561943fa5490a9": { "38b8464001ddae6ec2a702908a9a44c1549405c54b818345c5ee01e6079833f1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.401Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-29T08:14:39.406Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.900Z" + "updatedAt": "2025-11-29T08:14:39.405Z" } } }, "ba14369199fbec0937cc2e6400083d328a65fa21e4191586d4474ff60d50b27a": { "687b275c30319ae8712f2bb22a713be7698df9bf60e3f0a3a92687b0ad5813e5": { "zh": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.319Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.322Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.328Z" } } }, "0aefd7962edb78c98f3d45305d81752ebb2eaf0195c75d6a1cd6e7ad0ef5617a": { "5d1d0d81a87bc16246cc6d195a4d9c9f3090b00692a1dcfb3dd44b533128b6dc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.384Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.391Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.384Z" } } }, "6b0a1864f6fd70f19415c4e085caeeff45b83244daed33758454b88d9859c692": { "ecc79a94c617ae9c2438b3b427bea3004cc3f1e8a3f90157b36f8157166a99c0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-29T08:14:39.222Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-29T08:14:39.222Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-29T08:14:39.223Z" } } }, "543d200284e9587853538717503646bf5a945bb43ccdb3b059dbf4eac4c1219f": { "54eb6cb69d7901f33c8b60f1ebf53444695ba214c41ecd088af34c6dde0d4e44": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.402Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-29T08:14:39.411Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.402Z" } } }, "fb3d54543e5565bc4305346ef7c2d5312674405acb6e193ffaf4fb30ddd7ce71": { "df9135ddc19fc1bbbb29d708bd2c3afbd621e4a67a544ede4538a80aa5b420b7": { "zh": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.403Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.404Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.400Z" } } }, "14b4676b953c664afb277f933e119c8da2f742590c1a9a4bb7b2beee22a7eb7c": { "5ee021b8f49ccf1b18d5dd6f94a9b7418709365c4195a6b0854ae20f5132dd10": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.360Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.363Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.364Z" } } }, "0f67bde502826e1dba901c267e553e40b45a88ea2514fac35224b3011c9eee95": { "40ccc189c309d81655c42b58d6550569ed8e72b0cd53cc36991d1ab17eeb62a2": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.360Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.695Z" + "updatedAt": "2025-11-29T08:14:39.374Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.366Z" } } }, "93a056e5b771b1f20f3660dfb370f302960d593ccff14a5684b961c760cac61a": { "b34875547efada966d6f58a27a70b1a17213f7251649cd70a29b9fcfe4aeecfe": { "ru": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.385Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.387Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.386Z" } } }, "ebc5db761ec12b7516bddcdbb93d868ef5c7d1458f56a4288fab25b5e45a980e": { "e20f9f94eb03e49c98c43e022936ac730a22ccaa64a4911703f457858a10f672": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-29T08:14:39.370Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.695Z" + "updatedAt": "2025-11-29T08:14:39.373Z" } } }, "f016a1612cced253f74884a4791ce47126fba584f3ee773967310982b7597b83": { "cc687fc17daeeb33c7c5bef1a2bc7ce51ba437f92c4354369ab58a024c2123b9": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.361Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.365Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.365Z" } } }, "f657cce435f5bbd4c37d13d06e137048b8588d93820f3ee19d2b600ed82b6819": { "f4e41d0b3fe1c04866d1690f92f407974255a1b7b269dd34af873b60f54ecb09": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.403Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-29T08:14:39.407Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.401Z" } } }, "5a8a41312c127bc8ee51985dd35b7a34db3722502d9dd3b6517218f83ee15209": { "cdc27bc165065afbf272c456901edc7e818c1288e8bf98aa8115b3cc4184e430": { "ru": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.385Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.396Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.392Z" } } }, "bb301384e711a26eac5ab620725ba3651e9a050418e5c4b03409244a6916096a": { "fa37176654ae0b31692c4310f41376cac060e1fac5de1cd5fa4a6795dccc88be": { "ru": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.362Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.380Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.388Z" } } }, "be5b2c5f34f09aeff162abaf45ccf882807b091723c8992305ab5dd6d9d85255": { "a4494efc6991ad7d0de3d84b86e624697071ddfce8e39ebd42923fd6777c8531": { "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.363Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.364Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.364Z" } } }, "b7ac58ff02407e2eedc607e8ffaadc709667604b213c6400361a10c2a2c6e252": { "ae94f635f518e540a73bbd471cee47b91d539ed719fbffdaf358c667006c4bb0": { "zh": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.363Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.365Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.360Z" } } }, "f2566c10efb98a7e07538653cda7cc2135c5c1aaaef306a48e8e753ebc662a1e": { "86c47ff8f3b3666e1a6b49b2c8302b448389e1e3b41ab3b1450e055082821549": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.225Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.224Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.229Z" } } }, "c3d6ae1d7c3ab47f1321484233d7e2d4c6960c431966f43a50c94da67e615da5": { "7fe2061b7ffe48c965db16b4f632dfa6a0cb32888881320b91a370311396c437": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.341Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.341Z" } } }, "6f8f89ce13c70fe1235d08203ef798a559154950245f81065ab893d0e5c542e3": { "f96e0b809311db6c2baef6eea1807c7d62c21afafa50f43dcaed5dc333127e20": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.386Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.395Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.396Z" } } }, "857f78e82a54d7a2128693b3d739a16697e3d23a8ab3595b336d9da8d6d1d643": { "3fadea060a820d56c666c2cf5cdeb8e49e9c833dfa43de6b17bb735aecf7c763": { "ru": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.387Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.395Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.396Z" } } }, "98f9d0cfd669fd1fa447820ed42dde75e265419fd66cf20c9292293dd4a825b7": { "ef840aa109bf499596594d13130b402a3f00f31d42de8569556571fe1c214cfc": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.404Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.404Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.705Z" + "updatedAt": "2025-11-29T08:14:39.401Z" } } }, "0ccba8d2db72b1884bbc46c41967afaeff1aa84c34d44e471d4f0a6956691e16": { "94c625175686dfb070b11d461168883b7020c135e87e95dc215bd6a1888c5c54": { "ru": { - "updatedAt": "2025-11-26T07:24:02.690Z" + "updatedAt": "2025-11-29T08:14:39.365Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-29T08:14:39.367Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.691Z" + "updatedAt": "2025-11-29T08:14:39.367Z" } } }, "c3624723e67987627989b19cf8887d0607b1cfe3b554bdb9b1a4afe0241fb796": { "394ce4286ff89f65fa6b50578d4a94d4eaf540883591642f71afb2825984bad3": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.261Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.261Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.262Z" } } }, "3f0eaac3f28ba8b2234626f11889b6f51135f12393d659a739adcfe6bb3acaee": { "b93542926f20e8394566dc0612022ddaf2939a3fdd8e5ae25b2ba31cb94de320": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.226Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.231Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-29T08:14:39.224Z" } } }, "101a525d5bb936cf99909df3325b1ed7ac0b685ee9889c47f517b4323eba52db": { "fead6f3f426b4d09ad7d10dd975751d5778ec0e92cce0f8ec88ce01950911970": { "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.251Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.252Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-29T08:14:39.250Z" } } }, "6bc2d77e531374ac95719fbbe878154b867b374b36d2f4e8485da1fa3a3820c6": { "d33c2c466bd3a7370a079c2bfd8752318550c559a12158bcc434cabdaec31040": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.387Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.394Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.382Z" } } }, "43bdb45dd285638fe98614183eaf90571d4631d1e726c04b99db3c3faa08af32": { "4ba84b799e9b0e8d9b223c47606c717ef7d6ddd565986bc7b238eb33165681f5": { "ru": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.405Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-29T08:14:39.411Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-29T08:14:39.408Z" } } }, "fbc3d920f0695e12f892f5ecdcfa4bc88cf0bb49809defb12c39db77838dee89": { "505618685d75d6489d64b01bd2297e8b2e4ce44b92900a9edcf4d95a5eebb475": { "ru": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-29T08:14:39.227Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.232Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.230Z" } } }, "67e6b09bfe484e48895cf047e4050cb1f08398f2f779e27c7acf3ff69d9c5e8d": { "7b905336c6f753917b4e006f53075b8ba27cb105a18643882989eab9b01e424f": { "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.388Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.396Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.383Z" } } }, "736363d0859d8864ef39d3c2b3906d5ee9e8520ec754a5daaa253102669dbfe3": { "4c2ab8cb337c681d306ce35ffbf49cc6acb8d68b78b1f946b2757bbefd07e898": { "zh": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.388Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.393Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.390Z" } } }, "f9122446fb42667abd4d27483874244c927449544300488e6be5e19f0f5c5196": { "fc2f22b778e933aded713c592fc3c7f36b5925e3b1dddf870b9f00d0d86f3078": { "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.389Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.393Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.383Z" } } }, "235b40c46d2961005ce3297b1e97ffe8edc82de828ff56822b9e32359796e9a9": { "c5ef2e83c2e151559f9dd5524371a9d5b3447d2d1d74ee4818d09823d6de408d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.347Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-29T08:14:39.368Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.378Z" } } }, "462cdde9af0d98973a369e372516b17fe788292eab3b5888894d73e9cbffb6cd": { "d745f7b346b2c1bf0d164fbdb236d9160be09038c4c9ffee5d2fe13aaa441118": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.328Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.331Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.326Z" } } }, "710ad55c0afad6985a560346d1622540e29d92eadcee6064888e0cacbfeda384": { "54f1a9cd08afe76cfdeea722af528c57303609afdc34748e3328885c439ce7bf": { "ru": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.255Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.251Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.252Z" } } }, "0fb5c4c89db0cb83f6bd1cdef9a19071c391929cb24660f2f66de45b10763ba3": { "23aae78ddaf4de455a27e50918cb30da7db97d56977cd4dbe8df7b2e1cd49fc4": { "ru": { - "updatedAt": "2025-11-26T07:24:02.658Z" + "updatedAt": "2025-11-29T08:14:39.232Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.228Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.230Z" } } }, "45c65db56b87943c8cc881cc85fe81f875a263a988b758817095b2448ebeab1c": { "ef02a49eb6596c142aa773eb78cf22212510b6f1bb9809d02c025e4d34ab82d7": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.348Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.340Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.348Z" } } }, "b58d28384b38660cb355b5217eb858f4bc83ad7155278c40ae4663b230c74fd8": { "f5263d91719fc0aa0d4dc51eba8629ecf707553c3c6fd5144e8f1ca748775d75": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.306Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.313Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.303Z" } } }, "8d7c4ba98d5f5bbc6e42b2591da7f2b20f246b15396b0ab2075839fef18b5697": { "157c626f8a13dd4dc09e8313f1bf33c397d35bf379c354eb9d973e648827bef2": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.328Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.338Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.324Z" } } }, "4d0528f558f80f4881563682077f001ad134becf467e305c86fc84dd7697b089": { "42d9d42562a4f705923103bf4a3b7173addf1f1dd5adc163a37dbd936aa49889": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.345Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.342Z" } } }, "a5d93e69125f512b3e1f00266e424585b846115536039af5f58cae578c2829e3": { "ecacb8f11638f831b9c20da459d9a74e871ae3943e5721f34aba4985e3a9d9eb": { "zh": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-29T08:14:39.288Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-29T08:14:39.287Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-29T08:14:39.289Z" } } }, "5bb6610775ffe555ff909d1e5c0cb423ff2c15c044240729c60b0ebe39bbca30": { "d2a5526c06779a9c79d3b4da1256e4feac0aed57c3171d923a4e08990a784158": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.348Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:39.343Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-29T08:14:39.355Z" } } }, "2c61f03a4fe808580cff4e8aa1a6939d84eb12b9a43724b98bab278d020bb194": { "4158e73583a46ee61d2835723076f3fd91bdae28b86fb6f4d6ab8870a8146937": { "ru": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.306Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.305Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.304Z" } } }, "8fb2e5e5d61ff6b4830012f315c75ccd22ef6f64c4ee7685c2cd3215aabfe79d": { "c393d1a8b5995f5444564d2d762f97bb4815829fdfb74c4739bd527681d89cee": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.348Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.350Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.349Z" } } }, "1a54cbb6d0259ab1c0a7866c16289a6efb190e3d138af3035a9b892ce04da57d": { "35875b5d8355a345f2dea01781d4a86cccffca2873f0f1c8151df687559a6ee2": { "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.329Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.335Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.326Z" } } }, "c5c96baff0600024d6bbb610d9cae24faf4a22e4f54fbcc16da6eea5801d716e": { "75a61fac01b9a0c4dc6479a31dfe0ccf020bf8c906301ce66ddb70adc32e62a1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.696Z" + "updatedAt": "2025-11-29T08:14:39.374Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-29T08:14:39.370Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.376Z" } } }, "be5b364ee73eb51fe865a890d10236c2eae4146ef19afc9755721c110139579f": { "e55f970b0157d55548b665f2a95fc93e3875eadfb7a385687eb591b21d592f97": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.263Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.061Z" + "updatedAt": "2025-11-29T08:14:39.261Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.262Z" } } }, "4449f60ff9c38182ac376f1ec8ad4f5c377a1d189bf6b8bd0b3f294437ebd1a5": { "b4657b26faf846e566012308f61103c34dbe662b80add135f7d0720222c74ea5": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.329Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.319Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.326Z" } } }, "809f990c2475c0e585de5f7677ad5e69d2c480395ed833dfa2922067881e3350": { "1534d3d5fab78c52b36945dc4157e83845141abc6b963eed5bb780b27e5e23e2": { "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.263Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.267Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.267Z" } } }, "8184344ce9b79685863100b25d75f907caba31a6f26b64caf68881e98ea41913": { "8fe3205e82057a29dc0d8aaa2e33ec896cd304ef416bcfb7264bf8da1fbaaa77": { "zh": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-29T08:14:39.411Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-29T08:14:39.410Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-29T08:14:39.407Z" } } }, "0c03db74eb0923183ef12e6e957c01e6d8255d17051d0474807d2dfe15494516": { "8d293de1b22941bb10fe562a4e677c7c7472f7d882ef5aadce39c9033dabb63f": { "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.377Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.378Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.375Z" } } }, "a1c0860ae09b803ff5ed9c9a0c438bd6b2800982753e32c40c910f32979fca1d": { "48ad888591a6dabb0298398a02a18436095ab5c603d344f9156ff7e7ccdb28ae": { "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.397Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.395Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.384Z" } } }, "86a43cc92512a5c918f3385b494d3169c660273f3661eb8dafdc49055b720698": { "60b60a413c29322369042c265eefb3d9aa56d79f8c71fe607cd1ac9eeb60e393": { "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.397Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.397Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.386Z" } } }, "036300ef3b2f4858d6615f663b03ca7a594a026409e0fe0ca41882745b846afc": { "1ad91e7f68dcee666ce7f7d2260270095678629c6052b5b84bf68dc6d54020c4": { "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.264Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.262Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.062Z" + "updatedAt": "2025-11-29T08:14:39.263Z" } } }, "586898784b2000de57eead4932f64db3ae6900471f06aee84b184f3bf8efdf12": { "9c727f0fda6cea3eb8d9add0737f40fd7c2a246e0b779e6a2ea7559741c3af0b": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.264Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.264Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.265Z" } } }, @@ -22065,1097 +23448,1108 @@ "jp": { "updatedAt": "2025-11-26T07:24:02.670Z" } + }, + "5962997760b38b2cb309d629f1dcf48964113a84f277bdc508e98c8bad0fa965": { + "zh": { + "updatedAt": "2025-11-29T08:14:39.295Z" + }, + "jp": { + "updatedAt": "2025-11-29T08:14:39.296Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:39.296Z" + } } }, "e79b575c27312875f3076748b2d4de3bfd78216748310c894e316b5c6b915aa6": { "7a7699a4379151bff326d63b86c2e5f5b0c36a7de56625710bbef094f9488e4d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.387Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.396Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.387Z" } } }, "c74acd4897e7b7ee4b2df0bff72a35b3b8acbfe976eaa8215f2fcfc031f94ccf": { "720c459362ca150d27eb7701d7e48ce41817e1142bf4ebb8b4e2a87705715ada": { "ru": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.303Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.308Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.309Z" } } }, "503329b0d4a76ca6bed899e9672f8b552300a0c87af309f4216ae734b9861fd2": { "675e12d63a5beef8dc9c071b80bc5249b9dc320e87ed8e63ab1dba75742d1c49": { "zh": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.303Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.306Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.305Z" } } }, "90f0e15a1b59f060a6f0f952d87af6522508eab261e93dd1ff9d2f135297bc7b": { "b323a03a283828a8dd2bdb1310eabc167e779d51e7e53bc928a0c3475022c6ed": { "zh": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-29T08:14:39.406Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.904Z" + "updatedAt": "2025-11-29T08:14:39.410Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.901Z" + "updatedAt": "2025-11-29T08:14:39.406Z" } } }, "e1777c4c468ab2516b850e57b6f6bc5a611e182371ea737b4494074aa581da40": { "c93f95ca1da1b0eee11a33d644aec21a8b55b826129592b9eba161908812b369": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.343Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.346Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-29T08:14:39.354Z" } } }, "64e0092d1db56a02e6a5bca8f0b5056cf1f521390ec3925bb3e50df81aa7ac85": { "9a5dd87bf7b220294da0bc415b255ea64029a767c79b1e6a895b5d3d57801055": { "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.344Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.345Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.346Z" } } }, "d012409948884982e8bdf1e450327b34af2546383469b4fd132b635459e6f305": { "95aa9403608d32399c22cc7fc263d9ab30a605eea3844947170400f89d7e71d1": { "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.347Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.345Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.343Z" } } }, "00174dfb396f321fadf5749558a865565bf4dae8cc5d6fa8f305ef68a7f1c6b2": { "d2f79ac832b7a2d7aaa410633fb001b9e95f4660cc65da2bdbe34ab52df0894a": { "ru": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.349Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.342Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:39.344Z" } } }, "774db99efcf187fd85ea22f0f07cfb6cf5fb6cc68251b2913b976e914e74a951": { "cc59400f1e7b6cc7c2ce5902dae7bd2a641bff181193f2f3f16b2cc24b094add": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.307Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.311Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.303Z" } } }, "4da7a2a8dcc0e8244d17285e749f8d2f66e7c939010b06d93f9506b5e0443395": { "5d4659d3e6e8c514f951b33a0e387bbd5340061d0fa6ede0b8d63a27a889570a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.349Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.352Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:39.344Z" } } }, "8a9dc951991e7089ccd4e1eedd2df9ce190a4888a63408845057666bec28693d": { "3ea6e01fdab2aaecd5561d6a3738320c4c955d0937ec5157cb9ac2e69e3fa30b": { "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.375Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.377Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.375Z" } } }, "e0416bafda40f9b0abd3190774a6d8b8b6fecab49f9676913bac6e5e053b382e": { "aa3e533069b101ec06bf29cb5c1935709f54b0a36858f4636f093f238b277647": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.330Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.323Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.340Z" } } }, "6bec8fb9d627bbc8d58479b40c1ff2e2105bf84d0574e514ce2d4a909b35d280": { "9892fa9d4ee47152dab0a70403163228e13146e378a484ac01ec35395c96a186": { "zh": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.395Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.390Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.389Z" } } }, "d600a99ead8b0977fbdf31462c610327f9207f07a47047e4cfafebac76ac6789": { "ba98a569e23d5a0b5a2bee157907242c18d05d010d12a96d4526528db77500b5": { "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.307Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.308Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.327Z" } } }, "6c4d95e5c9add2129eec07c7db776b15731e42064678712cecf1b19d27e9fe1e": { "26bab87ac6555b58f09e971a206121597dc934bf1607e0bc1d1c1ca74b3c8ab5": { "zh": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.307Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.302Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.308Z" } } }, "c97c8d3fc1255144232e48ef1068845cf9a505bf268924eb00d02e4a764b06d4": { "cbf44b30af8d393437b434943a6b72c84ddfbb0c5021ffa6ee01fcee470fce64": { "zh": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-29T08:14:39.289Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-29T08:14:39.288Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-29T08:14:39.289Z" } } }, "aa965228754f809fd54c3e57e8b77d0a2e9c4a048e0e68cef7ae8c333114457a": { "f9ce484d23646e185c37dd955d8f8211aaac0ff9716bb25cc7a6c1dfc7722732": { "zh": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.330Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.337Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.320Z" } } }, "db4a603afaa721633684ab401b86356ad8252b3e4987d3d7f3a1c55750046ef3": { "c71c72e22f263d7e5cb4b6bc6151025b50d1a6999e50ff20143e7d9570eab7e8": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.331Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.333Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.333Z" } } }, "cde7d435635c91652b2386bf1619cb7ad40c1a75333e02d9abeca5d374b5fcd2": { "7ed8aea2f22f07b5e6da1bc31a668115f599b57278bd5f78ed4d027851ee59f9": { "ru": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.331Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.319Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.325Z" } } }, "baa5800841c33574a763c76d84029b7167e28cd0e383b549d3c87bdde30230b1": { "4e66ec48e4681668b3829e07df4225df08079780a33326c20145dbd63d2cf115": { "ru": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.376Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-29T08:14:39.371Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.372Z" } } }, "6999f92f0023fe1dd1e922ddaaf1df722f316e49e43a1f46219683d3add8c812": { "9280cf92c0f64187017d3e623d9d06cf5122c9cca98da66abea3317bbf634e3b": { "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.350Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.341Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.350Z" } } }, "534c97b1abac407b7ffecba5c237d20ca3ad4c270a44ed90b44e77de585a610d": { "7ba7deb86c597b598ca684677abf36c48f1d224dfbe3c8465bb1e2b40a280f81": { "ru": { - "updatedAt": "2025-11-26T07:24:02.667Z" + "updatedAt": "2025-11-29T08:14:39.290Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-29T08:14:39.290Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.293Z" } } }, "2c9a0b8bcdb6bc350cecc5d8a2a8571d9ab75452db549ce31e1fdb37159adb97": { "a30a7c92ea08285c067ff0984feefbb3785f4b1f14d7715bfc668fb4bbc9261f": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.307Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.310Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.307Z" } } }, "89191e0f0f3ac7ad6fcbe90e008723be94527b1dc5730c24b0ef28b7567b621a": { "db61043ee1c3c508cdf7d9dd474714bef6965ab628e609c3b20ddf986ef02cc9": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.338Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.339Z" } } }, "e9514b207fd2f0999e54604bcc5f81ff6fdaee6511cc23ec24b5e33bcbd7a748": { "9824c5507b882758b8df0cd7ac8ec6f8ec745839288f88d8cad0156e2ed55258": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.332Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.321Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.322Z" } } }, "bb75403cac8908b2d1e0f7435d3c432ee901f13dfdca991fb73204120a85338c": { "0a7663696896ca536cf8c5b6b0059cce8944689bcec816f2b5c5b41720cbd804": { "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.350Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.353Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.345Z" } } }, "c66448d10c048389547620c0efc34decc72e9f80bc32daa2c49d957e3c02fa1b": { "1f29d5a37e6fed39b5f9602645e28d9fa470dce74a39a6c598dbd0a16867a37c": { "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.351Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.347Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.679Z" + "updatedAt": "2025-11-29T08:14:39.349Z" } } }, "7a098dff053dea397b97871863eca7199375f5d95f819134c433310d813f3ae4": { "ea322771a5ea71a865948471da4a31d3c932f43e7f418fbd44d17ba4dd564761": { "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-29T08:14:39.290Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.292Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.291Z" } } }, "a36c558e3cc8eb2a3b03c01a4286bfac9d72237977464d90e7395a10cf2209e0": { "94ce7d6626e94f915dc3f8c3c80748074f7c1a750f5800beccd7406817b5d19f": { "zh": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.334Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.339Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.332Z" } } }, "68ae98d78891d0611568e05de511ec72306b7b3511df399280a7ae2c79b3ee06": { "33c7517467d660435f217ea64c4bf7d1325b67636ba929b3ced122cbffac2355": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.264Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.266Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.265Z" } } }, "561284460b1fb2a4c59ce07e83be4fee1a8ff052b66a64ff66141a296715102c": { "30382cd05cdfc447ce68389ab117d0b72fb4faf154b6c67bed6c57d0ed565d98": { "ru": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.352Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.353Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.354Z" } } }, "8b014d0b3ce023d8c15fd8c5eb2d350cacf9cf3c41dd4b69ff25dd2351d35db0": { "891d96677ae497189e4ef48d65804e3b886d35381aa01b9dd409f5c32ee066aa": { "ru": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.352Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.354Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.352Z" } } }, "82fa28546b5677c4d98f580e1e222959c159ae3d9905e0932fbfebe2ebde8218": { "5207e407e3f1eccc511c0aaa51164bd35e4d15543e26e8e004002a81d42f5b90": { "ru": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-29T08:14:39.291Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-29T08:14:39.291Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.293Z" } } }, "9e8c51287c7f24817ec004d3002c1ce3b305ec30df1100b9d028e5ebc63461bd": { "afbdd8bf1a036d21dd54275c5ec03df46552510b37adf7a05917d6570967651d": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.309Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.315Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.314Z" } } }, "2e86bca26b2ac693c6c25e4a60919c546b7872ba88d487d37cba83528dd4c1c0": { "82625a723fba7e62c237b3557661bd75bff3e41b4de031a888fc315f70bf8f60": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.334Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.323Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.339Z" } } }, "03f4f6675beb54a72bd7e3d62bec8c07f1c24ef51dcd84e88ba10e86e3a5a9b7": { "eb1beb44798239cd7a4b527f6d7acf65bd7638560f8fda08cbea63789789cbab": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.309Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.305Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.304Z" } } }, "32ffa87be40ab5f31e20d44d8997706429f8284873cee16bf953aa7c8a533e87": { "987df6e0573b5dadab1d721fb8b42546edd8a72a4c4ef547c90da774cfdc0384": { "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.335Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.327Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.329Z" } } }, "a2e55a90379e6ffc005d5cc760c9bf50e3a6631ad77cd354c2d442860ad851ea": { "a0801c6bb244ad72c6b1b26969b590462545f49f3c2c06d4078fe79f62be5841": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.310Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.311Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.306Z" } } }, "9d795e71c1e5b5159a55b2c1f0aef5b2b5ba275de3636e7962e76d9cac324863": { "e14d02d5377204ff07364b01b4777caa9edee903a191d54d14cd619978c349a5": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.310Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.312Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.315Z" } } }, "459dcfc8cfcb0c798eda34051037eaf36f0e8bdbf413d5ca0f86faf6d1ae4e24": { "f469d58719f2670441a26ddce21a692caf6821dcb698ad90eba442b062adb5aa": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.337Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.324Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.074Z" + "updatedAt": "2025-11-29T08:14:39.333Z" } } }, "6aaffe8268bf79e8f4faf87000cd0de5d6453e5299b00696c4cf31cfb8d96d5b": { "ddba7dec037a2fad87464c00483c81011ad76357b5c4963561b6fb33a626d74e": { "zh": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.274Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.273Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.063Z" + "updatedAt": "2025-11-29T08:14:39.265Z" } } }, "299acd2896dbdcc7fc9ec56b51b4a1990b56dd0fe41acb3e57f9cae1bd915ac7": { "99ca8337276f2850a682286f3aa13f69597377997f305892b1182845150c4e2e": { "zh": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.379Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-29T08:14:39.370Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.689Z" + "updatedAt": "2025-11-29T08:14:39.362Z" } } }, "3246877b14617a738e90832de040052391f7c8fc094ca44b2455eef30fbf314e": { "d6d3906022ccc3319721785ef9aa9f57093fc737336e72eddec0d952f2c844d7": { "zh": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.412Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.413Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.405Z" } } }, "3635e79a2e76bb297d10c5dd4637f4fd94275c1ba1081c959a4f02a8d8049bf6": { "69cff4cb3337c445b437475f175d0c1ab8c863e57aa050035a2284326ea56533": { "zh": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.342Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.346Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.353Z" } } }, "c3ae4d87db64f55d260d37bff7580e0a1ff638a6c1bebc984889a0f53e882bd1": { "c8ec9fc9c8400c3e7fc2098760f4d554623fe5eaab093ad69821218853b4e3b8": { "ru": { - "updatedAt": "2025-11-26T07:24:02.673Z" + "updatedAt": "2025-11-29T08:14:39.302Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.313Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.313Z" } } }, "7974b5d9fc7e953fa4aecd07c2f6f9176f90a9a89310ebe7fcb27dff7fdf734a": { "b66740bd12022ccefeb425eba94ee09c08528b3a5b347793bb597e953e4f21b2": { "ru": { - "updatedAt": "2025-11-26T07:24:12.077Z" + "updatedAt": "2025-11-29T08:14:39.342Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.351Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.350Z" } } }, "0d605e87bc30a8f48c930071ba0ea5cd2b5ebdbd6763536c9fdc4f2ed918a40d": { "8b7aa2cd071eea2c995cc398e7fb600f77f1f9a7fa0450f42449838022126464": { "ru": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.309Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.313Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.676Z" + "updatedAt": "2025-11-29T08:14:39.308Z" } } }, "51f9cca65edfee082630f0b1fb8e3a29f4ab177d7d5452a9abc2e1f9b56e3c53": { "96fa3e43effb19ba6584f2d1ae472b68548bb3a136e72cc23135e36bd3bd7b5a": { "zh": { - "updatedAt": "2025-11-26T07:24:02.697Z" + "updatedAt": "2025-11-29T08:14:39.378Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.380Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.372Z" } } }, "0f09f5442f4b4bac183a39fe7c4ebb5f27e3e93b8fbdd22c1bf04db43e598523": { "8dd4d3197218cd45163cf27ba0c5e57b39a8db91e1ae9ccb34b1ee6871418db0": { "ru": { - "updatedAt": "2025-11-26T07:24:02.668Z" + "updatedAt": "2025-11-29T08:14:39.291Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.292Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-29T08:14:39.293Z" } } }, "04bd894d54eb7791d6c20efe6b82643d60ba5f94079895df60cd832a967a8b72": { "b4b191db3e0a1686174b935b4a408eec87a5d10accead9bfce53f6fdb0c78147": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.310Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.311Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.311Z" } } }, "ee7cf7082c51841ba27fc19b990495b38b92128a79d2a323ecbca6bb723f0e8e": { "7deda54447cba9acce76845c952c2c7f4ee86488c276f4a335c96e4c55dc6bcd": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.338Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.337Z" } } }, "cbfa6856b07360063ce643d5dc0c1d3cc2418e2639de759af00c6f665fc517e4": { "0140ef2e17d32f74a3b543e6327533884c8025b049e9fdc7af2a729378577a5e": { "ru": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.336Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.337Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.076Z" + "updatedAt": "2025-11-29T08:14:39.340Z" } } }, "c91f782ae583639337bdc49114576cfdd9c9355b699a68919bf1bd023713faef": { "bec2f91a18ab29d790a84a8d99cfc87824936240769c4e0889827b57e2472e09": { "zh": { - "updatedAt": "2025-11-26T07:24:02.704Z" + "updatedAt": "2025-11-29T08:14:39.397Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.391Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.701Z" + "updatedAt": "2025-11-29T08:14:39.389Z" } } }, "abdc65a73d328d0f6587eba73db81db937a7f67106eeb840b67ebf52e35e6379": { "3d443c4abc73eddf8e334725cfa0abf5cbeb70f4475566a8d40953e253b629bc": { "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.314Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.314Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.312Z" } } }, "6f7b91f9de26806b740498adc5e643a9126c17702c3c29691e1666087c366cf0": { "a1903aea52e9e31c6386a9cb6e37a8b774a6be1ff6724d1c7674a90cee7e9059": { "ru": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.314Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.315Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.068Z" + "updatedAt": "2025-11-29T08:14:39.312Z" } } }, "fae1576558dadb0c932329389ce8fbcbeee0d35379cb6c996673cd93aad35a13": { "3c3975cd182172060059f7637ba3d00c8b28a90dce27de128e912a0c986041da": { "ru": { - "updatedAt": "2025-11-26T07:24:02.682Z" + "updatedAt": "2025-11-29T08:14:39.355Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-29T08:14:39.355Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.681Z" + "updatedAt": "2025-11-29T08:14:39.352Z" } } }, "3f14c9de32cc2309c896fed678c5b28a7dbf39af5a00bc45e0fd013b9c4d05d5": { "30c6636556ee6c7c353538457f6b3b57a9f5c21c15e651b2997b487922e38fc3": { "ru": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.413Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-29T08:14:39.408Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.412Z" } } }, "6bed7e7a83ecb81ba1dd2bac10ae908f5dca2985a1372a02ea6f37edc19fb8d6": { "d69df1442a7aad94ba9096815aac2b779c3a23eed85dba10c8cf5e643215acf7": { "ru": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-29T08:14:39.356Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-29T08:14:39.357Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.683Z" + "updatedAt": "2025-11-29T08:14:39.356Z" } } }, "3e0601c102f0cd71b8eb284da75b1cb579b66391d37fa681cf6d4bc5e1cc1d58": { "4eeb3b260eb5599be93bf2151af54a52820bc5b7145e432d1d16218f6b0c376b": { "zh": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-29T08:14:39.294Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-29T08:14:39.294Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.671Z" + "updatedAt": "2025-11-29T08:14:39.295Z" } } }, "8b38fc05c0c3883d9a4ec8bbf5caa1bbc4260e946b23ad31bf5c97563bd88229": { "58e3bcd0e949f466dc2d6e918d912d126143beea61afa2ee594bb6cb9d60e88d": { "zh": { - "updatedAt": "2025-11-26T07:24:02.670Z" + "updatedAt": "2025-11-29T08:14:39.295Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.666Z" + "updatedAt": "2025-11-29T08:14:39.288Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.669Z" + "updatedAt": "2025-11-29T08:14:39.292Z" } } }, "11f0d2e2fe5381cbdabf5c8d911e42f98d764106a83601de0c96203590ad4cc5": { "125142acfba42f104cc8a667d2cd001ded4684ba6896567aa756cbbcdfe1e975": { "zh": { - "updatedAt": "2025-11-26T07:24:12.069Z" + "updatedAt": "2025-11-29T08:14:39.316Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.316Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.318Z" } } }, "6152b4089faf21cb920f0b0e0f015947f4aa6a6539cc24579a8054117329f175": { "58de10c3764c8ae20317dce26cff68631d85677a41b3f5dbd50c51245bb6c66d": { "zh": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.268Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.270Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.064Z" + "updatedAt": "2025-11-29T08:14:39.268Z" } } }, "bca14edd411fa9f3a8a9611aaacff6972d87258f38acd6410fdf5b4d4cdbaa55": { "6bdb09ec322273b515c242a0a196c778ff9876e649fa65392b8031cb787249d3": { "zh": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-29T08:14:39.249Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.057Z" + "updatedAt": "2025-11-29T08:14:39.250Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.250Z" } } }, "90b37c7973739db627d82b16799b1a59ebcb776db33ad8298491b0bbbed6c3de": { "73ba6fad372ebd5b4ddf82f283b3e7b1f303a8f02d8ddee4e4e8d3c0290b12ee": { "zh": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.250Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.252Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.251Z" } } }, "5dcc85853637a46f967236f293c74ce6629e743899ffb1d793ba5c7ffae90dbf": { "6777f02cb4aba6cf43d71fcfd0acc7ed50b7a116661de2ebd8193b82df093941": { "zh": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.225Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.228Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.226Z" } } }, "094593271a536e71ddc700495b0cf0f1048d6ab6c2dad60a929934f0798430ea": { "3dd2ef060c7a1cfaa56099a332e54eba203c50d4214e0f5bf98d281ff70e8d9e": { "ru": { - "updatedAt": "2025-11-26T07:24:02.654Z" + "updatedAt": "2025-11-29T08:14:39.225Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.231Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.229Z" } } }, "27e2bd6338f55fdbb9b18fcf67e0a0a67489a58d4e1c0e9ebb6902b05fc36aac": { "8929ff1edb2d47de0f53425237359fc7c4a1036ef99e001d0d30c2d13140051c": { "ru": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-29T08:14:39.227Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-29T08:14:39.227Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.653Z" + "updatedAt": "2025-11-29T08:14:39.223Z" } } }, "19a3aba2f96aa29e64f1d6662e4c6e8d99c98fade3c4d0aa0badaed1632f4c7c": { "dc4c51508caf2bb72e5375d6abe27b369e6eacb14cc00c78c196a37458e79501": { "ru": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.252Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.254Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.060Z" + "updatedAt": "2025-11-29T08:14:39.255Z" } } }, "dfad0bc3b6417f406a00ff9ef3820a57dfc8f664400a7ce0134d81da437d7e07": { "79123cc58b0a88edb3bafb181767cf704d4908d66876b9628ebccd1e31728887": { "zh": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-29T08:14:39.227Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.229Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.652Z" + "updatedAt": "2025-11-29T08:14:39.222Z" } } }, "4b87a5344a9b716648c77706eed8254331cf4a6ce21d8a43d267f67270734d1f": { "fb4dfb8f9e647f53e63097ab00045af768eb9222f514d424b3a57634d8f3681e": { "ru": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.253Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.059Z" + "updatedAt": "2025-11-29T08:14:39.254Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.058Z" + "updatedAt": "2025-11-29T08:14:39.251Z" } } }, "f0a5d6e46b2ddd583ab900563a42b7687a1b4924afd5d0cb5260268c8952f6d0": { "3a8f69d0d17e9065a46d4d7456a503262e2f2a05ac3d4b37f49520b5f716b1c3": { "zh": { - "updatedAt": "2025-11-26T07:24:02.692Z" + "updatedAt": "2025-11-29T08:14:39.369Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.693Z" + "updatedAt": "2025-11-29T08:14:39.371Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.688Z" + "updatedAt": "2025-11-29T08:14:39.357Z" } } }, "9027438a5e9e30a2c6e8e4d197b479cebf29c05aaa3a716589f591c0ff697c0d": { "d5d6ea5e34429a4a6f22bad136f5d5eb712bbb922cae22a6c870b906c7befadf": { "zh": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-29T08:14:39.407Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:18.902Z" + "updatedAt": "2025-11-29T08:14:39.408Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.706Z" + "updatedAt": "2025-11-29T08:14:39.402Z" } } }, "492b567700669f175480e40ecf1c553c463e77a0bb36e30e76eb3628c35e7db3": { "84c653bd2e6590cbd982437c2304ff4818581c1e60afb256437642c4a3dc66c5": { "ru": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:39.344Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.346Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.680Z" + "updatedAt": "2025-11-29T08:14:39.351Z" } } }, "dbc3d877611d9d2c9a27f2ea076decc1afc5907f3c3c02044504a307308653af": { "79b34ec963ce2ab8bc60d33c073caf0fc42c9aed7f3b97c1ed638390938960de": { "zh": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.321Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.327Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.330Z" } } }, "e5b56f33a8458d42151bcbd638d4692704a7d1f97fb2c4ed94143ff1e460a418": { "7eab19fd44668e93c10760c5fe2d6a1421e507a9cec55dfd91ed0fcab85c27f1": { "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.321Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.325Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.320Z" } } }, "3f3b14a0c691ae2b5345864fd4ad20a184225db1e35ffcbd455da1aeec5f0d48": { "a9c8fa4f53951ce4026e170171a0517a80777e9037e5bb2f16eab83d3ffaa9cc": { "zh": { - "updatedAt": "2025-11-26T07:24:02.657Z" + "updatedAt": "2025-11-29T08:14:39.231Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.656Z" + "updatedAt": "2025-11-29T08:14:39.228Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.655Z" + "updatedAt": "2025-11-29T08:14:39.226Z" } } }, "5b41c30593068b713e26045c49b89ef31bda4b2d25564fc71eeafadaa3a88b3b": { "ecb137fd1463f816c7efffc5bf4c604e7cfa7735755e22327018e286ec755267": { "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.391Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.394Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.699Z" + "updatedAt": "2025-11-29T08:14:39.385Z" } } }, "7c145e871f942571130b488686f2c93299c7784ad34d23a45c99e2947f75208c": { "193be2e12900fc92f5c6cf9d55c9d419bf67397ce7c166154cf4356eaee3bb11": { "zh": { - "updatedAt": "2025-11-26T07:24:02.702Z" + "updatedAt": "2025-11-29T08:14:39.392Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:02.703Z" + "updatedAt": "2025-11-29T08:14:39.394Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.700Z" + "updatedAt": "2025-11-29T08:14:39.385Z" } } }, "f5b83279dab37d495f5c4fd259883e2f59a812c65ccc8ed0c351f21a2028e710": { "caa363689f97df04d5bdb8cc80dfede581f616ede687804ff5915657268592d2": { "ru": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-29T08:14:39.409Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:18.903Z" + "updatedAt": "2025-11-29T08:14:39.409Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:18.905Z" + "updatedAt": "2025-11-29T08:14:39.412Z" } } }, "bdeb28bdbd403e8a7dbfd53a18daf2d16a5ec80e2b272afff63299b084ee54d4": { "8d2b2934162408394b787a0c9376fd5fc5d3b70e883799983cb40e9cd3caec2b": { "ru": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.373Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.694Z" + "updatedAt": "2025-11-29T08:14:39.372Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.698Z" + "updatedAt": "2025-11-29T08:14:39.379Z" } } }, "6d9be1cdfeaef3b95b6937fe4da26361e0723bbb44069a88774c3f6c426953ff": { "27c7a63e2afca841ae5e7d6fe8b9f6f3c513769116043f854361c07302afa76a": { "ru": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.304Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.675Z" + "updatedAt": "2025-11-29T08:14:39.305Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:02.674Z" + "updatedAt": "2025-11-29T08:14:39.304Z" } } }, "08f3b123bce337ae576d91effb4c4e0aa8ce5818f4196baa0ba59915bd0d269e": { "a29ff4b6f7e821d9ae449a998417a11cc1c6705210186befa92aa45136de5da9": { "ru": { - "updatedAt": "2025-11-26T07:24:12.071Z" + "updatedAt": "2025-11-29T08:14:39.323Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.327Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.075Z" + "updatedAt": "2025-11-29T08:14:39.334Z" } } }, "0e3c84ac0dcb64d166a9e4cad32d3420219fe50fe305e36aa358456c172e2cf7": { "318568dae18d539030ba9900a07a5c387e0ffd38a7b84468080ad1adcdccfc39": { "ru": { - "updatedAt": "2025-11-26T07:24:02.677Z" + "updatedAt": "2025-11-29T08:14:39.345Z" }, "zh": { - "updatedAt": "2025-11-26T07:24:02.678Z" + "updatedAt": "2025-11-29T08:14:39.347Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.078Z" + "updatedAt": "2025-11-29T08:14:39.344Z" } } }, "808e737b87d86c00037ee9499555e8d37bc7fd2e51f5ef796a4a104d5f453b14": { "4719caa724ba0e2a9f5dae16a0fe1e64ccb82cd37762f0d2649a253c1acc65eb": { "zh": { - "updatedAt": "2025-11-26T07:24:12.072Z" + "updatedAt": "2025-11-29T08:14:39.325Z" }, "ru": { - "updatedAt": "2025-11-26T07:24:12.073Z" + "updatedAt": "2025-11-29T08:14:39.328Z" }, "jp": { - "updatedAt": "2025-11-26T07:24:12.070Z" + "updatedAt": "2025-11-29T08:14:39.320Z" } } }, @@ -23165,6 +24559,19 @@ "updatedAt": "2025-11-26T07:19:33.942Z" } } + }, + "66bbf0d8525a651b70357530fa66ca0f30073bb1460c57979838338b1c0d8749": { + "9a8d534c4d4974d982e6c1d6d31787e905d1215b8eade3bf1524a2e15a6fa2c0": { + "jp": { + "updatedAt": "2025-11-29T08:14:50.770Z" + }, + "ru": { + "updatedAt": "2025-11-29T08:14:50.770Z" + }, + "zh": { + "updatedAt": "2025-11-29T08:14:50.771Z" + } + } } } } 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-blog/current/Insert_select_settings_tuning.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/Insert_select_settings_tuning.mdx index 8796bb08cf3..c22a0c05d58 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/Insert_select_settings_tuning.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/Insert_select_settings_tuning.mdx @@ -9,35 +9,34 @@ tags: ['設定', 'エラーと例外'] {/* トランケート */} - ## Question \{#question\} -`INSERT...SELECT` ステートメントを実行すると、TOO_MANY_PARTS(too many parts)エラーが発生します。 +`INSERT...SELECT` ステートメントを実行すると、TOO_MANY_PARTS(too many parts)エラーが発生します。 -この問題を解決するにはどうすればよいですか? +この問題を解決するにはどうすればよいですか? ## 回答 \{#answer\} このエラーを回避するために調整可能な設定の一部を以下に示します。これは ClickHouse のエキスパートレベルのチューニングであり、ここで示す値は、適用先となる ClickHouse Cloud サービスまたはオンプレミスクラスターの仕様を十分に理解したうえでのみ設定すべきです。そのため、これらの値を「すべてに当てはまる一律の推奨値」として受け取らないでください。 -[max_insert_block_size](https://clickhouse.com/docs/operations/settings/settings#settings-max_insert_block_size) = `100_000_000`(デフォルト `1_048_576`) +[max_insert_block_size](https://clickhouse.com/docs/operations/settings/settings#settings-max_insert_block_size) = `100_000_000`(デフォルト `1_048_576`) 約 100 万から 1 億に増やすことで、より大きなブロックを形成できるようになります。 注意: この設定は、サーバー側でブロックを形成する場合にのみ適用されます。つまり、HTTP インターフェイス経由の INSERT には適用されますが、clickhouse-client には適用されません。 -[min_insert_block_size_rows](https://clickhouse.com/docs/operations/settings/settings#min-insert-block-size-rows) = `100_000_000`(デフォルト `1_048_576`) +[min_insert_block_size_rows](https://clickhouse.com/docs/operations/settings/settings#min-insert-block-size-rows) = `100_000_000`(デフォルト `1_048_576`) 約 100 万から 1 億に増やすことで、より大きなブロックを形成できるようになります。 -[min_insert_block_size_bytes](https://clickhouse.com/docs/operations/settings/settings#min-insert-block-size-bytes) = `500_000_000`(デフォルト `268_435_456`) +[min_insert_block_size_bytes](https://clickhouse.com/docs/operations/settings/settings#min-insert-block-size-bytes) = `500_000_000`(デフォルト `268_435_456`) 268.44 MB から 500 MB に増やすことで、より大きなブロックを形成できるようになります。 -[parts_to_delay_insert](https://clickhouse.com/docs/operations/settings/merge-tree-settings#parts-to-delay-insert) = `500`(デフォルト `150`) +[parts_to_delay_insert](https://clickhouse.com/docs/operations/settings/merge-tree-settings#parts-to-delay-insert) = `500`(デフォルト `150`) 単一パーティション内のアクティブなパーツ数がしきい値に達したときに、INSERT が意図的に遅延されないよう、この値を増やします。 -[parts_to_throw_insert](https://clickhouse.com/docs/operations/settings/merge-tree-settings#parts-to-throw-insert) = `1500`(デフォルト `3000`) +[parts_to_throw_insert](https://clickhouse.com/docs/operations/settings/merge-tree-settings#parts-to-throw-insert) = `1500`(デフォルト `3000`) この値を増やすと、一般的にはテーブルに対するクエリ性能に影響しますが、データ移行の用途であれば問題ありません。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/ODBC-authentication-failed-error-using-PowerBI-CH-connector.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/ODBC-authentication-failed-error-using-PowerBI-CH-connector.mdx index d1ad911a316..9adf54592d8 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/ODBC-authentication-failed-error-using-PowerBI-CH-connector.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/ODBC-authentication-failed-error-using-PowerBI-CH-connector.mdx @@ -13,8 +13,7 @@ import powerbi_error from "@site/static/images/knowledgebase/powerbi_odbc_authen {/* 省略 */} - -## 質問 +## 質問 \{#question\} コネクタを使用して Power BI から ClickHouse に接続しようとすると、認証エラーが発生します。 @@ -32,7 +31,6 @@ ClickHouseがインストールされているサーバー上の /etc/clickhouse Power BI ODBC 認証エラーのダイアログ - ## 回答 \{#answer\} ClickHouse ODBC Driver をバージョン [1.4.1](https://github.com/ClickHouse/clickhouse-odbc/releases/tag/1.4.1.20250523) に更新してください。 @@ -41,6 +39,6 @@ ClickHouse ODBC Driver をバージョン [1.4.1](https://github.com/ClickHouse/ 接続には専用のユーザーアカウントを使用し、パスワードを手動で設定することを推奨します。ClickHouse Cloud を使用していて、`default` ユーザーと同等の管理者レベルのアクセス権が必要な場合は、新しいユーザーを作成し、そのユーザーに `default_role` を割り当ててください。 -詳細については次を参照してください: +詳細については次を参照してください:\ https://clickhouse.com/docs/operations/access-rights#user-account-management https://clickhouse.com/docs/cloud/security/cloud-access-management#database-roles \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/about-quotas-and-query-complexity.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/about-quotas-and-query-complexity.mdx index 2f71c2f2bad..eef3f884781 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/about-quotas-and-query-complexity.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/about-quotas-and-query-complexity.mdx @@ -10,7 +10,6 @@ description: 'クォータとクエリの複雑性は、ユーザーが ClickHou {/* 切り捨て */} - ## クォータとクエリの複雑度について \{#about-quotas-and-query-complexity\} [クォータ](https://clickhouse.com/docs/operations/quotas) と [クエリの複雑度](https://clickhouse.com/docs/operations/settings/query-complexity) は、ユーザーが ClickHouse 上で実行できる操作を制限するための強力な手段です。 @@ -19,7 +18,7 @@ description: 'クォータとクエリの複雑性は、ユーザーが ClickHou このナレッジベース記事では、これら 2 つの異なるアプローチをどのように適用するかの例を示します。 -## サンプルデータ +## サンプルデータ \{#the-sample-data\} 以降の例では、次のような単純なサンプルテーブルを使用します。 @@ -71,8 +70,7 @@ clickhouse-cloud :) SELECT * FROM default.test_table_00006488 LIMIT 5 -- 5 rows in set. Elapsed: 0.003 sec. ``` - -## クォータの使用 +## クォータの使用 \{#using-quotas\} この例では、ロールを作成し、そのロールに対して各 10 秒の間隔ごとに取得できる結果行を最大 10 行に制限するクォータを適用します。 @@ -138,7 +136,6 @@ clickhouse-cloud :) CREATE QUOTA quota_max_10_result_rows_per_10_seconds FOR INT 次に、ユーザー `user_with_quota` としてログインします - ```sql -- クォータがロールを通じて適用されているユーザーとしてログイン clickhouse-cloud :) SELECT user() @@ -238,8 +235,7 @@ clickhouse-cloud :) select now() ユーザーは、新しい 10 行分の結果セットを取得できる「許容量」が再び付与されるまで、さらに 5 秒待つ必要があることに注意してください。 - -## クエリ複雑度の使用 +## クエリ複雑度の使用 \{#using-query-complexity\} この例では、各クエリで返される行数を1行のみに制限するQuery Complexity `SETTING`を適用するロールを作成します。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/add-column.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/add-column.mdx index 5531a22d3ee..dbd7894bbaf 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/add-column.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/add-column.mdx @@ -10,8 +10,7 @@ keywords: ['列の追加'] {/* 省略 */} - -## テーブルにカラムを追加する +## テーブルにカラムを追加する \{#adding-a-column-to-a-table\} ここでは `clickhouse-local` を使用します。 @@ -49,8 +48,7 @@ FROM events; └────────────┴────────┘ ``` - -## 新しいカラムを追加する +## 新しいカラムを追加する \{#adding-a-new-column\} ここでは、`favoriteNumber` という名前の新しいカラムを `Float64` 型で追加するとします。 これは、[`ALTER TABLE...ADD COLUMN`](/sql-reference/statements/alter/column#add-column) 句を使って実行できます。 @@ -87,8 +85,7 @@ INSERT INTO events (name) VALUES ('Tyler'); └────────────┴────────┴────────────────┘ ``` - -## 列のデフォルト値を変更する +## 列のデフォルト値を変更する \{#modifying-a-columns-default-value\} `favoriteNumber` 列の型を [`ALTER TABLE...MODIFY COLUMN`](/sql-reference/statements/alter/column#modify-column) 句を使って別の型に変更すると、興味深い挙動が見られます。 @@ -147,8 +144,7 @@ INSERT INTO events (name) VALUES ('Tanya'); `Tanya` には新しいデフォルト値 `21` が適用されますが、`Alexey` には以前のデフォルト値 `99` がそのまま残ります。 - -## テーブル内のカラム位置の制御 +## テーブル内のカラム位置の制御 \{#controlling-column-position-in-table\} 新しいカラムを追加すると、デフォルトではテーブルの最後に追加されます。 `FIRST` 句と `AFTER` 句を使うことで、カラムを配置する位置を制御できます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/alter-user-settings-exception.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/alter-user-settings-exception.mdx index 36a439005ab..06aa205860c 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/alter-user-settings-exception.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/alter-user-settings-exception.mdx @@ -10,8 +10,7 @@ keywords: ['例外', 'ユーザー設定'] {/* トランケート */} - -## DB::Exception: Cannot update user `default` in users.xml because this storage is readonly. (ACCESS_STORAGE_READONLY) \{#dbexception-cannot-update-user-default-in-usersxml-because-this-storage-is-readonly-access_storage_readonly\} +## DB::Exception: Cannot update user `default` in users.xml because this storage is readonly. (ACCESS_STORAGE_READONLY) \{#dbexception-cannot-update-user-default-in-usersxml-because-this-storage-is-readonly-access_storage_readonly\} ユーザーの設定を変更しようとすると、上記の例外が発生することがあります。 @@ -31,5 +30,4 @@ keywords: ['例外', 'ユーザー設定'] ## SQL ベースのアクセス制御を有効化する \{#enable-sql-driven-access-control\} -default ユーザーに対して、SQL ベースのアクセス制御とアカウント管理を有効にできます。これを有効にするための手順は、この[ページ](/operations/access-rights#enabling-access-control -)で説明されています。 \ No newline at end of file +default ユーザーに対して、SQL ベースのアクセス制御とアカウント管理を有効にできます。これを有効にするための手順は、この[ページ](/operations/access-rights#enabling-access-control)で説明されています。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/are_materialized_views_inserted_asynchronously.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/are_materialized_views_inserted_asynchronously.mdx index 94e823f6765..bcbabb30241 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/are_materialized_views_inserted_asynchronously.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/are_materialized_views_inserted_asynchronously.mdx @@ -10,7 +10,6 @@ keywords: ['マテリアライズドビュー'] {/* 省略 */} - ## マテリアライズドビューへの挿入は同期的に行われますか? \{#are-materialized-views-inserted-synchronously\} **質問:** あるソーステーブルに新しい行が挿入されると、その新しい行はそのソーステーブルに紐づくすべてのマテリアライズドビューにも送られます。マテリアライズドビューへの挿入は同期的に実行されますか?つまり、サーバーからクライアントへ挿入成功が通知された時点で、すべてのマテリアライズドビューが完全に更新され、クエリに利用可能になっていることを意味しますか? diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/async_vs_optimize_read_in_order.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/async_vs_optimize_read_in_order.mdx index f548bb8a701..12437a9e058 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/async_vs_optimize_read_in_order.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/async_vs_optimize_read_in_order.mdx @@ -15,12 +15,11 @@ import optimize_read from "@site/static/images/knowledgebase/optimize_read.png"; {/* 省略 */} - ## 同期データ読み取り \{#synchronous-data-reading\} 新しい設定 `allow_asynchronous_read_from_io_pool_for_merge_tree` によって、読み取りスレッド(ストリーム)の数を、クエリ実行パイプラインの残りの処理で使用されるスレッド数よりも多く設定できます。 -通常、[max_threads](https://clickhouse.com/docs/operations/settings/settings/#settings-max_threads) 設定は、並列読み取りスレッド数と並列クエリ処理スレッド数を[制御](https://clickhouse.com/company/events/query-performance-introspection)します。 +通常、[max_threads](https://clickhouse.com/docs/operations/settings/settings/#settings-max_threads) 設定は、並列読み取りスレッド数と並列クエリ処理スレッド数を[制御](https://clickhouse.com/company/events/query-performance-introspection)します。 同期データ読み取りの図 @@ -28,26 +27,26 @@ import optimize_read from "@site/static/images/knowledgebase/optimize_read.png"; ### 非同期データ読み取り \{#asynchronous-data-reading\} -新しい設定 [allow_asynchronous_read_from_io_pool_for_merge_tree](https://github.com/ClickHouse/ClickHouse/pull/43260) により、**CPU リソースが限られた ClickHouse Cloud サービスでのコールドクエリを高速化**し、**I/O ボトルネックとなるクエリのパフォーマンスを向上**させるために、読み取りスレッド(ストリーム)の数を、クエリ実行パイプラインの残りの部分で使用されるスレッド数より多く設定できるようになりました。 -この設定が有効な場合、読み取りスレッドの数は [max_streams_for_merge_tree_reading](https://github.com/ClickHouse/ClickHouse/pull/43260) 設定によって制御されます。 +新しい設定 [allow_asynchronous_read_from_io_pool_for_merge_tree](https://github.com/ClickHouse/ClickHouse/pull/43260) により、**CPU リソースが限られた ClickHouse Cloud サービスでのコールドクエリを高速化**し、**I/O ボトルネックとなるクエリのパフォーマンスを向上**させるために、読み取りスレッド(ストリーム)の数を、クエリ実行パイプラインの残りの部分で使用されるスレッド数より多く設定できるようになりました。 +この設定が有効な場合、読み取りスレッドの数は [max_streams_for_merge_tree_reading](https://github.com/ClickHouse/ClickHouse/pull/43260) 設定によって制御されます。 非同期データ読み取りの図 データは、異なるカラムから非同期かつ並列に読み取られます。 -また、読み取りスレッド(ストリーム)の数と、クエリ実行パイプラインの残りの部分で使用されるスレッド数との比率を設定するための [max_streams_to_max_threads_ratio](https://github.com/ClickHouse/ClickHouse/pull/43260) 設定も存在します。ただし、ベンチマークでは `max_streams_for_merge_tree_reading` 設定ほどの効果はありませんでした。 +また、読み取りスレッド(ストリーム)の数と、クエリ実行パイプラインの残りの部分で使用されるスレッド数との比率を設定するための [max_streams_to_max_threads_ratio](https://github.com/ClickHouse/ClickHouse/pull/43260) 設定も存在します。ただし、ベンチマークでは `max_streams_for_merge_tree_reading` 設定ほどの効果はありませんでした。 -### optimize_read_in_order の場合はどうなりますか? \{#what-about-optimize_read_in_order\} +### optimize_read_in_order の場合はどうなりますか? \{#what-about-optimize_read_in_order\} -[optimize_read_in_order 最適化](https://clickhouse.com/docs/sql-reference/statements/select/order-by/#optimization-of-data-reading)を有効にすると、クエリのソート順がディスク上のデータの物理的な並び順を反映している場合、ClickHouse はメモリ内でのデータの再ソート処理を[省略](https://clickhouse.com/blog/clickhouse-faster-queries-with-projections-and-primary-indexes)できます。**ただし、そのためにはデータを順序どおりに読み出す必要があります(非同期読み取りとは対照的です)。** +[optimize_read_in_order 最適化](https://clickhouse.com/docs/sql-reference/statements/select/order-by/#optimization-of-data-reading)を有効にすると、クエリのソート順がディスク上のデータの物理的な並び順を反映している場合、ClickHouse はメモリ内でのデータの再ソート処理を[省略](https://clickhouse.com/blog/clickhouse-faster-queries-with-projections-and-primary-indexes)できます。**ただし、そのためにはデータを順序どおりに読み出す必要があります(非同期読み取りとは対照的です)。** 順序どおりの読み取り最適化を示す図 -### optimize_read_in_order は非同期読み取りよりも優先される \{#optimize_read_in_order-has-precedence-over-asynchronous-reading\} +### optimize_read_in_order は非同期読み取りよりも優先される \{#optimize_read_in_order-has-precedence-over-asynchronous-reading\} ClickHouse が `optimize_read_in_order optimization` を適用できると判断した場合、`allow_asynchronous_read_from_io_pool_for_merge_tree` 設定は無視されるか、無効化されます。 -### 上記の内容をすべて踏まえた例 +### 上記の内容をすべて踏まえた例 \{#example-demonstrating-all-of-the-above\} * [UK Property Price Paid テーブル](https://clickhouse.com/docs/getting-started/example-datasets/uk-price-paid) を作成してデータをロードする @@ -139,7 +138,6 @@ SETTINGS * `optimize_read_in_order optimization` を適用できる場合、 非同期読み取り用に 60 個、残りのクエリ実行パイプライン用に 20 個のスレッドを使用するクエリパイプラインを確認する - ``` EXPLAIN PIPELINE SELECT * diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-clickpipes.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-clickpipes.mdx index 6e094550f38..a6e7d92dadf 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-clickpipes.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-clickpipes.mdx @@ -10,7 +10,6 @@ keywords: ['AWS PrivateLink', 'プライベート RDS', 'ClickPipes'] {/* 切り捨て */} - ## ClickPipes 用にプライベート RDS を公開するための AWS PrivateLink セットアップ \{#aws-privatelink-setup-to-expose-private-rds-for-clickpipes\} ClickPipes からプライベート RDS にアクセスできるようにするために、AWS PrivateLink 経由で公開するセットアップ手順です。クロスリージョンアクセスにも対応します。 @@ -26,46 +25,48 @@ ClickPipes からプライベート RDS にアクセスできるようにする RDS インスタンス向けの **VPC エンドポイントサービス** を作成するには、次の手順に従います。エンドポイントサービスが必要な RDS インスタンスが複数ある場合は(インスタンスごとに異なるリスナーポートを使用している場合も含めて)、これらの手順を繰り返してください。 1. VPC の特定および [NLB の作成](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html) - - 対象の VPC を特定し、Network Load Balancer (NLB) を作成します。NLB はインターネット向け(public)ではなく、内部向け(private)である必要がある点に注意してください。 + * 対象の VPC を特定し、Network Load Balancer (NLB) を作成します。NLB はインターネット向け(public)ではなく、内部向け(private)である必要がある点に注意してください。 2. ターゲットグループの設定 - - ターゲットグループは、RDS インスタンスのエンドポイント IP とポート(通常、PostgreSQL は 5432、MySQL は 3306)を指すように設定します。 - :::note + * ターゲットグループは、RDS インスタンスのエンドポイント IP とポート(通常、PostgreSQL は 5432、MySQL は 3306)を指すように設定します。 + + :::note + + 新しい RDS エンドポイント IP でターゲットグループを更新する処理を自動化したい場合は、AWS Lambda 関数やその他の自動化ツールを使用できます。 + この目的で使用できる Terraform モジュールの 1 つとしては、[こちら](https://github.com/MaterializeInc/terraform-aws-rds-privatelink) があります。 - 新しい RDS エンドポイント IP でターゲットグループを更新する処理を自動化したい場合は、AWS Lambda 関数やその他の自動化ツールを使用できます。 - この目的で使用できる Terraform モジュールの 1 つとしては、[こちら](https://github.com/MaterializeInc/terraform-aws-rds-privatelink) があります。 + ::: - ::: - - **重要**: DB Cluster / Aurora の場合に使用する RDS インスタンスエンドポイントは、共通(クラスター)エンドポイントではなく WRITER エンドポイント **のみ** を使用してください。 - - NLB による TLS 終端を回避するため、プロトコルには TCP を使用していることを確認してください。 + * **重要**: DB Cluster / Aurora の場合に使用する RDS インスタンスエンドポイントは、共通(クラスター)エンドポイントではなく WRITER エンドポイント **のみ** を使用してください。 + * NLB による TLS 終端を回避するため、プロトコルには TCP を使用していることを確認してください。 3. リスナーポートの設定 - - ロードバランサーのリスナーポートは、ターゲットグループで使用しているポート(通常、PostgreSQL は 5432、MySQL は 3306)と一致させる必要があります。 + * ロードバランサーのリスナーポートは、ターゲットグループで使用しているポート(通常、PostgreSQL は 5432、MySQL は 3306)と一致させる必要があります。 4. VPC エンドポイントサービスの作成 - - VPC 内で、NLB を指すエンドポイントサービスを作成します。 - - 特定アカウントからの接続要求を承諾できるように設定します。 + * VPC 内で、NLB を指すエンドポイントサービスを作成します。 + * 特定アカウントからの接続要求を承諾できるように設定します。 5. ClickPipes にエンドポイントサービスの利用を許可 - - ClickPipes アカウントがこのエンドポイントサービスを要求できるように権限を付与します。 - - 許可されたプリンシパルとして、次のプリンシパル ID を追加します: - ``` - arn:aws:iam::072088201116:root - ``` + * ClickPipes アカウントがこのエンドポイントサービスを要求できるように権限を付与します。 + * 許可されたプリンシパルとして、次のプリンシパル ID を追加します: + ``` + arn:aws:iam::072088201116:root + ``` 6. NLB で「Enforce Security Group Inbound Rules on Private Link Traffic」を無効化(NLB にセキュリティグループがアタッチされている場合) - - NLB の設定画面で、セキュリティグループがアタッチされている場合は "Enforce Security Group Inbound Rules on Private Link Traffic" 設定を無効にします。 - - Terraform を使用している場合は、NLB に対して `enforce_security_group_inbound_rules_on_private_link_traffic` 属性を `off` に設定します。 - - ClickPipes の VPC から NLB へのトラフィックを許可するには、この設定が**必須**です。 + * NLB の設定画面で、セキュリティグループがアタッチされている場合は "Enforce Security Group Inbound Rules on Private Link Traffic" 設定を無効にします。 + * Terraform を使用している場合は、NLB に対して `enforce_security_group_inbound_rules_on_private_link_traffic` 属性を `off` に設定します。 + * ClickPipes の VPC から NLB へのトラフィックを許可するには、この設定が**必須**です。 7. **任意**: データベースのリージョンが ClickPipes のリージョンと異なる場合のクロスリージョンサポートの有効化 - - VPC コンソールの `Endpoint Services` で、対象のエンドポイントサービスを選択します。 - - `Actions` ボタンをクリックし、`Modify supported Regions` を選択します。 - - エンドポイントサービスへのアクセスを許可したいリージョンを追加します。ClickPipes のリージョン一覧については、[こちら](/integrations/clickpipes#list-of-static-ips) を参照してください。 + * VPC コンソールの `Endpoint Services` で、対象のエンドポイントサービスを選択します。 + * `Actions` ボタンをクリックし、`Modify supported Regions` を選択します。 + * エンドポイントサービスへのアクセスを許可したいリージョンを追加します。ClickPipes のリージョン一覧については、[こちら](/integrations/clickpipes#list-of-static-ips) を参照してください。 8. **MySQL を使用する場合の推奨設定** - - MySQL を使用している場合は、ソースデータベースのパラメータとして `skip_name_resolve=1` を設定することを推奨します。 + * MySQL を使用している場合は、ソースデータベースのパラメータとして `skip_name_resolve=1` を設定することを推奨します。 NLB からのヘルスチェックが繰り返し行われるため、MySQL が NLB ホストをブロックしてしまう場合があります。このパラメータを設定すると DNS ホスト名ルックアップを完全に回避できるため、NLB ホストがブロックされることはありません。RDS を使用している場合、この変更にはインスタンスの再起動が必要です。 ## 接続の開始 \{#initiating-connection\} diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-msk-clickpipes.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-msk-clickpipes.mdx index fe981b48c62..56a15c61b56 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-msk-clickpipes.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/aws-privatelink-setup-for-msk-clickpipes.mdx @@ -10,7 +10,6 @@ keywords: ['AWS PrivateLink', 'MSK', 'ClickPipes'] {/* 省略 */} - ## 概要 \{#overview\} このガイドでは、[ClickPipes reverse private endpoint](/integrations/clickpipes/aws-privatelink#msk-multi-vpc) と併せて使用する **MSK マルチ VPC 環境** のセットアップ方法を説明します。 @@ -22,37 +21,37 @@ MSK クラスターの VPC は、ClickPipes が提供されているリージョ ## マルチ VPC 接続を有効にする \{#enabling-multi-vpc-connectivity\} 1. MSK クラスターに移動します。 - - Amazon MSK コンソールの左側ナビゲーションペインから「Clusters」を選択します。 - - マルチ VPC 接続を設定したい対象の MSK クラスターを選択します。 + * Amazon MSK コンソールの左側ナビゲーションペインから「Clusters」を選択します。 + * マルチ VPC 接続を設定したい対象の MSK クラスターを選択します。 2. MSK マルチ VPC 接続を有効にします - - **Connectivity** タブで **Multi-VPC connectivity** セクションを探します。 - - **Edit** をクリックします。 - - **Turn-on MSK multi-VPC connectivity** オプションを有効にします。 - - 画面の指示に従って設定を完了します。 + * **Connectivity** タブで **Multi-VPC connectivity** セクションを探します。 + * **Edit** をクリックします。 + * **Turn-on MSK multi-VPC connectivity** オプションを有効にします。 + * 画面の指示に従って設定を完了します。 3. ClickPipes アカウントプリンシパルをクラスターのポリシーに追加します - - **Configuration** タブに移動します。 - - **Cluster policy** セクションで **Edit** をクリックします。 - - **IAM policy** に `arn:aws:iam::072088201116:root` を含めます。例: - ```json - { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Principal": { - "AWS": [ - "arn:aws:iam::072088201116:root" - ] - }, - "Action": [ - "kafka-cluster:Connect", - "kafka-cluster:DescribeCluster", - "kafka-cluster:ListClusters" - ] - } - ] - } - ``` + * **Configuration** タブに移動します。 + * **Cluster policy** セクションで **Edit** をクリックします。 + * **IAM policy** に `arn:aws:iam::072088201116:root` を含めます。例: + ```json + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "AWS": [ + "arn:aws:iam::072088201116:root" + ] + }, + "Action": [ + "kafka-cluster:Connect", + "kafka-cluster:DescribeCluster", + "kafka-cluster:ListClusters" + ] + } + ] + } + ``` ## リバースプライベートエンドポイントの作成 \{#creating-reverse-private-endpoint\} diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/backing_up_a_specific_partition.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/backing_up_a_specific_partition.mdx index da0fd3d5804..edd2acb5ef2 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/backing_up_a_specific_partition.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/backing_up_a_specific_partition.mdx @@ -10,12 +10,11 @@ keywords: ['バックアップ', 'パーティション'] {/* 切り捨て */} - ## 質問 \{#question\} ClickHouseで特定のパーティションだけをバックアップするにはどうすればよいですか? -## 回答 +## 回答 \{#answer\} 以下の例では、[docker compose examples](https://github.com/ClickHouse/examples/blob/main/docker-compose-recipes/README.md) ページに掲載されている S3(Minio)ディスクの[設定](https://github.com/ClickHouse/examples/blob/main/docker-compose-recipes/recipes/ch-and-minio-S3/README.md)を使用しています。 @@ -138,7 +137,6 @@ Ok. バックアップから、ID が `1` のパーティションだけを復元します: - ``` ch_minio_s3 :) RESTORE TABLE my_table PARTITION 1 FROM Disk('s3','backups/'); diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/calculate-pi-using-sql.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/calculate-pi-using-sql.mdx index 54d6912d00f..2cea4aa9887 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/calculate-pi-using-sql.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/calculate-pi-using-sql.mdx @@ -10,8 +10,7 @@ keywords: ['円周率の計算', 'SQL'] {/* 切り捨て */} - -## 円周率の日です!SQLを使用して円周率を計算する +## 円周率の日です!SQLを使用して円周率を計算する \{#its-pi-day-lets-calculate-pi-using-sql\} 円周率の日おめでとうございます!ClickHouseのSQLクエリを使って円周率を計算してみるのは面白いのではないかと考えました。これまでに考案した内容は以下の通りです... diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/calculate_ratio_of_zero_sparse_serialization.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/calculate_ratio_of_zero_sparse_serialization.mdx index f154b22936f..e9404ddbbbf 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/calculate_ratio_of_zero_sparse_serialization.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/calculate_ratio_of_zero_sparse_serialization.mdx @@ -10,8 +10,7 @@ keywords: ['空/ゼロ値比率', '計算'] {/* 途中省略 */} - -## テーブル内の各カラムにおける空値/ゼロ値の比率を計算する方法 +## テーブル内の各カラムにおける空値/ゼロ値の比率を計算する方法 \{#how-to-calculate-the-ratio-of-emptyzero-values-in-every-column-in-a-table\} カラムがスパース(空である、または主にゼロを含む)な場合、ClickHouse はそのカラムをスパース形式でエンコードし、自動的に計算を最適化できます。クエリ処理時にデータを完全に伸長する必要がなくなります。実際、カラムがどの程度スパースかが分かっていれば、[`ratio_of_defaults_for_sparse_serialization` 設定](https://clickhouse.com/docs/operations/settings/merge-tree-settings#ratio_of_defaults_for_sparse_serialization)を使ってその比率を指定し、シリアライゼーションを最適化できます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/cannot-append-data-to-parquet-format.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/cannot-append-data-to-parquet-format.mdx index 91733ef6538..b1443adada1 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/cannot-append-data-to-parquet-format.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/cannot-append-data-to-parquet-format.mdx @@ -10,8 +10,7 @@ keywords: ['Parquet', 'Cannot Append Data'] {/* 切り捨て */} - -## ClickHouse での「Cannot Append Data in Parquet Format」エラーの解消 +## ClickHouse での「Cannot Append Data in Parquet Format」エラーの解消 \{#resolving-cannot-append-data-in-parquet-format-error-in-clickhouse\} ClickHouse で「Cannot append data in format Parquet to file」というエラーが発生していますか? diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/certificate_verify_failed_error.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/certificate_verify_failed_error.mdx index cb83d047e59..82a14bc7db5 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/certificate_verify_failed_error.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/certificate_verify_failed_error.mdx @@ -10,7 +10,6 @@ keywords: ['エラー', 'SSL 証明書', '210'] {/* 途中省略 */} - ## ClickHouse におけるコード 210 の SSL 証明書検証エラーの解決 \{#resolving-ssl-certificate-verify-error-in-clickhouse\} このエラーは通常、次のように報告されます。 @@ -21,10 +20,10 @@ keywords: ['エラー', 'SSL 証明書', '210'] このエラーは、`clickhouse-client` を使用して ClickHouse サーバーへの接続を試みている際に発生します。エラーの原因は次のいずれかです。 -- クライアント設定ファイル `config.xml` に、マシンの CA デフォルトストアにあるルート証明書が含まれていない -- 自己署名証明書または内部 CA 証明書が適切に設定されていない +* クライアント設定ファイル `config.xml` に、マシンの CA デフォルトストアにあるルート証明書が含まれていない +* 自己署名証明書または内部 CA 証明書が適切に設定されていない -## 解決策 +## 解決策 \{#solution\} 内部 CA または自己署名 CA を使用する場合は、クライアントディレクトリ(例: `/etc/clickhouse-client`)内の `config.xml` で CA ルート証明書を設定し、デフォルトの場所から読み込まれるデフォルトのルート CA 証明書を無効にします。 @@ -45,7 +44,6 @@ keywords: ['エラー', 'SSL 証明書', '210'] ``` - ## 追加リソース \{#additional-resources\} -[https://clickhouse.com/docs/interfaces/cli/#configuration_files](https://clickhouse.com/docs/interfaces/cli/#configuration_files) を参照してください \ No newline at end of file +[https://clickhouse.com/docs/interfaces/cli/#configuration_files](https://clickhouse.com/docs/interfaces/cli/#configuration_files) を参照してください \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/change-billing-email.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/change-billing-email.mdx index 0be3e96164e..4d8fe866dc5 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/change-billing-email.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/change-billing-email.mdx @@ -10,7 +10,6 @@ keywords: ['請求担当者の変更', 'ClickHouse Cloud'] {/* 以降を省略 */} - ## 質問 \{#question\} ClickHouse Cloud の Billing Contact(請求担当者)を変更するにはどうすればよいですか? @@ -20,5 +19,5 @@ ClickHouse Cloud の Billing Contact(請求担当者)を変更するには 管理者として請求連絡先を変更するには、以下の手順に従ってください。 1. 新しいユーザーを管理者として Cloud Organization に招待します。 -2. 招待が承諾されたら、ClickHouse Cloud Console の請求ページ(Admin > Billing)に移動し、「Billing contacts」セクションを探します。 +2. 招待が承諾されたら、ClickHouse Cloud Console の請求ページ(Admin > Billing)に移動し、「Billing contacts」セクションを探します。 3. 「Edit」ボタンをクリックし、新しい管理者ユーザーを請求連絡先として設定します。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/change-the-prompt-in-clickhouse-client.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/change-the-prompt-in-clickhouse-client.mdx index 4ec126ad57c..b321715c2d5 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/change-the-prompt-in-clickhouse-client.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/change-the-prompt-in-clickhouse-client.mdx @@ -32,8 +32,7 @@ import prompt_8 from "@site/static/images/knowledgebase/change-the-prompt-in-cli プロンプトを更新する方法はいくつかあり、それぞれについて順に説明します。 - -## --prompt フラグ +## --prompt フラグ \{#--prompt-flag\} フラグを変更する 1 つ目の方法は、`--prompt` を使用することです。 @@ -45,8 +44,7 @@ clickhouse --prompt 👉 指さしの絵文字が追加された ClickHouse クライアントプロンプト - -## 設定ファイル - トップレベル +## 設定ファイル - トップレベル \{#config-file---top-level\} 別の方法として、`config.xml` ファイルでプロンプトのプレフィックスを指定することもできます。 @@ -89,8 +87,7 @@ clickhouse -C christmas.yaml 黄色の丸い絵文字が表示された ClickHouse クライアントのプロンプト - -## 設定ファイル - connections_credentials +## 設定ファイル - connections_credentials \{#config-file---connections_credentials\} 別の方法として、接続ごとの認証情報に対して個別にプロンプトを指定することもできます。 これは、clickhouse-client を使用している場合にのみ有効です。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/check-query-cache-in-use.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/check-query-cache-in-use.mdx index 27d7cd58057..4f46cecc136 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/check-query-cache-in-use.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/check-query-cache-in-use.mdx @@ -10,14 +10,13 @@ keywords: ['クエリキャッシュ'] {/* 切り捨て */} - ## クエリでクエリキャッシュが使用されているかを確認するにはどうすればよいですか? \{#how-can-i-check-that-query-cache-is-being-used-in-my-query\} [clickhouse client](https://clickhouse.com/docs/interfaces/cli) と ClickHouse Cloud サービスを使用した次の例を参照します。 `query_cache_test` テーブルを作成します -## clickhouse client の使い方 +## clickhouse client の使い方 \{#using-clickhouse-client\} ```sql clickhouse-cloud :) CREATE TABLE query_cache_test (name String, age UInt8) ENGINE =MergeTree ORDER BY name @@ -69,7 +68,6 @@ Ok. クエリキャッシュの利用を要求するクエリを実行します(クエリの末尾に `SETTINGS use_query_cache=true` を追加します): - ```sql clickhouse-cloud :) SELECT name FROM query_cache_test WHERE age > 1000 FORMAT Null SETTINGS use_query_cache=true; @@ -153,8 +151,7 @@ Ok. 2回目の実行では、既に保存されていたエントリが見つかったため(`Entry found for query SELECT...`)、クエリはクエリキャッシュを利用しました。 - -## SQL だけを使用する +## SQL だけを使用する \{#using-just-sql\} `clickhouse client` のトレースログを確認せず、SQL コマンドを発行するだけでも、 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/check_query_processing_time_only.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/check_query_processing_time_only.mdx index 577748635e6..88f88451dd1 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/check_query_processing_time_only.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/check_query_processing_time_only.mdx @@ -10,12 +10,11 @@ keywords: ['クエリ処理時間'] {/* トランケート */} - ## 質問 \{#question\} クエリが多数の行を返しますが、知りたいのは処理時間だけです。クエリの出力を表示せずに、処理時間だけを確認するにはどうすればよいですか? -## 回答 +## 回答 \{#answer\} クエリに `FORMAT Null` を追加して、出力形式を `Null` に設定します。これにより、データがクライアントへ送信されるのを防げます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/check_users_roles.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/check_users_roles.mdx index 0cb8dcaab01..7e2cc5b56ec 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/check_users_roles.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/check_users_roles.mdx @@ -10,7 +10,6 @@ keywords: ['ユーザーロール'] {/* 切り捨て */} - ## Question \{#question\} ロールに割り当てられているユーザーおよびユーザーに割り当てられているロールを確認するにはどうすればよいですか? diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/clickhouse_cloud_api_usage.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/clickhouse_cloud_api_usage.mdx index 863a0074736..1af20f726ff 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/clickhouse_cloud_api_usage.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/clickhouse_cloud_api_usage.mdx @@ -10,14 +10,13 @@ keywords: ['cURL', 'クラウド管理', 'ClickHouse API'] {/* 切り捨て */} - ## ClickHouse API と cURL を使用して Cloud サービスを開始・停止・再開する方法 \{#how-to-start-stop-and-resume-a-cloud-service-using-the-clickhouse-api-and-curl\} ## 質問 \{#question\} API エンドポイント経由で ClickHouse Cloud サービスを起動・停止・再開するにはどうすればよいですか? -## 回答 +## 回答 \{#answer\} 1. アイドル状態の Cloud サービスを起動/再開するには、インスタンスに対して ping を送信します。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/columnar-database.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/columnar-database.mdx index 38149d55081..97ee0309949 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/columnar-database.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/columnar-database.mdx @@ -14,7 +14,6 @@ import ColumnOriented from '@site/static/images/column-oriented.gif'; {/* 省略 */} - ## はじめに \{#introduction\} カラム型データベースでは、各カラムのデータが互いに独立して保存されます。これにより、任意のクエリで使用されるカラムのデータだけをディスクから読み取ることができます。その代償として、行全体に影響する処理のコストは相対的に高くなります。カラム型データベースは、カラム指向データベース管理システムと同義です。ClickHouse は、その代表的な例です。 @@ -23,9 +22,9 @@ import ColumnOriented from '@site/static/images/column-oriented.gif'; カラムナ型データベースの主な利点は次のとおりです。 -- 多数のカラムのうち、少数のカラムを使用するクエリ。 -- 大量のデータに対する集約クエリ。 -- カラム単位でのデータ圧縮。 +* 多数のカラムのうち、少数のカラムを使用するクエリ。 +* 大量のデータに対する集約クエリ。 +* カラム単位でのデータ圧縮。 ## 行指向データベース vs 列指向データベース \{#row-oriented-vs-column-oriented-databases\} diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/common-rbac-queries.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/common-rbac-queries.mdx index 7147506b923..dca3a9672a5 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/common-rbac-queries.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/common-rbac-queries.mdx @@ -10,19 +10,17 @@ keywords: ['RBAC', 'クエリ'] {/* 切り捨て */} - ## はじめに \{#introduction\} 以下は、ユーザーに特定の権限を付与するためによく使用されるクエリです。 -## 現在のユーザーと同じ権限を別のユーザーに付与するには? +## 現在のユーザーと同じ権限を別のユーザーに付与するには? \{#how-do-i-grant-the-same-permissions-as-the-current-user-to-another-user\} ```sql GRANT CURRENT GRANTS ON *.* TO another_user; ``` - -## 現在のユーザーに付与されている権限に基づいて、別のユーザーに特定の権限を付与するにはどうすればよいですか? +## 現在のユーザーに付与されている権限に基づいて、別のユーザーに特定の権限を付与するにはどうすればよいですか? \{#how-do-i-grant-a-specific-permission-to-a-user-based-on-the-grants-of-the-current-user\} 次の例では、`another_user` は現在のユーザーがアクセス可能なすべてのデータベースおよびテーブルに対して `SELECT` クエリを実行できるようになります。 @@ -30,8 +28,7 @@ GRANT CURRENT GRANTS ON *.* TO another_user; GRANT CURRENT GRANTS(SELECT ON *.*) TO another_user; ``` - -## 現在のユーザーに付与されている権限に基づいて、特定のデータベースに対する特定の権限をユーザーに付与するにはどうすればよいですか? +## 現在のユーザーに付与されている権限に基づいて、特定のデータベースに対する特定の権限をユーザーに付与するにはどうすればよいですか? \{#how-do-i-grant-a-specific-permission-to-a-user-for-a-specific-database-based-on-the-grants-of-the-current-user\} 次の例では、`another_user` は `my_database` 内のすべてのテーブルに対して `INSERT` 文を実行できるようになります。 @@ -39,8 +36,7 @@ GRANT CURRENT GRANTS(SELECT ON *.*) TO another_user; GRANT INSERT ON my_database.* TO another_user; ``` - -## デフォルトユーザーと同じ権限を特定ユーザーにすべて付与するにはどうすればよいですか? +## デフォルトユーザーと同じ権限を特定ユーザーにすべて付与するにはどうすればよいですか? \{#how-do-i-give-access-to-all-grants-for-a-specific-user-based-on-the-default-user\} ```sql GRANT default_role TO another_user; diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/compare_resultsets.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/compare_resultsets.mdx index cbd02075a83..417b615faef 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/compare_resultsets.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/compare_resultsets.mdx @@ -10,12 +10,11 @@ keywords: ['検証', '結果セット', 'ハッシュ関数'] {/* 省略 */} - ## 質問 \{#question\} 2 つのクエリが同じ結果セットを返すことを検証するにはどうすればよいですか? -## 回答 +## 回答 \{#answer\} 以下の方法を利用できます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/comparing-metrics-between-queries.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/comparing-metrics-between-queries.mdx index 1dee630ec0e..14110af4b47 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/comparing-metrics-between-queries.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/comparing-metrics-between-queries.mdx @@ -10,8 +10,7 @@ keywords: [クエリの比較, メトリクスの比較, クエリ パフォー {/* 切り捨て */} - -## 2 つのクエリ間でメトリクスを比較する +## 2 つのクエリ間でメトリクスを比較する \{#compare-metrics-between-two-queries\} 2 つのクエリ間でメトリクスを比較するには、まず両方のクエリの `query_id` を取得する必要があります。 @@ -42,7 +41,6 @@ FORMAT PrettyCompactMonoBlock 2つのクエリを比較したメトリクスのテーブルが表示されます。 - ```sql ┌─metric──────────────────────────────────────────────┬───────v1─┬───────v2─┬──────────────────dB─┬───perc─┬─bar───────────────────────────────┐ │ OSReadBytes │ 0 │ 528384 │ inf │ 100 │ █████████████████████████████████ │ diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/configure-a-user-setting.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/configure-a-user-setting.mdx index d490f4c9303..b06efd5828e 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/configure-a-user-setting.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/configure-a-user-setting.mdx @@ -10,12 +10,11 @@ keywords: ['SET', 'ALTER', 'ユーザー', 'クエリ', 'セッション'] {/* トランケート */} - ## はじめに \{#introduction\} ClickHouse でユーザーの設定を定義する方法はいくつかあります。どの方法を取るかは、ユースケースやその設定をどのくらいの期間有効にしておきたいかによって異なります。いくつかのシナリオを見ていきましょう… -## 単一のクエリに対して設定を行う +## 単一のクエリに対して設定を行う \{#configure-a-setting-for-a-single-query\} `SELECT` クエリには `SETTINGS` 句を含めることができ、そこに任意の数の設定を定義できます。これらの設定はそのクエリに対してのみ適用されます。例えば: @@ -27,8 +26,7 @@ SETTINGS max_threads = 8; このクエリでは、使用されるスレッド数の最大値は 8 です。 - -## セッションに対する設定を構成する +## セッションに対する設定を構成する \{#configure-a-setting-for-a-session\} `SET` 句を使用して、クライアントセッションの存続期間に有効な設定を定義できます。これはアドホックなテストや、いくつかのクエリを実行している間だけ有効な設定にしたい場合に便利ですが、それ以上の期間は有効にしたくない場合に適しています。 @@ -39,8 +37,7 @@ SELECT * FROM my_table; ``` - -## 特定のユーザー向けの設定を構成する +## 特定のユーザー向けの設定を構成する \{#configure-a-setting-for-a-particular-user\} `ALTER USER` を使用して、特定のユーザーだけに適用される設定を定義します。例えば: diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/configure_cap_ipc_lock_and_cap_sys_nice_in_docker.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/configure_cap_ipc_lock_and_cap_sys_nice_in_docker.mdx index d1de3ed7b38..3109b05085a 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/configure_cap_ipc_lock_and_cap_sys_nice_in_docker.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/configure_cap_ipc_lock_and_cap_sys_nice_in_docker.mdx @@ -10,8 +10,7 @@ keywords: ['Docker', 'CAP_IPC_LOCK', 'CAP_SYS_NICE'] {/* 切り捨て */} - -## 質問 +## 質問 \{#question\} Docker で ClickHouse を実行していると、システムに `CAP_IPC_LOCK` と `CAP_SYS_NICE` のケーパビリティがないと Docker から警告されます。どのように対処すればよいですか? @@ -31,8 +30,7 @@ docker run -d --name clickhouse-server \ 2023.04.19 08:04:10.065860 [ 1 ] {} Application: プロセスにCAP_SYS_NICE機能がないため、'os_thread_priority'設定は効果がありません。ClickHouseパッケージが正しくインストールされていないことが原因の可能性があります。'sudo setcap cap_sys_nice=+ep /usr/bin/clickhouse'を手動で実行することで問題を解決できます。なお、'nosuid'でマウントされたファイルシステムでは動作しません。 ``` - -## 回答 +## 回答 \{#answer\} 1. コンテナに `IPC_LOCK` および `SYS_NICE` のケーパビリティを付与するために、2つの `--cap-add` 引数を追加します。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/connection_timeout_remote_remoteSecure.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/connection_timeout_remote_remoteSecure.mdx index 6e70bec2ce6..0f94e7aebe9 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/connection_timeout_remote_remoteSecure.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/connection_timeout_remote_remoteSecure.mdx @@ -10,8 +10,7 @@ keywords: ['接続試行が失敗しました'] {/* 省略 */} - -## コード: 279. DB::NetException: All connection tries failed. +## コード: 279. DB::NetException: All connection tries failed. \{#code-279-dbnetexception-all-connection-tries-failed\} **問題** [`remote()` または `remoteSecure()`](https://clickhouse.com/docs/sql-reference/table-functions/remote/) テーブル関数を使用すると、別の ClickHouse ノード上のリモートテーブルにアクセスできます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/custom-dns-alias-for-instance.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/custom-dns-alias-for-instance.mdx index 76d0ae5b984..6efbeab50a5 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/custom-dns-alias-for-instance.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/custom-dns-alias-for-instance.mdx @@ -15,12 +15,11 @@ hide_title: true
- # リバースプロキシを設定してカスタム DNS エイリアスを設定する \{#custom-dns-alias\} > このナレッジベース記事では、Nginx などのリバースプロキシを使用して、ClickHouse ネイティブクライアント向けに ClickHouse Cloud インスタンスのカスタム DNS エイリアスを設定する方法を順を追って説明します。 -## 自己署名証明書を作成する +## 自己署名証明書を作成する \{#create-certificate\} :::note 署名付き証明書を使用している場合、この手順は不要です。 @@ -51,8 +50,7 @@ hide_title: true ``` - -## Nginx 設定を更新する +## Nginx 設定を更新する \{#update-nginx-config\} `nginx.conf` ファイルに以下の内容を追加します: @@ -93,8 +91,7 @@ stream { ここで言う `isrgrootx1.pem` は ClickHouse Cloud のルート証明書で、 [こちら](https://letsencrypt.org/certs/isrgrootx1.pem) からダウンロードできます。 - -## hosts ファイルを更新する +## hosts ファイルを更新する \{#update-hosts-file\} :::note 独自のドメインコントローラーを使用している場合、次の手順は不要です @@ -110,8 +107,7 @@ Nginx サーバー上の `/etc/hosts` ファイルに以下を追加します: ここでの `10.X.Y.Z` は、あなたの環境における特定の Nginx サーバーの IP アドレスを指します。 - -## エイリアスを使用して Cloud に接続する +## エイリアスを使用して Cloud に接続する \{#connect-to-cloud-using-alias\} これで、カスタムエイリアスを使って接続する準備が整いました。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/dbms-naming.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/dbms-naming.mdx index 739b0281a02..64ac74dbbee 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/dbms-naming.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/dbms-naming.mdx @@ -10,15 +10,14 @@ keywords: ['ClickHouse の意味'] {/* 省略 */} - ## ClickHouse という名前の意味 \{#clickhouse-meaning-explained\} これは「**Click**stream(クリックストリーム)」と「Data ware**House**(データウェアハウス)」を組み合わせたものです。Yandex.Metrica における元々のユースケースに由来しており、ClickHouse はインターネット全体から人々のあらゆるクリックを記録することになっていて、現在もその役割を果たしています。このユースケースの詳細は [ClickHouse history](https://clickhouse.com/docs/about-us/history) ページで確認できます。 この 2 つの意味には、次の 2 点の含意があります。 -- `Click**H**ouse` の正しい表記は、必ず H を大文字にすることです。 -- 省略する必要がある場合は **CH** を使用してください。歴史的な理由により、中国では CK と省略する形も人気があります。これは、最初期の中国語での ClickHouse に関する講演の 1 つでこの表記が使われたことが主な理由です。 +* `Click**H**ouse` の正しい表記は、必ず H を大文字にすることです。 +* 省略する必要がある場合は **CH** を使用してください。歴史的な理由により、中国では CK と省略する形も人気があります。これは、最初期の中国語での ClickHouse に関する講演の 1 つでこの表記が使われたことが主な理由です。 :::info ClickHouse に名前が付けられてから何年も後になって、このように、それ自体が意味を持つ 2 つの単語を組み合わせるアプローチが、データベースに名前を付ける最良の方法として取り上げられました。これは、Carnegie Mellon University のデータベース学准教授である Andy Pavlo による [研究](https://www.cs.cmu.edu/~pavlo/blog/2020/03/on-naming-a-database-management-system.html) で示されています。ClickHouse は、彼の「史上最高のデータベース名」賞を Postgres と分け合いました。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/delete-old-data.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/delete-old-data.mdx index de70b4a3166..622c8e7544b 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/delete-old-data.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/delete-old-data.mdx @@ -10,7 +10,6 @@ keywords: ['古いレコードの削除'] {/* 省略 */} - ## 結論は「はい」です \{#the-short-answer-is-yes\} 結論は「はい」です。ClickHouse には、古いデータを削除してディスク使用量を削減できる複数の仕組みがあります。それぞれ異なるシナリオを想定しています。 @@ -27,7 +26,7 @@ TTL はデータを [/dev/null](https://en.wikipedia.org/wiki/Null_device) に [TTL の設定](https://clickhouse.com/docs/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-ttl)についての詳細は、こちらを参照してください。 -## DELETE FROM +## DELETE FROM \{#delete-from\} [DELETE FROM](https://clickhouse.com/docs/sql-reference/statements/delete) を使用すると、標準的な DELETE クエリを ClickHouse で実行できます。フィルター句で対象となった行には削除フラグが付き、以降の結果セットからは除外されます。削除済み行のクリーンアップ(物理削除)は非同期に行われます。 @@ -40,7 +39,6 @@ SET allow_experimental_lightweight_delete = true; ::: - ## ALTER DELETE \{#alter-delete\} `ALTER DELETE` は、非同期バッチ処理を用いて行を削除します。`DELETE FROM` と異なり、`ALTER DELETE` の実行後からバッチ処理が完了するまでの間に実行されたクエリの結果には、削除対象となっている行も含まれます。詳細については [ALTER DELETE](https://clickhouse.com/docs/sql-reference/statements/alter/delete) ドキュメントを参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/dictionaries-consistent-state.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/dictionaries-consistent-state.mdx index 9e35c7de71e..5ab572a8ee7 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/dictionaries-consistent-state.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/dictionaries-consistent-state.mdx @@ -10,8 +10,7 @@ keywords: ['辞書'] {/* トランケート */} - -## ClickHouse におけるディクショナリ +## ClickHouse におけるディクショナリ \{#dictionaries-in-clickhouse\} ClickHouse Cloud で作成されたディクショナリは、作成直後の段階では一時的に不整合な状態になる場合があります。つまり、作成直後にはディクショナリ内にデータがまったく表示されないことがあります。ただし、数回リトライすると、作成クエリが別のレプリカで実行され、データが表示されるようになります。 @@ -44,7 +43,6 @@ SOURCE(CLICKHOUSE(QUERY SETTINGS select_sequential_consistency=1' USER default PASSWORD '')) ``` - ## なぜこの問題が発生するのですか? \{#why-does-this-issue-occur\} データを挿入してから辞書を作成または再読み込みする際、DDL がデータ(または新しいデータ)よりも先にレプリカへ到達する場合があります。これにより、レプリカ間で辞書の内容に不整合が生じます。その結果、どのレプリカがクエリを受信するかによって、得られる結果が異なる可能性があります。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/dictionary_using_strings.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/dictionary_using_strings.mdx index 698414ccdb4..f3182015160 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/dictionary_using_strings.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/dictionary_using_strings.mdx @@ -10,12 +10,11 @@ keywords: ['Dictionary', '文字列キー', '文字列値'] {/* truncate */} - ## 質問 \{#question\} MergeTree テーブルをソースとし、文字列キーおよび文字列値を使用する ClickHouse 辞書の作成方法 -## 回答 +## 回答 \{#answer\} * 辞書の元となるテーブルを作成します diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/difference_between_official_builds_and_3rd_party.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/difference_between_official_builds_and_3rd_party.mdx index b4766fa0fb8..02894a71d24 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/difference_between_official_builds_and_3rd_party.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/difference_between_official_builds_and_3rd_party.mdx @@ -10,7 +10,6 @@ keywords: ['公式ビルド', 'サードパーティ製ビルド'] {/* 切り捨て */} - ## 質問 \{#question\} 他のベンダーが独自ビルドの ClickHouse を提供しているのを見かけます。公式の ClickHouse ビルドとこれらのサードパーティ製ビルドにはどのような違いがありますか? @@ -19,17 +18,17 @@ keywords: ['公式ビルド', 'サードパーティ製ビルド'] 他のビルドで確認された違いには、次のようなものがあります。 -- **"official"** という文言がベンダー名に置き換えられている -- 数か月遅れて公開され、***最近のバグ修正が含まれていない*** ため、公式バージョンではすでに修正済みの脆弱性を含んでいる可能性がある -- ビルドがビットレベルで同一ではなく、コード中のアドレスも異なる。その結果として、これらのビルドから得られたスタックトレースを解析できず、ClickHouse チームはこれらのビルドに関する質問に回答できない -- ビルドは監査不可能かつ再現不可能であり、同じビルドログを持つ公開 CI システムが存在しない -- これらのビルドでは ClickHouse のテストスイートが実行されていないため、テストスイートによる動作検証が行われていない -- すべてのアーキテクチャ(ARM など)向けに提供されていない場合がある -- 特定の顧客向けのパッチが含まれていることがあり、それによって互換性が損なわれたり、追加のリスクが生じたりする可能性がある +* **"official"** という文言がベンダー名に置き換えられている +* 数か月遅れて公開され、***最近のバグ修正が含まれていない*** ため、公式バージョンではすでに修正済みの脆弱性を含んでいる可能性がある +* ビルドがビットレベルで同一ではなく、コード中のアドレスも異なる。その結果として、これらのビルドから得られたスタックトレースを解析できず、ClickHouse チームはこれらのビルドに関する質問に回答できない +* ビルドは監査不可能かつ再現不可能であり、同じビルドログを持つ公開 CI システムが存在しない +* これらのビルドでは ClickHouse のテストスイートが実行されていないため、テストスイートによる動作検証が行われていない +* すべてのアーキテクチャ(ARM など)向けに提供されていない場合がある +* 特定の顧客向けのパッチが含まれていることがあり、それによって互換性が損なわれたり、追加のリスクが生じたりする可能性がある ドキュメントの [インストール手順](https://clickhouse.com/docs/install) に従い、公式ビルドを用いて ClickHouse の最新版を実行することを推奨します。 -- 毎月 **stable バージョン** を 1 つリリースしており、直近 3 つの stable リリースについては、診断およびバグ修正のバックポートという観点でサポートしています。 -- また年に 2 回 **long-term support (LTS) バージョン** をリリースしており、初回リリースから 1 年間サポートされます。これは、頻繁なアップグレードや非 LTS ソフトウェアの利用が許可されていない企業を主な対象としています。(私たちは毎月の stable ビルドを強く推奨しています。) +* 毎月 **stable バージョン** を 1 つリリースしており、直近 3 つの stable リリースについては、診断およびバグ修正のバックポートという観点でサポートしています。 +* また年に 2 回 **long-term support (LTS) バージョン** をリリースしており、初回リリースから 1 年間サポートされます。これは、頻繁なアップグレードや非 LTS ソフトウェアの利用が許可されていない企業を主な対象としています。(私たちは毎月の stable ビルドを強く推奨しています。) ドキュメントには、[stable と LTS リリースの違いに関する詳細](https://clickhouse.com/docs/faq/operations/production#how-to-choose-between-clickhouse-releases) も記載しています。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/enabling-ssl-with-lets-encrypt.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/enabling-ssl-with-lets-encrypt.mdx index 9027b4792d1..4d662279b21 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/enabling-ssl-with-lets-encrypt.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/enabling-ssl-with-lets-encrypt.mdx @@ -13,8 +13,7 @@ import security_group from "@site/static/images/knowledgebase/lets-encrypt-ssl/p {/* truncate */} - -## 手順 +## 手順 \{#steps-to-follow\} 以下の手順では、単一の ClickHouse Server に対して [Let's Encrypt](https://letsencrypt.org/) を使用して SSL を有効にする方法を説明します。Let's Encrypt は無料かつ自動化されたオープンな認証局 (Certificate Authority, CA) であり、誰もが HTTPS を用いて自分の Web サイトを容易に保護できるように設計されています。証明書の発行および更新プロセスを自動化することで、Let's Encrypt は手動による操作を必要とせずに Web サイトの安全性を維持します。 @@ -75,7 +74,6 @@ sudo apt install certbot
- ```bash sudo certbot certonly デバッグログを /var/log/letsencrypt/letsencrypt.log に保存しています @@ -164,7 +162,6 @@ echo "127.0.0.1 product-test-server.clickhouse-dev.com" | sudo tee -a /etc/hosts :::warning ワイルドカードアドレスからの接続を許可する場合は、以下のいずれかの対策を必ず講じてください。 - * サーバーはファイアウォールで保護されており、信頼できないネットワークからはアクセスできないこと。 * すべてのユーザーはネットワークアドレスのサブセットに制限されていること(`users.xml` を参照)。 * すべてのユーザーが十分に強力なパスワードを持ち、セキュアな (TLS) インターフェイスのみがアクセス可能であるか、もしくは接続が TLS インターフェイス経由でのみ行われていること。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/exception-too-many-parts.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/exception-too-many-parts.mdx index c5960131c28..ab5c16127ed 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/exception-too-many-parts.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/exception-too-many-parts.mdx @@ -10,8 +10,7 @@ keywords: ['Too many parts'] {/* 省略 */} - -## DB::Exception: パーツが多すぎます (Error: 252)。マージ処理が挿入よりも著しく遅くなっています +## DB::Exception: パーツが多すぎます (Error: 252)。マージ処理が挿入よりも著しく遅くなっています \{#dbexception-too-many-parts-252-merges-are-processing-significantly-slower-than-inserts\} MergeTree テーブルで `parts_to_throw_insert` 設定の上限に達しました。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/exchangeStatementToSwitchTables.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/exchangeStatementToSwitchTables.mdx index 70956e855f8..2d73da3dd25 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/exchangeStatementToSwitchTables.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/exchangeStatementToSwitchTables.mdx @@ -12,12 +12,11 @@ keywords: ['EXCHANGE'] *** - ## 質問 \{#question\} [`EXCHANGE`](/sql-reference/statements/exchange) コマンドを使ってテーブル名を入れ替えるにはどうすればよいですか? -## 回答 +## 回答 \{#answer\} `EXCHANGE` コマンドは、現在のテーブルを、一時的に使用している別のテーブル(そのテーブルで Primary Key やその他の設定が更新されている可能性があるもの)と入れ替える必要がある場合に役立ちます。 この操作は `RENAME` コマンドと異なり、アトミックに実行されます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/execute-system-queries-in-cloud.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/execute-system-queries-in-cloud.mdx index 57baca78b1b..bcafc523b68 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/execute-system-queries-in-cloud.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/execute-system-queries-in-cloud.mdx @@ -10,8 +10,7 @@ keywords: ['clusterAllReplicas'] {/* 切り捨て */} - -## 解答 +## 解答 \{#answer\} ClickHouse Cloud サービス内のすべてのノードで同じクエリを実行するには、[clusterAllReplicas](https://clickhouse.com/docs/sql-reference/table-functions/cluster/) を使用します。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/file-export.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/file-export.mdx index 516073b525b..aacfdcf62d1 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/file-export.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/file-export.mdx @@ -10,8 +10,7 @@ keywords: ['データのエクスポート', 'INTO OUTFILE', 'File テーブル {/* 省略 */} - -## INTO OUTFILE 句の使用 +## INTO OUTFILE 句の使用 \{#using-into-outfile-clause\} クエリに [INTO OUTFILE](https://clickhouse.com/docs/sql-reference/statements/select/into-outfile) 句を追加します。 @@ -48,8 +47,7 @@ INTO OUTFILE 'taxi_rides.txt' FORMAT CSV ``` - -## File テーブルエンジンを使用する +## File テーブルエンジンを使用する \{#using-a-file-engine-table\} 別の選択肢として、[File](https://clickhouse.com/docs/engines/table-engines/special/file) テーブルエンジンを使用する方法があります。この場合、ClickHouse はデータを保存するためにファイルを利用します。ファイルに対して直接クエリの実行やデータの挿入ができます。 @@ -79,8 +77,7 @@ INSERT INTO my_table VALUES `File` テーブルエンジンは、ファイルシステム上のファイルを作成したりクエリを実行したりするのに非常に便利ですが、`File` テーブルは `MergeTree` テーブルではないため、`MergeTree` が提供するすべての利点は得られないことに注意してください。ClickHouse からデータを使いやすい形式でエクスポートする際の利便性を目的として `File` を使用してください。 ::: - -## コマンドラインでのリダイレクトの使用 +## コマンドラインでのリダイレクトの使用 \{#using-command-line-redirection\} ```bash $ clickhouse-client --query "SELECT * from table" --format FormatName > result.txt diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/filtered-aggregates.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/filtered-aggregates.mdx index cc131d548af..cc98f2b3bc9 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/filtered-aggregates.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/filtered-aggregates.mdx @@ -10,8 +10,7 @@ keywords: ['フィルタ付き集約'] {/* 切り捨て */} - -## フィルタ付き集約の利用 +## フィルタ付き集約の利用 \{#using-filtered-aggregates\} ClickHouse では、*フィルタ付き集約* を記述するためのシンプルで直感的な方法が提供されています。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/find-expensive-queries.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/find-expensive-queries.mdx index ee8901abda7..515159a2c20 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/find-expensive-queries.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/find-expensive-queries.mdx @@ -11,8 +11,7 @@ keywords: ['高コストなクエリ'] {/* 省略 */} - -## 回答 +## 回答 \{#answer\} `system` データベースの `query_log` テーブルは、すべてのクエリを記録しており、次の情報を含みます: @@ -53,7 +52,6 @@ LIMIT 10; └─────────────┴─────────────────────┴──────────────────────────────────────┴────────────┴─────────────┴────────────┴───────────────────────┘ ``` - :::note `initial_query_id` は、リクエストを受信したノードから開始される分散クエリ実行における最初のクエリの ID を表します。`query_id` には、別のノード上で実行される子クエリの ID が含まれます。詳細は [この記事](https://clickhouse.com/docs/knowledgebase/find-expensive-queries#initial_query_id-vs-query_id) を参照してください。 ::: @@ -95,8 +93,7 @@ SELECT FROM s3Cluster('default','https://clickhouse-public-datasets.s3.amazonaws.com/youtube/original/files/*.zst', 'JSONLines') ``` - -## initial_query_id VS query_id +## initial_query_id VS query_id \{#initial_query_id-vs-query_id\} クラスタ構成の ClickHouse 環境(ClickHouse Cloud など)では、`initial_query_id` はリクエストを受け付けたノードから起動される分散クエリ実行における、最初に発行されたクエリの ID を表します。 この場合、`query_id` フィールドには、別のノード上で実行される子クエリの ID が含まれます。 @@ -122,7 +119,6 @@ LIMIT 10 FORMAT Pretty; 次のような結果が得られます: - ``` ┏━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ hostname() ┃ type ┃ event_time ┃ initial_query_id ┃ query_id ┃ memory ┃ userCPU ┃ systemCPU ┃ normalized_query_hash ┃ @@ -185,7 +181,6 @@ LIMIT 10 FORMAT Pretty; └────────────────────────┴─────────────┴─────────────────────┴──────────────────────────────────────┴──────────────────────────────────────┴────────────┴─────────┴───────────┴───────────────────────┘ ``` - 一方、`query_id = initial_query_id` を指定すると、分散クエリが最初に発行されたローカルノード上で実行されたクエリのみが返されます。 ```sql diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/finding_expensive_queries_by_memory_usage.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/finding_expensive_queries_by_memory_usage.mdx index 9d67333b23f..348f0800080 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/finding_expensive_queries_by_memory_usage.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/finding_expensive_queries_by_memory_usage.mdx @@ -10,8 +10,7 @@ keywords: ['負荷の高いクエリ', 'メモリ使用量'] {/* 切り詰め */} - -## `system.query_log` テーブルの使用 +## `system.query_log` テーブルの使用 \{#using-the-systemquery_log-table\} 次の便利なクエリを使用すると、実行されたクエリのうち、どれが最も多くのメモリを使用したかを確認できます。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/fix-developer-verification-error-in-macos.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/fix-developer-verification-error-in-macos.mdx index e5d2445e11d..d2b94bebef4 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/fix-developer-verification-error-in-macos.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/fix-developer-verification-error-in-macos.mdx @@ -17,7 +17,6 @@ import privacy_allow from "@site/static/images/knowledgebase/fix-the-developer-v *** - ## macOS の開発元検証エラーを解消する \{#fix-the-developer-verification-error-in-macos\} `brew` を使って ClickHouse をインストールした場合、macOS でエラーが表示されることがあります。 @@ -34,20 +33,22 @@ import privacy_allow from "@site/static/images/knowledgebase/fix-the-developer-v `clickhouse` 実行ファイルを隔離領域から削除する最も簡単な方法は次のとおりです。 1. **システム設定** を開きます。 -1. **プライバシーとセキュリティ** に移動します。 - macOS の「プライバシーとセキュリティ」設定のデフォルト表示 +2. **プライバシーとセキュリティ** に移動します。 + + macOS の「プライバシーとセキュリティ」設定のデフォルト表示 + +3. ウィンドウの一番下までスクロールし、*"clickhouse-macos-aarch64" was blocked from use because it is not from an identified developer"* というメッセージを探します。 -1. ウィンドウの一番下までスクロールし、_"clickhouse-macos-aarch64" was blocked from use because it is not from an identified developer"_ というメッセージを探します。 -1. **このまま開く** をクリックします。 +4. **このまま開く** をクリックします。 - macOS の「プライバシーとセキュリティ」設定で「このまま開く」ボタンが表示されている状態 + macOS の「プライバシーとセキュリティ」設定で「このまま開く」ボタンが表示されている状態 -1. macOS のユーザーパスワードを入力します。 +5. macOS のユーザーパスワードを入力します。 これでターミナルから `clickhouse` コマンドを実行できるようになります。 -## ターミナルでの手順 +## ターミナルでの手順 \{#terminal-process\} `Allow Anyway` ボタンを押してもこの問題が解決しないことがあります。その場合は、コマンドラインから同じ処理を実行することもできます。 あるいは、単にコマンドラインのほうが好みという場合もあるでしょう。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/generate-har-file.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/generate-har-file.mdx index b626020186f..1c8929d98aa 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/generate-har-file.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/generate-har-file.mdx @@ -10,7 +10,6 @@ description: 'HAR (HTTP Archive) ファイルは、ブラウザーのネット {/* 切り捨て */} - ## Google Chrome から \{#from-google-chrome\} 1. F12 キー、または Ctrl + Shift + I(Windows/Linux) / Cmd + Option + I(Mac)を押して、デベロッパーツールを開きます。 @@ -35,9 +34,9 @@ description: 'HAR (HTTP Archive) ファイルは、ブラウザーのネット ## Safari から \{#from-safari\} 1. 開発ツールを有効にします(まだ有効にしていない場合): - - Safari > 設定 > 詳細 を開きます。 - - 一番下の「メニューバーに“開発”メニューを表示」をオンにします。 -2. 「開発」>「Web インスペクタを表示」をクリックします。 + * Safari > 設定 > 詳細 を開きます。 + * 一番下の「メニューバーに“開発”メニューを表示」をオンにします。 +2. 「開発」>「Web インスペクタを表示」をクリックします。 3. 「ネットワーク」タブをクリックします。 4. ページを再読み込みして、問題を再現します。 5. 開発ツールから「書き出す」ボタンをクリックします。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/how-do-i-contribute-code-to-clickhouse.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/how-do-i-contribute-code-to-clickhouse.mdx index 70562c67f45..460b9196b24 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/how-do-i-contribute-code-to-clickhouse.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/how-do-i-contribute-code-to-clickhouse.mdx @@ -10,7 +10,6 @@ keywords: ['コントリビューション', 'オープンソース'] {/* 切り捨て */} - ## ClickHouse への貢献方法 \{#how-to-contribute-in-clickhouse\} ClickHouse は、[GitHub 上で開発されている](https://github.com/ClickHouse/ClickHouse)オープンソースプロジェクトです。 diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/how-to-check-my-clickhouse-cloud-sevice-state.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/how-to-check-my-clickhouse-cloud-sevice-state.mdx index 1e610ee3e4d..9d197ee7ea1 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/how-to-check-my-clickhouse-cloud-sevice-state.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/how-to-check-my-clickhouse-cloud-sevice-state.mdx @@ -10,7 +10,6 @@ keywords: ['クラウドサービスの状態'] {/* 途中省略 */} - ## ClickHouse Cloud サービスの状態を確認する方法 \{#how-to-check-your-clickhouse-cloud-service-state\} ClickHouse Cloud サービスの状態はどのように確認できますか?サービスが停止、アイドル状態、または実行中かを確認したいのですが、その際にサービスを起動させたくありません。 @@ -19,8 +18,8 @@ ClickHouse Cloud サービスの状態はどのように確認できますか? [ClickHouse Cloud API](/cloud/manage/api/api-overview) は、クラウドサービスの状態を確認するのに便利です。Cloud API を使用する前に、対象サービスで API キーを作成する必要があります。これは ClickHouse Cloud の [clickhouse.cloud](https://console.clickhouse.cloud) で行えます: -- [API 概要](/cloud/manage/api/api-overview) -- [Swagger](https://clickhouse.com/docs/cloud/manage/api/swagger) +* [API 概要](/cloud/manage/api/api-overview) +* [Swagger](https://clickhouse.com/docs/cloud/manage/api/swagger) 1. サービスの状態を確認するには、次を実行します。`Key-ID` と `Key-Secret` はそれぞれ自身の値に置き換えてください。 @@ -34,7 +33,7 @@ ClickHouse Cloud サービスの状態はどのように確認できますか? result":{"id":"[Service-ID]","name":"[Service-Name]","provider":"aws","region":"us-east-1","state":"**idle**","endpoints":[{"protocol":"nativesecure","host":"[Connect-URL]","port":9440},{"protocol":"https","host":"[Connect-URL]","port":8443}],"tier":"development","idleScaling":true,"idleTimeoutMinutes":15,"ipAccessList":[{"source":"[my-IP]","description":"[my-IP-name]"}],"createdAt":"2023-04-13T23:47:47Z"},"status":200} ``` -1. [jq ユーティリティ](https://jqlang.github.io/jq/) を使用して `state` キーのみを抽出できます。 +2. [jq ユーティリティ](https://jqlang.github.io/jq/) を使用して `state` キーのみを抽出できます。 ```shell curl --user '[Key-ID]:[Key-Secret]' https://api.clickhouse.cloud/v1/organizations/[Org-ID]/services/[Service-ID] | jq '.state' @@ -46,7 +45,7 @@ ClickHouse Cloud サービスの状態はどのように確認できますか? **idle** ``` -1. 稼働中のサービスに対して同じコマンドを実行すると、次のような出力が得られます。 +3. 稼働中のサービスに対して同じコマンドを実行すると、次のような出力が得られます。 ```json **running** diff --git a/i18n/jp/docusaurus-plugin-content-blog/current/how-to-connect-to-ch-cloud-using-ssh-keys.mdx b/i18n/jp/docusaurus-plugin-content-blog/current/how-to-connect-to-ch-cloud-using-ssh-keys.mdx index 34c74f09a62..f271400f4b6 100644 --- a/i18n/jp/docusaurus-plugin-content-blog/current/how-to-connect-to-ch-cloud-using-ssh-keys.mdx +++ b/i18n/jp/docusaurus-plugin-content-blog/current/how-to-connect-to-ch-cloud-using-ssh-keys.mdx @@ -10,7 +10,6 @@ keywords: ['クラウド', 'SSH'] {/* 切り捨て */} - ## 質問 \{#question\} SSH 鍵認証を使用して ClickHouse に接続するにはどうすればよいですか? @@ -19,9 +18,9 @@ SSH 鍵認証を使用して ClickHouse に接続するにはどうすればよ ここでは例として ClickHouse Cloud を使用していますが、この手順は OSS 版 ClickHouse でも同様に利用できます。 ::: - + + + +fullscreen; +picture-in-picture" + allowfullscreen + /> -
+
現在データがどこにあるかに応じて、ClickHouse Cloud にデータを移行する方法はいくつかあります。 -- [セルフマネージド環境から Cloud へ](/cloud/migration/clickhouse-to-cloud): `remoteSecure` 関数を使用してデータを転送します -- [別の DBMS から](/cloud/migration/clickhouse-local): [clickhouse-local] ETL ツールと、現在利用中の DBMS に対応する ClickHouse のテーブル関数を組み合わせて使用します -- [どこからでも!](/cloud/migration/etl-tool-to-clickhouse): さまざまな種類のデータソースに接続できる、広く利用されている ETL/ELT ツールのいずれかを使用します -- [オブジェクトストレージから](/integrations/migration/object-storage-to-clickhouse): S3 から ClickHouse へ簡単にデータを取り込めます +* [セルフマネージド環境から Cloud へ](/cloud/migration/clickhouse-to-cloud): `remoteSecure` 関数を使用してデータを転送します +* [別の DBMS から](/cloud/migration/clickhouse-local): [clickhouse-local] ETL ツールと、現在利用中の DBMS に対応する ClickHouse のテーブル関数を組み合わせて使用します +* [どこからでも!](/cloud/migration/etl-tool-to-clickhouse): さまざまな種類のデータソースに接続できる、広く利用されている ETL/ELT ツールのいずれかを使用します +* [オブジェクトストレージから](/integrations/migration/object-storage-to-clickhouse): S3 から ClickHouse へ簡単にデータを取り込めます [Redshift からの移行](/migrations/redshift/migration-guide)の例では、ClickHouse にデータを移行する 3 つの異なる方法を紹介しています。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md index 1b1ec86cb56..21c89290d82 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# ClickHouse と PostgreSQL の比較 +# ClickHouse と PostgreSQL の比較 {#comparing-clickhouse-and-postgresql} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md index 91a64ccd7a6..20c74d9da68 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md @@ -129,7 +129,7 @@ ClickHouse は、[限定された構成](/guides/developer/transactional) の下 -## 圧縮 +## 圧縮 {#compression} ClickHouse のカラム指向ストレージでは、Postgres と比較して圧縮効率が大幅に優れることがよくあります。以下は、両方のデータベースで Stack Overflow の全テーブルを格納した場合のストレージ要件を比較した例です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md index 9e5c1fc20d5..ac242a28c78 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md @@ -31,49 +31,49 @@ Postgres から ClickHouse への典型的なマイグレーション例を示 ```bash -# ユーザー +# ユーザー {#users} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/users.sql.gz gzip -d users.sql.gz psql < users.sql ``` -# posts +# posts {#posts} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posts.sql.gz gzip -d posts.sql.gz psql < posts.sql -# posthistory +# posthistory {#posthistory} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posthistory.sql.gz gzip -d posthistory.sql.gz psql < posthistory.sql -# コメント +# コメント {#comments} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/comments.sql.gz gzip -d comments.sql.gz psql < comments.sql -# 投票 +# 投票 {#votes} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/votes.sql.gz gzip -d votes.sql.gz psql < votes.sql -# badges +# badges {#badges} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/badges.sql.gz gzip -d badges.sql.gz psql < badges.sql -# postlinks +# postlinks {#postlinks} wget [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz) gzip -d postlinks.sql.gz @@ -87,9 +87,9 @@ ClickHouseにとっては小規模ですが、このデータセットはPostgre ``` -## データの移行 +## データの移行 {#migrating-data} -### リアルタイムレプリケーション(CDC) +### リアルタイムレプリケーション(CDC) {#real-time-replication-or-cdc} PostgreSQL 用の ClickPipes をセットアップするには、この[ガイド](/integrations/clickpipes/postgres)を参照してください。このガイドでは、さまざまな種類のソースとなる Postgres インスタンスを扱っています。 @@ -125,7 +125,7 @@ ORDER BY id; セットアップが完了すると、ClickPipes は PostgreSQL から ClickHouse へのすべてのデータ移行を開始します。ネットワークやデプロイメントの規模によって所要時間は異なりますが、Stack Overflow データセットであれば数分程度で完了するはずです。 -### 手動による一括ロードと定期更新 +### 手動による一括ロードと定期更新 {#initial-bulk-load-with-periodic-updates} 手動アプローチを用いる場合、データセットの初回一括ロードは次の方法で実施できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md index 803667e73c1..37bd95e03b9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md @@ -21,7 +21,7 @@ CDC を利用したリアルタイムレプリケーションで PostgreSQL か -## ClickHouse でクエリを最適化する +## ClickHouse でクエリを最適化する {#optimize-queries-in-clickhouse} 最小限のクエリ書き換えで移行することも可能ですが、クエリを大幅に単純化し、さらにクエリパフォーマンスを向上させるために、ClickHouse の機能を活用することを推奨します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md index dd7dc90718e..fa6a319abb2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md @@ -49,7 +49,7 @@ CDC を用いたリアルタイムレプリケーションを利用する場合 -## パーティション +## パーティション {#partitions} Postgres ユーザーであれば、テーブルをより小さく扱いやすい単位であるパーティションに分割することで、大規模データベースのパフォーマンスと管理性を向上させるテーブルパーティショニングの概念にはなじみがあるはずです。このパーティショニングは、指定した列(例: 日付)の範囲や、定義済みリスト、あるいはキーに対するハッシュを用いることで実現できます。これにより、管理者は日付範囲や地理的な位置などの特定の条件に基づいてデータを整理できます。パーティショニングは、パーティションプルーニングや効率的なインデックス作成による高速なデータアクセスを可能にすることで、クエリ性能の向上に寄与します。また、テーブル全体ではなく個々のパーティション単位で操作できるため、バックアップやデータ削除といったメンテナンス作業の効率化にもつながります。さらに、負荷を複数のパーティションに分散させることで、PostgreSQL データベースのスケーラビリティを大幅に向上させることができます。 @@ -76,7 +76,7 @@ PARTITION BY toYear(CreationDate) パーティションについての詳細な説明は ["Table partitions"](/partitions) を参照してください。 -### パーティションの用途 +### パーティションの用途 {#applications-of-partitions} ClickHouse におけるパーティションは、Postgres と同様の用途がありますが、いくつか細かな違いがあります。より具体的には次のとおりです。 @@ -132,7 +132,7 @@ OK -## マテリアライズドビューとプロジェクションの比較 +## マテリアライズドビューとプロジェクションの比較 {#materialized-views-vs-projections} Postgres では、単一のテーブルに対して複数のインデックスを作成でき、さまざまなアクセスパターンに最適化できます。この柔軟性により、管理者や開発者は特定のクエリや運用要件に合わせてデータベースのパフォーマンスを調整できます。ClickHouse におけるプロジェクションの概念はこれと完全に同じではありませんが、テーブルに対して複数の `ORDER BY` 句を指定できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md index 1aed389601f..1593003ce1b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md @@ -12,7 +12,7 @@ import bigquery_1 from '@site/static/images/migrations/bigquery-1.png'; import Image from '@theme/IdealImage'; -# ClickHouse Cloud と BigQuery の比較 +# ClickHouse Cloud と BigQuery の比較 {#comparing-clickhouse-cloud-and-bigquery} @@ -186,7 +186,7 @@ ClickHouse は、分析タスクにより適したものとなるよう、多く -## 配列 +## 配列 {#arrays} BigQuery の配列関数が 8 個であるのに対して、ClickHouse には 80 個以上の[組み込み配列関数](/sql-reference/functions/array-functions)があり、幅広い問題をエレガントかつシンプルにモデリング・解決できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md index 07ee62f5e5c..3cdac048853 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md @@ -75,7 +75,7 @@ Change Data Capture(CDC)は、2 つのデータベース間でテーブル -## スキーマの設計 +## スキーマの設計 {#designing-schemas} Stack Overflow のデータセットには、関連する多数のテーブルが含まれています。まずは主要なテーブルの移行に集中することを推奨します。これは必ずしも最大のテーブルとは限らず、むしろ分析クエリの発行が最も多いと想定されるテーブルです。そうすることで、主要な ClickHouse の概念に慣れることができます。このテーブルは、追加のテーブルが増えるにつれて、ClickHouse の機能を最大限に活用し最適なパフォーマンスを得るために、再モデリングが必要になる場合があります。このモデリングプロセスについては、[データモデリングのドキュメント](/data-modeling/schema-design#next-data-modeling-techniques)で解説しています。 @@ -108,7 +108,7 @@ CREATE TABLE stackoverflow.posts ( ); ``` -### 型の最適化 +### 型の最適化 {#optimizing-types} [こちら](/data-modeling/schema-design)で説明しているプロセスに従うと、次のようなスキーマになります。 @@ -174,11 +174,11 @@ ClickHouse で選択したプライマリキーは、インデックスだけで -## データモデリング手法 +## データモデリング手法 {#data-modeling-techniques} BigQuery から移行するユーザーは、まず [ClickHouse におけるデータモデリングガイド](/data-modeling/schema-design) を参照することを推奨します。このガイドでは同じ Stack Overflow データセットを使用し、ClickHouse の機能を活用した複数のアプローチを解説しています。 -### パーティション +### パーティション {#partitions} BigQuery ユーザーは、大規模なデータベースにおいて、テーブルを「パーティション」と呼ばれる小さく扱いやすい単位に分割することで、性能と管理性を向上させるテーブルパーティショニングの概念に馴染みがあるはずです。パーティショニングは、指定したカラム(例: 日付)に対する範囲、定義済みリスト、あるいはキーに対するハッシュによって実現できます。これにより、管理者は日付範囲や地理的位置といった特定の条件に基づいてデータを整理できます。 @@ -205,7 +205,7 @@ ORDER BY (PostTypeId, toDate(CreationDate), CreationDate) PARTITION BY toYear(CreationDate) ``` -#### 用途 +#### 用途 {#applications} ClickHouse におけるパーティショニングの用途は BigQuery と似ていますが、いくつか細かな違いがあります。具体的には次のとおりです。 @@ -259,7 +259,7 @@ ALTER TABLE posts -## マテリアライズドビューとプロジェクション +## マテリアライズドビューとプロジェクション {#materialized-views-vs-projections} ClickHouse のプロジェクションの概念により、ユーザーは 1 つのテーブルに対して複数の `ORDER BY` 句を指定できます。 @@ -396,7 +396,7 @@ WHERE UserId = 8592047 ``` -## ClickHouse 向けの BigQuery クエリの書き換え +## ClickHouse 向けの BigQuery クエリの書き換え {#rewriting-bigquery-queries-in-clickhouse} 以下は、BigQuery と ClickHouse のクエリを比較したサンプルクエリです。このリストは、ClickHouse の機能を活用してクエリを大幅に簡素化する方法を示すことを目的としています。ここでの例では、Stack Overflow の全データセット(2024 年 4 月まで)を使用します。 @@ -464,7 +464,7 @@ LIMIT 5 ``` -## 集約関数 +## 集約関数 {#aggregate-functions} 可能な場合は、ClickHouse の集約関数を活用してください。以下では、各年でもっとも閲覧された質問を求めるために、[`argMax` 集約関数](/sql-reference/aggregate-functions/reference/argmax) を使用する例を示します。 @@ -519,7 +519,7 @@ MaxViewCount: 66975 ``` -## 条件式と配列 +## 条件式と配列 {#conditionals-and-arrays} 条件式と配列関数を使うと、クエリを大幅に簡潔にできます。次のクエリは、2022 年から 2023 年にかけての出現回数が 10000 回を超えるタグのうち、増加率が最も大きいものを算出します。以下の ClickHouse クエリが、条件式・配列関数・`HAVING` 句および `SELECT` 句でエイリアスを再利用できる機能のおかげで簡潔になっている点に注目してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md index 6d4a02d2af3..7357b4280c6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md @@ -30,7 +30,7 @@ BigQuery から ClickHouse へのデータエクスポートにかかる時間 -## テーブルデータを GCS にエクスポートする +## テーブルデータを GCS にエクスポートする {#1-export-table-data-to-gcs} この手順では、[BigQuery SQL ワークスペース](https://cloud.google.com/bigquery/docs/bigquery-web-ui) を使用して SQL 文を実行します。ここでは、[`EXPORT DATA`](https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements) ステートメントを使用して、`mytable` という BigQuery テーブルを GCS のバケットにエクスポートします。 @@ -67,7 +67,7 @@ END WHILE; * 列指向フォーマットである Parquet は、標準で圧縮されており、BigQuery によるエクスポートおよび ClickHouse によるクエリが高速であるため、より優れたデータ交換形式です。 -## GCS から ClickHouse へのデータインポート +## GCS から ClickHouse へのデータインポート {#2-importing-data-into-clickhouse-from-gcs} エクスポートが完了したら、このデータを ClickHouse のテーブルにインポートできます。以下のコマンドを実行するには、[ClickHouse SQL console](/integrations/sql-clients/sql-console) か [`clickhouse-client`](/interfaces/cli) を使用できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md index b477425dc1e..9bf8778db6c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md @@ -13,7 +13,7 @@ import cloud_architecture from '@site/static/images/cloud/onboard/discover/use_c import Image from '@theme/IdealImage'; -# Snowflake から ClickHouse への移行 +# Snowflake から ClickHouse への移行 {#snowflake-to-clickhouse-migration} > このドキュメントでは、Snowflake から ClickHouse へのデータ移行の概要を説明します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md index 0699341a4b9..3d616d779c9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md @@ -12,7 +12,7 @@ import migrate_snowflake_clickhouse from '@site/static/images/migrations/migrate import Image from '@theme/IdealImage'; -# SnowflakeからClickHouseへの移行 +# SnowflakeからClickHouseへの移行 {#migrate-from-snowflake-to-clickhouse} > 本ガイドでは、SnowflakeからClickHouseへデータを移行する方法について説明します。 @@ -21,7 +21,7 @@ SnowflakeとClickHouse間でデータを移行するには、転送用の中間 -## Snowflake からデータをエクスポートする +## Snowflake からデータをエクスポートする {#1-exporting-data-from-snowflake} Snowflake から ClickHouse への移行 @@ -59,7 +59,7 @@ COPY INTO @external_stage/mydataset from mydataset max_file_size=157286400 heade 約 5TB のデータセットで最大ファイルサイズが 150MB、かつ同じ AWS `us-east-1` リージョン内にある 2X-Large Snowflake ウェアハウスを使用する場合、S3 バケットへのデータのコピーには約 30 分かかります。 -## ClickHouse へのインポート +## ClickHouse へのインポート {#2-importing-to-clickhouse} データが中間オブジェクトストレージにステージングされたら、以下のように [s3 テーブル関数](/sql-reference/table-functions/s3) などの ClickHouse の関数を使用して、テーブルにデータを挿入できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md index c1a31c32cc2..dacd8e3ec5d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# Snowflake SQL 変換ガイド +# Snowflake SQL 変換ガイド {#snowflake-sql-translation-guide} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md index b5e1ee5aeb7..d197b1233c8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md @@ -8,6 +8,6 @@ show_related_blogs: true doc_type: 'landing-page' --- -# Elasticsearch から ClickHouse への移行 +# Elasticsearch から ClickHouse への移行 {#elasticsearch-to-clickhouse-migration} オブザーバビリティのユースケースについては、[Elasticsearch から ClickStack への移行](/use-cases/observability/clickstack/migration/elastic) の移行ドキュメントを参照してください。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md index ce49f001ee5..32f1c411563 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Amazon Redshift から ClickHouse への移行 +# Amazon Redshift から ClickHouse への移行 {#amazon-redshift-to-clickhouse-migration} > このドキュメントでは、Amazon Redshift から ClickHouse へのデータ移行の概要を説明します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md index 33827b48ceb..cd2404f2389 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md @@ -7,9 +7,8 @@ title: 'Amazon Redshift から ClickHouse への移行ガイド' doc_type: 'guide' --- -import MigrationGuide from '@site/docs/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +import MigrationGuide from '@site/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +# Amazon Redshift から ClickHouse への移行ガイド {#amazon-redshift-to-clickhouse-migration-guide} -# Amazon Redshift から ClickHouse への移行ガイド - - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md index 32a05db8eee..98c69a3b873 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Amazon Redshift SQL 変換ガイド +# Amazon Redshift SQL 変換ガイド {#amazon-redshift-sql-translation-guide} @@ -52,9 +52,9 @@ ClickHouse と Redshift 間でデータを移動するユーザーは、ClickHou -## DDL 構文 +## DDL 構文 {#compression} -### ソートキー +### ソートキー {#sorting-keys} ClickHouse と Redshift の両方には「ソートキー」という概念があり、 データを保存する際にどのような順序で格納するかを定義します。Redshift では、 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md index 63ddb3a17e6..e4f4b779086 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md @@ -8,7 +8,7 @@ keywords: ['移行', 'ClickHouse Cloud', 'OSS', 'セルフマネージド環境 --- import Image from '@theme/IdealImage'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import self_managed_01 from '@site/static/images/integrations/migration/self-managed-01.png'; import self_managed_02 from '@site/static/images/integrations/migration/self-managed-02.png'; import self_managed_03 from '@site/static/images/integrations/migration/self-managed-03.png'; @@ -16,16 +16,13 @@ import self_managed_04 from '@site/static/images/integrations/migration/self-man import self_managed_05 from '@site/static/images/integrations/migration/self-managed-05.png'; import self_managed_06 from '@site/static/images/integrations/migration/self-managed-06.png'; +# セルフマネージド ClickHouse と ClickHouse Cloud 間の移行 {#migrating-between-self-managed-clickhouse-and-clickhouse-cloud} -# セルフマネージド ClickHouse と ClickHouse Cloud 間の移行 - -セルフマネージド ClickHouse の移行 +セルフマネージド ClickHouse の移行 このガイドでは、セルフマネージドな ClickHouse サーバーから ClickHouse Cloud への移行方法と、ClickHouse Cloud のサービス間での移行方法を説明します。[`remoteSecure`](/sql-reference/table-functions/remote) 関数は、`SELECT` および `INSERT` クエリでリモートの ClickHouse サーバーにアクセスするために使用します。これにより、`SELECT` を埋め込んだ `INSERT INTO` クエリを書くことで、テーブルを簡単に移行できます。 - - -## 自前運用の ClickHouse から ClickHouse Cloud への移行 +## 自前運用の ClickHouse から ClickHouse Cloud への移行 {#migrating-from-self-managed-clickhouse-to-clickhouse-cloud} 自前運用の ClickHouse からの移行 @@ -36,7 +33,7 @@ ClickHouse Cloud が垂直・水平スケーリングを自動的に処理する この例では、自前運用の ClickHouse サーバーが *ソース*、ClickHouse Cloud サービスが *宛先* になります。 -### 概要 +### 概要 {#overview} 手順は次のとおりです。 @@ -46,11 +43,11 @@ ClickHouse Cloud が垂直・水平スケーリングを自動的に処理する 4. (該当する場合)宛先側の IP アクセスリストからソースサーバーを削除する 5. ソース側のサービスから読み取り専用ユーザーを削除する -### あるシステムから別のシステムへのテーブルの移行 +### あるシステムから別のシステムへのテーブルの移行 {#migration-of-tables-from-one-system-to-another} この例では、1 つのテーブルを自前運用の ClickHouse サーバーから ClickHouse Cloud に移行します。 -### ソース側の ClickHouse システム(現在データを保持しているシステム)での作業 +### ソース側の ClickHouse システム(現在データを保持しているシステム)での作業 {#on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data} * ソーステーブル(この例では `db.table`)を読み取ることができる読み取り専用ユーザーを追加します @@ -72,7 +69,7 @@ FROM system.tables WHERE database = 'db' AND table = 'table' ``` -### 宛先側の ClickHouse Cloud システム上で: +### 宛先側の ClickHouse Cloud システム上で: {#on-the-destination-clickhouse-cloud-system} * 宛先データベースを作成します。 @@ -119,8 +116,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS') SELECT * FROM db.table ``` - -## ClickHouse Cloud サービス間での移行 +## ClickHouse Cloud サービス間での移行 {#migrating-between-clickhouse-cloud-services} 自己管理型 ClickHouse の移行 @@ -143,7 +139,7 @@ ClickHouse Cloud サービス間でデータを移行する主なユースケー 6. デスティネーション上で IP Access List を再設定する 7. ソースサービスから読み取り専用ユーザーを削除する -#### ソースサービスに読み取り専用ユーザーを追加する +#### ソースサービスに読み取り専用ユーザーを追加する {#add-a-read-only-user-to-the-source-service} * ソーステーブル(この例では `db.table`)を読み取れる読み取り専用ユーザーを追加します @@ -164,7 +160,7 @@ ClickHouse Cloud サービス間でデータを移行する主なユースケー where database = 'db' and table = 'table' ``` -#### デスティネーションサービス上でテーブル構造を複製する +#### デスティネーションサービス上でテーブル構造を複製する {#duplicate-the-table-structure-on-the-destination-service} デスティネーションにまだデータベースが存在しない場合は、先に作成します: @@ -181,7 +177,7 @@ ClickHouse Cloud サービス間でデータを移行する主なユースケー CREATE TABLE db.table ... ``` -#### ソースサービスへのリモートアクセスを許可する +#### ソースサービスへのリモートアクセスを許可する {#allow-remote-access-to-the-source-service} ソースからデスティネーションへデータをプルするには、ソースサービスが接続を許可している必要があります。ソースサービス上で一時的に「IP Access List」機能を無効化します。 @@ -191,7 +187,7 @@ ClickHouse Cloud サービス間でデータを移行する主なユースケー 許可リストを編集し、一時的に **Anywhere** からのアクセスを許可します。詳細については [IP Access List](/cloud/security/setting-ip-filters) ドキュメントを参照してください。 -#### ソースからデスティネーションへデータをコピーする +#### ソースからデスティネーションへデータをコピーする {#copy-the-data-from-source-to-destination} * `remoteSecure` 関数を使用して、ソースの ClickHouse Cloud サービスからデータをプルします。 デスティネーションに接続し、デスティネーション側の ClickHouse Cloud サービスで次のコマンドを実行します: @@ -203,11 +199,11 @@ ClickHouse Cloud サービス間でデータを移行する主なユースケー * デスティネーションサービス上のデータを確認します -#### ソース上で IP Access List を再設定する +#### ソース上で IP Access List を再設定する {#re-establish-the-ip-access-list-on-the-source} 以前にアクセスリストをエクスポートしている場合は、**Share** を使って再インポートできます。エクスポートしていない場合は、アクセスリストにエントリを再度追加してください。 -#### 読み取り専用ユーザー `exporter` を削除する +#### 読み取り専用ユーザー `exporter` を削除する {#remove-the-read-only-exporter-user} ```sql DROP USER exporter diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md index 497022943f0..dce22244c4e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md @@ -11,14 +11,14 @@ import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import ch_local_01 from '@site/static/images/integrations/migration/ch-local-01.png'; import ch_local_02 from '@site/static/images/integrations/migration/ch-local-02.png'; import ch_local_03 from '@site/static/images/integrations/migration/ch-local-03.png'; import ch_local_04 from '@site/static/images/integrations/migration/ch-local-04.png'; -# clickhouse-local を使用した ClickHouse への移行 +# clickhouse-local を使用した ClickHouse への移行 {#migrating-to-clickhouse-using-clickhouse-local} セルフマネージド ClickHouse の移行 @@ -91,21 +91,21 @@ Mac で `clickhouse-local` を実行するには、`./clickhouse local` を使 -## 例 1: Integration テーブルエンジンを使用して MySQL から ClickHouse Cloud へ移行する +## 例 1: Integration テーブルエンジンを使用して MySQL から ClickHouse Cloud へ移行する {#example-1-migrating-from-mysql-to-clickhouse-cloud-with-an-integration-engine} ソースの MySQL データベースからデータを読み取るために、[mysql テーブル関数](/sql-reference/table-functions/mysql/) によって動的に作成される [integration テーブルエンジン](/engines/table-engines/integrations/mysql/) を使用し、ClickHouse Cloud サービス上の宛先テーブルにデータを書き込むために [remoteSecure テーブル関数](/sql-reference/table-functions/remote/) を使用します。 自己管理型 ClickHouse からの移行 -### 宛先側の ClickHouse Cloud サービスで: +### 宛先側の ClickHouse Cloud サービスで: {#on-the-destination-clickhouse-cloud-service} -#### 宛先データベースを作成する: +#### 宛先データベースを作成する: {#create-the-destination-database} ```sql CREATE DATABASE db ``` -#### MySQL テーブルと同じスキーマを持つ出力先テーブルを作成します: +#### MySQL テーブルと同じスキーマを持つ出力先テーブルを作成します: {#create-a-destination-table-that-has-a-schema-equivalent-to-the-mysql-table} ```sql CREATE TABLE db.table ... @@ -115,9 +115,9 @@ CREATE TABLE db.table ... ClickHouse Cloud の宛先テーブルのスキーマと、元の MySQL テーブルのスキーマは整合している必要があります(カラム名と順序が同一であり、かつカラムのデータ型が互換性を持っている必要があります)。 ::: -### clickhouse-local を実行するホストマシン上で: +### clickhouse-local を実行するホストマシン上で: {#on-the-clickhouse-local-host-machine} -#### マイグレーション用クエリで clickhouse-local を実行します: +#### マイグレーション用クエリで clickhouse-local を実行します: {#run-clickhouse-local-with-the-migration-query} ```sql ./clickhouse-local --query " @@ -131,16 +131,16 @@ SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');" ::: -## 例 2: JDBC ブリッジを使用して MySQL から ClickHouse Cloud へ移行する +## 例 2: JDBC ブリッジを使用して MySQL から ClickHouse Cloud へ移行する {#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge} [jdbc テーブル関数](/sql-reference/table-functions/jdbc.md) によってオンザフライで作成される [JDBC integration テーブルエンジン](/engines/table-engines/integrations/jdbc.md) を、[ClickHouse JDBC Bridge](https://github.com/ClickHouse/clickhouse-jdbc-bridge) および MySQL JDBC ドライバーと組み合わせて使用してソースの MySQL データベースからデータを読み取り、[remoteSecure テーブル関数](/sql-reference/table-functions/remote.md) を使用して ClickHouse Cloud サービス上の宛先テーブルにデータを書き込みます。 自己管理型 ClickHouse からの移行 -### 宛先の ClickHouse Cloud サービス側での作業: +### 宛先の ClickHouse Cloud サービス側での作業: {#on-the-destination-clickhouse-cloud-service-1} -#### 宛先データベースを作成する: +#### 宛先データベースを作成する: {#create-the-destination-database-1} ```sql CREATE DATABASE db diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md index 2c02d711cc8..15a23962893 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md @@ -10,15 +10,14 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import third_party_01 from '@site/static/images/integrations/migration/third-party-01.png'; +# サードパーティ製 ETL ツールの利用 {#using-a-3rd-party-etl-tool} -# サードパーティ製 ETL ツールの利用 - -自己管理型 ClickHouse の移行 +自己管理型 ClickHouse の移行 外部データソースから ClickHouse にデータを移動する優れた方法の 1 つは、数多く存在する一般的な ETL/ELT ツールのいずれかを利用することです。以下のツールについてはドキュメントを用意しています。 -- [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) -- [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) -- [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) +* [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) +* [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) +* [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) なお、ClickHouse と連携できる ETL/ELT ツールは他にも多数あります。ご利用中(あるいはお好み)のツールについては、そのツールのドキュメントを参照して詳細を確認してください。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md index b61bfea74cc..fffa8dedad7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md @@ -9,19 +9,18 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import object_storage_01 from '@site/static/images/integrations/migration/object-storage-01.png'; +# クラウドオブジェクトストレージから ClickHouse Cloud へのデータ移行 {#move-data-from-cloud-object-storage-to-clickhouse-cloud} -# クラウドオブジェクトストレージから ClickHouse Cloud へのデータ移行 - -Migrating Self-managed ClickHouse +Migrating Self-managed ClickHouse Cloud Object Storage をデータレイクとして利用していて、そのデータを ClickHouse Cloud にインポートしたい場合や、 現在利用しているデータベースシステムがデータを直接 Cloud Object Storage にオフロードできる場合には、 Cloud Object Storage に保存されたデータを ClickHouse Cloud のテーブルへ移行するために、以下のいずれかの テーブル関数を使用できます。 -- [s3](/sql-reference/table-functions/s3.md) または [s3Cluster](/sql-reference/table-functions/s3Cluster.md) -- [gcs](/sql-reference/table-functions/gcs) -- [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) +* [s3](/sql-reference/table-functions/s3.md) または [s3Cluster](/sql-reference/table-functions/s3Cluster.md) +* [gcs](/sql-reference/table-functions/gcs) +* [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) 現在利用しているデータベースシステムがデータを直接 Cloud Object Storage にオフロードできない場合は、 [サードパーティ製 ETL/ELT ツール](/cloud/migration/etl-tool-to-clickhouse) や [clickhouse-local](/cloud/migration/clickhouse-local) を使って、 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md index 88161598c3a..eced5a28c85 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md @@ -7,12 +7,12 @@ hide_title: true doc_type: 'guide' --- -import TableOfContentsBestPractices from '@site/docs/best-practices/_snippets/_table_of_contents.md'; -import TableOfContentsOptimizationAndPerformance from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; -import TableOfContentsSecurity from '@site/docs/cloud/_snippets/_security_table_of_contents.md'; +import TableOfContentsBestPractices from '@site/i18n/jp/docusaurus-plugin-content-docs/current/best-practices/_snippets/_table_of_contents.md'; +import TableOfContentsOptimizationAndPerformance from '@site/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContentsSecurity from '@site/i18n/jp/docusaurus-plugin-content-docs/current/cloud/_snippets/_security_table_of_contents.md'; -# リソースの概要 +# リソースの概要 {#resource-tour} この記事では、ClickHouse Cloud デプロイメントを最大限に活用するために、 ドキュメント内で利用できる各種リソースの概要を紹介します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/index.md index b91b0c318cf..4e03af7d173 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/onboard/index.md @@ -9,7 +9,7 @@ keywords: ['オンボーディング', 'はじめに', 'クラウド設定', ' -# ClickHouse Cloud を始める +# ClickHouse Cloud を始める {#get-started-with-clickhouse-cloud} ClickHouse Cloud を初めて使用する方で、どこから始めればよいかわからない場合、このドキュメントセクションでは、迅速に稼働させるために必要なすべての手順を説明します。ClickHouse Cloud を探索する過程で各ステップをガイドできるよう、この入門セクションを3つのサブセクションに分けて構成しています。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md index 79a62dc9190..7732d5b0c73 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md @@ -12,7 +12,7 @@ doc_type: 'changelog' -#### 後方互換性のない変更 +#### 後方互換性のない変更 {#backward-incompatible-change} * ネストされた型内にある疑わしい/実験的な型を検証するようにしました。これまでは、Array/Tuple/Map のようなネストされた型内では(JSON を除き)そのような型を検証していませんでした。[#59385](https://github.com/ClickHouse/ClickHouse/pull/59385) ([Kruglov Pavel](https://github.com/Avogar))。 * ソート句 `ORDER BY ALL`(v23.12 で導入された)は `ORDER BY *` に置き換えられました。以前の構文は、`all` というカラムを持つテーブルでは誤りの原因になりやすいものでした。[#59450](https://github.com/ClickHouse/ClickHouse/pull/59450)([Robert Schulze](https://github.com/rschu1ze))。 @@ -29,7 +29,7 @@ doc_type: 'changelog' -#### 新機能 +#### 新機能 {#new-feature} * 値の件数とその誤差を返す Topk/topkweighed モードをサポート。 [#54508](https://github.com/ClickHouse/ClickHouse/pull/54508) ([UnamedRus](https://github.com/UnamedRus)). * ビュー/マテリアライズドビューで DEFINER ユーザーを指定できる新しい構文を追加しました。これにより、基盤となるテーブルに対する明示的な権限付与なしに、ビューからの SELECT/INSERT を実行できるようになりました。 [#54901](https://github.com/ClickHouse/ClickHouse/pull/54901) ([pufit](https://github.com/pufit)). @@ -57,7 +57,7 @@ doc_type: 'changelog' -#### パフォーマンスの向上 +#### パフォーマンスの向上 {#performance-improvement} * SELECT 句の GROUP BY キーに対する min/max/any/anyLast 集約関数を除去します。 [#52230](https://github.com/ClickHouse/ClickHouse/pull/52230) ([JackyWoo](https://github.com/JackyWoo)). * 複数の [nullable] カラムが関係する場合のシリアル化集約メソッドのパフォーマンスを改善しました。これは抽象化の整合性を損なうことのない、[#51399](https://github.com/ClickHouse/ClickHouse/issues/51399) の汎用バージョンです。[#55809](https://github.com/ClickHouse/ClickHouse/pull/55809)([Amos Bird](https://github.com/amosbird))。 @@ -86,7 +86,7 @@ doc_type: 'changelog' -#### 改善 +#### 改善 {#improvement} * マテリアライズドビューに対して `MODIFY COLUMN` クエリを実行する際は、内部テーブルの構造を確認し、すべてのカラムが存在していることを保証してください。 [#47427](https://github.com/ClickHouse/ClickHouse/pull/47427) ([sunny](https://github.com/sunny19930321)). * パーサーが扱うすべてのキーワードを含むテーブル `system.keywords` を追加しました。主に、ファジングおよびシンタックスハイライトを改善するために使用されます。 [#51808](https://github.com/ClickHouse/ClickHouse/pull/51808) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md index 4c5672a6c8b..c7922a7a5a9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# Cloud 向け v24.5 の変更履歴 +# Cloud 向け v24.5 の変更履歴 {#v245-changelog-for-cloud} v24.5 リリースに基づく ClickHouse Cloud サービスに関する変更点です。 @@ -128,7 +128,7 @@ v24.5 リリースに基づく ClickHouse Cloud サービスに関する変更 -# 改良点 +# 改良点 {#improvements} * `optimize_monotonous_functions_in_order_by` 設定を削除しました。この設定は実質的に何もしない(no-op)状態になりつつあります。 [#63004](https://github.com/ClickHouse/ClickHouse/pull/63004) (Raúl Marín). diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md index e38d4ec4f3a..404b7407e9b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# ClickHouse Cloud 向け v24.6 変更ログ +# ClickHouse Cloud 向け v24.6 変更ログ {#v246-changelog-for-cloud} v24.6 リリースに基づき、ClickHouse Cloud サービスに関係する変更点を記載します。 @@ -110,7 +110,7 @@ v24.6 リリースに基づき、ClickHouse Cloud サービスに関係する変 -## バグ修正(公式安定版リリースにおけるユーザー影響のある不具合) +## バグ修正(公式安定版リリースにおけるユーザー影響のある不具合) {#bug-fix-user-visible-misbehavior-in-an-official-stable-release} * IN および indexHint() 使用時に 'set' スキップインデックスが動作しない問題を修正。 #62083 (Michael Kolupaev)。 * テーブルが adaptive granularity を使用していない場合に、FINAL を使用したクエリが誤った結果を返す問題を修正。#62432 (Duc Canh Le)。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md index 9de9d1c8165..227364349d1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md @@ -22,7 +22,7 @@ v24.10 リリースに基づく ClickHouse Cloud サービスに関する主な -## 新機能 +## 新機能 {#new-feature} * リフレッシュ可能なマテリアライズドビューが本番利用向けに安定しました。 [#70550](https://github.com/ClickHouse/ClickHouse/pull/70550) ([Michael Kolupaev](https://github.com/al13n321))。リフレッシュ可能なマテリアライズドビューが Replicated データベースでもサポートされるようになりました。 [#60669](https://github.com/ClickHouse/ClickHouse/pull/60669) ([Michael Kolupaev](https://github.com/al13n321))。 * 関数 `toStartOfInterval()` に、TimescaleDB の `time_bucket()` 関数および PostgreSQL の `date_bin()` 関数の動作をエミュレートする新しいオーバーロードが追加されました([#55619](https://github.com/ClickHouse/ClickHouse/issues/55619))。これにより、日付またはタイムスタンプ値を、*固定* の起点(0000-01-01 00:00:00.000)ではなく、*任意の* 起点からの指定した間隔の整数倍に切り揃えることができます。例えば、`SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));` は `2023-01-01 14:44:30` を返します。これは、起点 `2023-01-01 14:35:30` を基準として 1 分間隔の整数倍に切り揃えられた値です。[#56738](https://github.com/ClickHouse/ClickHouse/pull/56738)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md index dcf02be6892..a33dea964f0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md @@ -11,7 +11,7 @@ import Image from '@theme/IdealImage'; import Architecture from '@site/static/images/cloud/reference/architecture.png'; -# ClickHouse Cloud アーキテクチャ +# ClickHouse Cloud アーキテクチャ {#clickhouse-cloud-architecture} ClickHouse Cloud のアーキテクチャ diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md index f451e9af942..50ae42958c3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md @@ -181,9 +181,9 @@ ClickHouse Cloud の課金は、コンピュート、ストレージ、[デー -## よくある質問 +## よくある質問 {#faqs} -### ClickHouse Credit (CHC) とは何ですか? +### ClickHouse Credit (CHC) とは何ですか? {#what-is-chc} ClickHouse Credit は、ClickHouse Cloud の利用に対するクレジットの単位であり、1 CHC は 1 米ドル (US$1) に相当します。これは、ClickHouse がその時点で公開している価格表に基づいて適用されます。 @@ -191,27 +191,27 @@ ClickHouse Credit は、ClickHouse Cloud の利用に対するクレジットの Stripe を通じて請求されている場合、Stripe の請求書上では 1 CHC は US$0.01 として表示されます。これは、当社の標準 SKU(1 CHC = US$1)について、Stripe 側の仕様上、端数数量を請求できないためであり、その制約の中で正確な請求を行うためのものです。 ::: -### 旧プラン(レガシー)の料金はどこで確認できますか? +### 旧プラン(レガシー)の料金はどこで確認できますか? {#find-legacy-pricing} 旧プラン(レガシー)の料金情報は[こちら](https://clickhouse.com/pricing?legacy=true)で確認できます。 -### コンピュート(計算リソース)はどのように計測されますか? +### コンピュート(計算リソース)はどのように計測されますか? {#how-is-compute-metered} ClickHouse Cloud は、コンピュートを 8G RAM 単位で 1 分ごとに計測します。 コンピュートコストはティア、リージョン、クラウドサービスプロバイダーによって異なります。 -### ディスク上のストレージはどのように算出されますか? +### ディスク上のストレージはどのように算出されますか? {#how-is-storage-on-disk-calculated} ClickHouse Cloud はクラウドオブジェクトストレージを使用しており、ClickHouse のテーブルに保存されているデータの圧縮後サイズに基づいて使用量を計測します。 ストレージコストはティア間で共通ですが、リージョンおよびクラウドサービスプロバイダーによって異なります。 -### バックアップはストレージの合計に含まれますか? +### バックアップはストレージの合計に含まれますか? {#do-backups-count-toward-total-storage} ストレージとバックアップはいずれもストレージコストの対象となり、個別に請求されます。 すべてのサービスは、デフォルトで 1 日間保持される 1 つのバックアップが有効になっています。 追加のバックアップが必要なユーザーは、Cloud コンソールの設定タブで追加の[バックアップ](/cloud/manage/backups/overview)を構成することで対応できます。 -### 圧縮率はどのように見積もればよいですか? +### 圧縮率はどのように見積もればよいですか? {#how-do-i-estimate-compression} 圧縮率はデータセットごとに大きく異なります。 どの程度変動するかは、そもそもデータがどれだけ圧縮しやすいか(高カーディナリティと低カーディナリティのフィールドの数など)や、 @@ -228,12 +228,12 @@ FROM system.tables WHERE name = <任意のテーブル名> ``` -### セルフマネージドで運用している場合、クラウドでサービスを実行する際のコストを見積もるために ClickHouse はどのようなツールを提供していますか? +### セルフマネージドで運用している場合、クラウドでサービスを実行する際のコストを見積もるために ClickHouse はどのようなツールを提供していますか? {#what-tools-does-clickhouse-offer-to-estimate-the-cost-of-running-a-service-in-the-cloud-if-i-have-a-self-managed-deployment} ClickHouse のクエリログは、ClickHouse Cloud でワークロードを実行するためのコストを見積もる際に利用できる[主要なメトリクス](/operations/system-tables/query_log)を記録します。 セルフマネージド環境から ClickHouse Cloud への移行の詳細については[移行ドキュメント](/cloud/migration/clickhouse-to-cloud)を参照し、さらに質問がある場合は [ClickHouse Cloud support](https://console.clickhouse.cloud/support) までお問い合わせください。 -### ClickHouse Cloud にはどのような課金オプションがありますか? +### ClickHouse Cloud にはどのような課金オプションがありますか? {#what-billing-options-are-available-for-clickhouse-cloud} ClickHouse Cloud は次の課金オプションをサポートしています: @@ -245,11 +245,11 @@ ClickHouse Cloud は次の課金オプションをサポートしています: PAYG 向けの ClickHouse Cloud クレジットは 0.01 ドル単位で請求されるため、利用状況に応じてクレジットの端数も含めて課金できます。これは、事前購入するコミット型の ClickHouse クレジット(1 ドル単位の整数額で購入)とは異なります。 ::: -### クレジットカードを削除できますか? +### クレジットカードを削除できますか? {#can-i-delete-my-credit-card} Billing UI からクレジットカードを削除することはできませんが、いつでも更新することはできます。これにより、常に有効な支払い方法が組織に設定されていることを保証します。クレジットカードを削除する必要がある場合は、[ClickHouse Cloud support](https://console.clickhouse.cloud/support) までお問い合わせください。 -### 課金サイクルはどのくらいの期間ですか? +### 課金サイクルはどのくらいの期間ですか? {#how-long-is-the-billing-cycle} 課金は月次サイクルに従い、開始日は ClickHouse Cloud の組織が作成された日となります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md index ee416883e96..5dd60175810 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md @@ -1,7 +1,7 @@ --- slug: /cloud/billing/marketplace/aws-marketplace-payg -title: 'AWS Marketplace の従量課金 (PAYG)' -description: 'AWS Marketplace(PAYG 従量課金)経由で ClickHouse Cloud に登録します。' +title: 'AWS Marketplace PAYG' +description: 'AWS Marketplace(PAYG)を通じて ClickHouse Cloud に申し込みます。' keywords: ['aws', 'marketplace', 'billing', 'PAYG'] doc_type: 'guide' --- @@ -17,21 +17,19 @@ import aws_marketplace_payg_8 from '@site/static/images/cloud/manage/billing/mar import aws_marketplace_payg_9 from '@site/static/images/cloud/manage/billing/marketplace/aws-marketplace-payg-9.png'; import Image from '@theme/IdealImage'; -PAYG(従量課金制)のパブリックオファーを利用して、[AWS Marketplace](https://aws.amazon.com/marketplace) から ClickHouse Cloud の利用を開始しましょう。 +[AWS Marketplace](https://aws.amazon.com/marketplace) の PAYG(従量課金制)パブリックオファーから ClickHouse Cloud の利用を開始しましょう。 ## 前提条件 {#prerequisites} -- 課金管理者によって購入権限が付与されている AWS アカウント。 -- 購入するには、そのアカウントで AWS Marketplace にログインしている必要があります。 -- サブスクリプションに ClickHouse の組織を接続するには、その組織の管理者である必要があります。 +- 請求管理者によって購入権限が有効化されている AWS アカウント。 +- サブスクリプションを購入するには、そのアカウントで AWS Marketplace にログインしている必要があります。 +- サブスクリプションに ClickHouse 組織を接続するには、その組織の管理者である必要があります。 :::note -1 つの AWS アカウントは、「ClickHouse Cloud - Pay As You Go」サブスクリプション 1 件のみに登録でき、そのサブスクリプションは 1 つの ClickHouse 組織にのみリンクできます。 +1 つの AWS アカウントは、「ClickHouse Cloud - Pay As You Go」サブスクリプション 1 件にしか登録できず、そのサブスクリプションは 1 つの ClickHouse 組織にのみリンクできます。 ::: - - ## サインアップ手順 {#steps-to-sign-up} @@ -46,25 +44,26 @@ PAYG(従量課金制)のパブリックオファーを利用して、[AWS Ma [リスティング](https://aws.amazon.com/marketplace/pp/prodview-p4gwofrqpkltu) をクリックし、続いて **View purchase options** をクリックします。 -AWS Marketplace の購入オプション表示画面 +AWS Marketplace の購入オプションの表示 ### 購読する {#subscribe} -次の画面で、**Subscribe** をクリックします。 +次の画面で「Subscribe」をクリックします。 :::note -**Purchase order (PO) number** は任意入力のため、省略してかまいません。 +**Purchase order (PO) number** は任意であり、入力しなくてもかまいません。 +**このリスティングには 2 つのオファーが用意されています。** 「ClickHouse Cloud - Pay As You Go Free Trial」のオファーを選択した場合、30 日間の AWS 管理の無料トライアルにサブスクライブすることになります。ただし、30 日が経過するとこのリスティングのサブスクリプションは終了します。ClickHouse の Pay As You Go を継続利用するには、このリスティング上のもう一方の「ClickHouse Cloud - Pay As You Go」オファーに再度サブスクライブする必要があります。 ::: -AWS Marketplace の購読画面 +AWS Marketplace でのサブスクライブ画面 ### アカウントをセットアップする {#set-up-your-account} -この時点ではセットアップは完了しておらず、まだ ClickHouse Cloud 組織の請求は AWS Marketplace 経由になっていないことに注意してください。Marketplace のサブスクリプション画面で **Set up your account** をクリックし、ClickHouse Cloud にリダイレクトしてセットアップを完了させる必要があります。 +この時点ではセットアップは完了しておらず、まだ ClickHouse Cloud の組織は Marketplace 経由での課金対象にはなっていない点に注意してください。Marketplace のサブスクリプション画面で「Set up your account」をクリックし、ClickHouse Cloud にリダイレクトしてセットアップを完了させます。 アカウントのセットアップ -ClickHouse Cloud にリダイレクトされたら、既存アカウントでログインするか、新しいアカウントを登録できます。ClickHouse Cloud 組織を AWS Marketplace の課金に紐付けるために、このステップは非常に重要です。 +ClickHouse Cloud にリダイレクトされたら、既存アカウントでログインするか、新規アカウントを登録できます。このステップは、ClickHouse Cloud の組織を AWS Marketplace の課金に紐付けるために非常に重要です。 :::note[新規 ClickHouse Cloud ユーザー] ClickHouse Cloud を初めて利用する場合は、以下の手順に従ってください。 @@ -73,38 +72,36 @@ ClickHouse Cloud を初めて利用する場合は、以下の手順に従って
新規ユーザー向けの手順 -ClickHouse Cloud を初めて利用する場合は、ページ下部の **Register** をクリックします。新規ユーザーの作成とメールアドレスの確認を求められます。メールアドレスを確認したら、ClickHouse Cloud のログインページは閉じてかまいません。https://console.clickhouse.cloud にアクセスし、新しく作成したユーザー名でログインします。 +ClickHouse Cloud を初めて利用する場合は、ページ下部の「Register」をクリックします。新しいユーザーの作成とメールアドレスの確認を求められます。メール確認が完了したら、ClickHouse Cloud のログインページを閉じ、https://console.clickhouse.cloud で新しいユーザー名を使用してログインできます。 ClickHouse Cloud のサインアップ :::note[新規ユーザー] -ビジネスに関する基本的な情報も入力する必要があります。以下のスクリーンショットを参照してください。 +ビジネスに関する基本的な情報の入力も必要になります。以下のスクリーンショットを参照してください。 ::: -開始前の入力画面 +開始前の画面 -開始前の入力画面(続き) +開始前の画面(続き)
-すでに ClickHouse Cloud を利用している場合は、既存の認証情報を使用してログインするだけでかまいません。 +既存の ClickHouse Cloud ユーザーの場合は、認証情報を使用してログインするだけで構いません。 -### Marketplace サブスクリプションを Organization に追加する {#add-marketplace-subscription} +### Marketplace サブスクリプションを組織に追加する {#add-marketplace-subscription} -正常にログインしたら、この Marketplace サブスクリプションで課金する新しい Organization を作成するか、このサブスクリプションに紐付けて課金する既存の Organization を選択します。 +ログインに成功したら、この Marketplace サブスクリプションで課金する新しい組織を作成するか、既存の組織のいずれかを選択して、このサブスクリプションの課金先として指定できます。 Marketplace サブスクリプションの追加 -このステップを完了すると、組織はこの AWS サブスクリプションに接続され、すべての利用料金は AWS アカウント経由で請求されます。 +このステップを完了すると、組織はこの AWS サブスクリプションに接続され、すべての使用量が AWS アカウント経由で課金されます。 -ClickHouse UI の組織の請求ページから、請求が AWS Marketplace にリンクされていることを確認できます。 +ClickHouse の UI にある組織の請求ページから、請求が AWS Marketplace にリンクされていることを確認できます。 請求ページの確認
- - ## サポート {#support} -問題が発生した場合は、[サポートチーム](https://clickhouse.com/support/program)までお気軽にお問い合わせください。 +問題が発生した場合は、[弊社サポートチーム](https://clickhouse.com/support/program)まで遠慮なくお問い合わせください。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx index 66d69f31285..5fd00ebc2c1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['課金', 'ネットワーク転送量', 'データ送信量', 'コスト', '料金'] --- -import NetworkPricing from '@site/docs/cloud/reference/_snippets/_network_transfer_rates.md'; +import NetworkPricing from '@site/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/_snippets/_network_transfer_rates.md'; ClickHouse Cloud は、転送されるデータのイングレスとエグレスを計測します。 これには、ClickHouse Cloud への入出力データだけでなく、同一リージョン内および diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md index 34e6ddd0bbf..1bc939d3e74 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md @@ -7,9 +7,9 @@ keywords: ['請求', '支払いしきい値', '自動請求書発行', '請求 doc_type: 'guide' --- -# 支払いしきい値 +# 支払いしきい値 {#payment-thresholds} -請求期間中に ClickHouse Cloud のご利用金額が 10,000 米ドル(または同等額)に達すると、ご登録のお支払い方法から自動的に決済されます。決済に失敗した場合、猶予期間の後にサービスが一時停止または終了されます。 +請求期間中に ClickHouse Cloud のご利用金額が 10,000 米ドル(または同等額)に達すると、ご登録のお支払い方法から自動的に決済されます。決済に失敗した場合、猶予期間の後にサービスが一時停止または終了されます。 :::note この支払いしきい値は、一定額の利用を約束する契約や、その他 ClickHouse と個別に合意した契約を締結しているお客様には適用されません。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md index dc1b7de79b7..949d67078f1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md @@ -11,7 +11,7 @@ import billing_compliance from '@site/static/images/cloud/manage/billing_complia import Image from '@theme/IdealImage'; -# ClickHouse Cloud の課金コンプライアンス +# ClickHouse Cloud の課金コンプライアンス {#clickhouse-cloud-billing-compliance} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md index 97fead5c6b5..ad4739223e1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md @@ -10,7 +10,7 @@ doc_type: 'reference' import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge' -# サポート対象のクラウドリージョン +# サポート対象のクラウドリージョン {#supported-cloud-regions} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md index f39d46c5d76..ec51c52efd9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md @@ -10,8 +10,7 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-settings-sidebar.png'; - -# 設定の構成方法 +# 設定の構成方法 {#configuring-settings} 特定の[ユーザー](/operations/access-rights#user-account-management)または[ロール](/operations/access-rights#role-management)向けに ClickHouse Cloud サービスの設定を指定するには、[SQL ベースの Settings Profile](/operations/access-rights#settings-profiles-management)を使用する必要があります。Settings Profile を適用することで、サービスが停止したりアイドル状態になったりアップグレードされた場合でも、構成した設定が保持されます。Settings Profile の詳細については[こちらのページ](/operations/settings/settings-profiles.md)を参照してください。 @@ -19,4 +18,4 @@ import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-setti ClickHouse Cloud サービスに対して指定できる設定の詳細については、[ドキュメント](/operations/settings)内のカテゴリ別の全設定一覧を参照してください。 -Cloud 設定サイドバー \ No newline at end of file +Cloud 設定サイドバー \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md index 7cfb7ca656d..4761d1b347a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md @@ -10,7 +10,7 @@ import BetaBadge from '@theme/badges/BetaBadge'; import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge'; -# セキュリティおよびコンプライアンスレポート +# セキュリティおよびコンプライアンスレポート {#security-and-compliance-reports} ClickHouse はお客様のセキュリティおよびコンプライアンスに関するニーズを評価し、追加のレポートに対するご要望に応じてプログラムの拡充を継続しています。詳細やレポートのダウンロードは、[Trust Center](https://trust.clickhouse.com) をご覧ください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md index 0f8964f21da..b5dc8d9ce75 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md @@ -37,7 +37,7 @@ doc_type: 'guide' -## アカウントの閉鎖をリクエストする +## アカウントの閉鎖をリクエストする {#request-account-closure} 閉鎖および削除のリクエストについては、認証が必要です。リクエストを迅速に処理できるよう、以下の手順に従ってください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/index.md index c15a604a50e..88bf9b736af 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/cloud/reference/index.md @@ -7,7 +7,7 @@ description: 'Cloud リファレンスセクション用ランディングペー doc_type: 'landing-page' --- -# Cloud リファレンス +# Cloud リファレンス {#cloud-reference} このセクションは ClickHouse Cloud のより技術的な詳細に関するリファレンスガイドで、次のページで構成されています: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/glossary.md b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/glossary.md index 32138525a70..25d7f65ecc2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/glossary.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/glossary.md @@ -10,7 +10,7 @@ doc_type: 'reference' {/* no-glossary */ } -# 用語集 +# 用語集 {#glossary} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/olap.md b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/olap.md index 627c3f4582b..6e4289f6f26 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/olap.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/olap.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# OLAP とは何ですか? +# OLAP とは何ですか? {#what-is-olap} [OLAP](https://en.wikipedia.org/wiki/Online_analytical_processing) は Online Analytical Processing(オンライン分析処理)の略です。これは広い意味を持つ用語で、技術的観点とビジネス的観点の 2 つの視点から捉えることができます。最も抽象的なレベルでは、これらの単語を逆から読むとイメージしやすくなります: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx index 0a1d4d292d8..8f376dd892a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx @@ -18,7 +18,7 @@ doc_type: 'guide' ## ストレージ層:同時に行われる INSERT は互いに独立している \{#storage-layer-concurrent-inserts-are-isolated-from-each-other\} - + + + + + + + \ No newline at end of file + - + -## 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} - -## 例 - -### プライマリキーに含まれていない列でのフィルタリング +### プライマリキーに含まれないカラムでのフィルタリング {#filtering-without-using-primary-keys} この例では、テーブルに 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不動産価格データのクエリを高速化する {#using-projections-to-speed-up-UK-price-paid} + +プロジェクションを使用してクエリパフォーマンスを高速化する方法を実証するため、実際のデータセットを使用した例を見ていきます。この例では、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の価格データセットを使用し、プロジェクションあり/なしのクエリを比較します。 +### さらに例を示します {#further-examples} -オリジナルのテーブル(およびそのパフォーマンス)を保持するため、再度 `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` をディメンションとする集約プロジェクションを作成してみましょう。 +#### プロジェクションを作成する {#build-projection} + +`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,9 +396,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. 年ごとの平均価格 {#average-price-projections} ```sql runnable SELECT @@ -431,9 +423,10 @@ ORDER BY year ASC ``` -結果は同じですが、後者の例の方がパフォーマンスに優れています。 +結果は同じになるはずですが、後者の例のほうがパフォーマンスは良くなります。 -#### クエリ 2. ロンドンの年別平均価格 + +#### クエリ 2. ロンドンにおける年ごとの平均価格 {#average-price-london-projections} ```sql runnable SELECT @@ -458,9 +451,10 @@ GROUP BY year ORDER BY year ASC ``` -#### クエリ 3. 最も高価な地区 -条件 `(date >= '2020-01-01')` は、投影ディメンション(`toYear(date) >= 2020)`)に一致するように変更する必要があります。 +#### クエリ 3. 最も高価な地域 {#most-expensive-neighborhoods-projections} + +条件 (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 つのクエリを高速化できるようになりました。 +### 1 つのクエリでプロジェクションを組み合わせる {#combining-projections} -重要なのは、ClickHouse は依然として 1 つのプロジェクション(またはベーステーブル)からのみデータを読み取りますが、 -読み取り前に不要なパーツを除外するために、他のプロジェクションのプライマリインデックスを利用できる点です。 -これは、複数のカラムでフィルタし、それぞれが異なるプロジェクションに一致し得るようなクエリで特に有用です。 +バージョン 25.6 以降では、前のバージョンで導入された `_part_offset` のサポートに基づき、 +ClickHouse は複数のプロジェクションを使用して、複数のフィルター条件を持つ +単一のクエリを高速化できるようになりました。 -> 現在、この仕組みはパーツ全体のみを除外します。グラニュールレベルでの除外は -> まだサポートされていません。 +重要な点として、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..afe692c2e6b 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 @@ -122,6 +122,7 @@ With our initial schema defined, we can populate the data using an `INSERT INTO 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.) + ``` > 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. diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/index.md index be98cb2de83..a9c9baf38c6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/index.md @@ -6,7 +6,7 @@ keywords: ['デプロイメントガイド', 'スケーリング', 'クラスタ doc_type: 'landing-page' --- -# デプロイメントとスケーリング +# デプロイメントとスケーリング {#deployment-and-scaling} 本セクションでは、次のトピックについて説明します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx index 5ac0b01b885..7dacdf00c37 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx @@ -20,11 +20,10 @@ import image_9 from '@site/static/images/deployment-guides/parallel-replicas-9.p - ## はじめに \{#introduction\} ClickHouse はクエリを非常に高速に処理しますが、これらのクエリはどのようにして -複数のサーバーに分散され、並列実行されているのでしょうか。 +複数のサーバーに分散され、並列実行されているのでしょうか。 > このガイドではまず、ClickHouse が分散テーブルを用いてクエリを複数のシャードにどのように分散するかを説明し、その後、クエリの実行に複数のレプリカをどのように活用できるかを解説します。 @@ -39,24 +38,27 @@ ClickHouse はクエリを非常に高速に処理しますが、これらのク 上図は、クライアントが分散テーブルにクエリを実行したときに何が起こるかを示しています。
    -
  1. - SELECT クエリは、任意のノード上の分散テーブルに送信されます - (ラウンドロビン戦略で選択されたノード、またはロードバランサーによって - 特定のサーバーにルーティングされたノードなど)。このノードが - コーディネータとして動作します。 -
  2. -
  3. - ノードは、分散テーブルに指定された情報を用いて、クエリを実行する必要がある - 各シャードを特定し、クエリをそれぞれのシャードに送信します。 -
  4. -
  5. - 各シャードはローカルでデータを読み取り、フィルタおよび集約したうえで、 - マージ可能な状態をコーディネータに返します。 -
  6. -
  7. - コーディネータノードがデータをマージし、その結果をクライアントに - 応答として返します。 -
  8. +
  9. + SELECT クエリは、任意のノード上の分散テーブルに送信されます + (ラウンドロビン戦略で選択されたノード、またはロードバランサーによって + 特定のサーバーにルーティングされたノードなど)。このノードが + コーディネータとして動作します。 +
  10. + +
  11. + ノードは、分散テーブルに指定された情報を用いて、クエリを実行する必要がある + 各シャードを特定し、クエリをそれぞれのシャードに送信します。 +
  12. + +
  13. + 各シャードはローカルでデータを読み取り、フィルタおよび集約したうえで、 + マージ可能な状態をコーディネータに返します。 +
  14. + +
  15. + コーディネータノードがデータをマージし、その結果をクライアントに + 応答として返します。 +
レプリカを追加した場合もプロセスはほぼ同様で、唯一の違いは、各シャードからは単一のレプリカのみがクエリを実行する点です。これにより、より多くのクエリを並列に処理できるようになります。 @@ -64,7 +66,7 @@ ClickHouse はクエリを非常に高速に処理しますが、これらのク ## 非シャーディングアーキテクチャ \{#non-sharded-architecture\} ClickHouse Cloud は、前述のアーキテクチャとは大きく異なるアーキテクチャを採用しています。 -(詳細については、["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) +(詳細については、["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) を参照してください)。コンピュートとストレージが分離され、事実上無制限のストレージ容量が 利用できるため、シャードの必要性はそれほど重要ではなくなります。 @@ -103,47 +105,54 @@ Keeper クラスタは、メタデータに関する単一の信頼できる情 並列レプリカでは、次のようになります。
    -
  1. - クライアントからのクエリはロードバランサーを通過した後、1 つのノードに - 送信されます。このノードがこのクエリのコーディネーターになります。 -
  2. -
  3. - ノードは各パーツのインデックスを解析し、処理すべき適切なパーツと - granule を選択します。 -
  4. -
  5. - コーディネーターは、ワークロードを複数の granule の集合に分割し、 - それぞれを異なるレプリカに割り当てられるようにします。 -
  6. -
  7. - 各 granule の集合は対応するレプリカによって処理され、完了後、 - マージ可能な状態がコーディネーターに送信されます。 -
  8. -
  9. - 最後に、コーディネーターがレプリカからのすべての結果をマージし、 - レスポンスをクライアントに返します。 -
  10. +
  11. + クライアントからのクエリはロードバランサーを通過した後、1 つのノードに + 送信されます。このノードがこのクエリのコーディネーターになります。 +
  12. + +
  13. + ノードは各パーツのインデックスを解析し、処理すべき適切なパーツと + granule を選択します。 +
  14. + +
  15. + コーディネーターは、ワークロードを複数の granule の集合に分割し、 + それぞれを異なるレプリカに割り当てられるようにします。 +
  16. + +
  17. + 各 granule の集合は対応するレプリカによって処理され、完了後、 + マージ可能な状態がコーディネーターに送信されます。 +
  18. + +
  19. + 最後に、コーディネーターがレプリカからのすべての結果をマージし、 + レスポンスをクライアントに返します。 +
上記のステップは、並列レプリカが理論上どのように動作するかを説明したものです。 しかし、実際には、このようなロジックが完全には機能しない要因が多数存在します。
    -
  1. - 一部のレプリカが利用不能になっている場合があります。 -
  2. -
  3. - ClickHouse におけるレプリケーションは非同期であるため、ある時点では - 一部のレプリカが同じパーツを保持していない可能性があります。 -
  4. -
  5. - レプリカ間のテールレイテンシを何らかの方法で扱う必要があります。 -
  6. -
  7. - ファイルシステムキャッシュは各レプリカ上のアクティビティに応じて - レプリカごとに異なるため、タスクをランダムに割り当てると、 - キャッシュの局所性を考慮した場合に最適とは言えない性能につながることがあります。 -
  8. +
  9. + 一部のレプリカが利用不能になっている場合があります。 +
  10. + +
  11. + ClickHouse におけるレプリケーションは非同期であるため、ある時点では + 一部のレプリカが同じパーツを保持していない可能性があります。 +
  12. + +
  13. + レプリカ間のテールレイテンシを何らかの方法で扱う必要があります。 +
  14. + +
  15. + ファイルシステムキャッシュは各レプリカ上のアクティビティに応じて + レプリカごとに異なるため、タスクをランダムに割り当てると、 + キャッシュの局所性を考慮した場合に最適とは言えない性能につながることがあります。 +
これらの要因をどのように克服するかについては、次のセクションで説明します。 @@ -155,18 +164,21 @@ Keeper クラスタは、メタデータに関する単一の信頼できる情 Announcements
    -
  1. - クライアントからのクエリはロードバランサーを経由して 1 つのノードに送信されます。このノードがこのクエリのコーディネーターになります。 -
  2. -
  3. - コーディネーターノードは、クラスター内のすべてのレプリカからアナウンスメントを取得するリクエストを送信します。レプリカは、テーブルの現在のパーツ集合について、わずかに異なる見え方をしている場合があります。そのため、誤ったスケジューリング判断を避けるために、この情報を収集する必要があります。 -
  4. -
  5. - その後、コーディネーターノードはアナウンスメントを使用して、異なるレプリカに割り当て可能なグラニュールの集合を定義します。たとえばここでは、レプリカ 2 は自分のアナウンスメントで part 3 を提示していないため、part 3 のグラニュールはレプリカ 2 には一切割り当てられていないことがわかります。また、レプリカ 3 はアナウンスメントを提供していないため、このレプリカにはタスクが割り当てられていない点にも注意してください。 -
  6. -
  7. - 各レプリカがそれぞれのグラニュールのサブセットに対してクエリ処理を行い、マージ可能な状態をコーディネーターに送り返した後、コーディネーターは結果をマージし、そのレスポンスをクライアントに送信します。 -
  8. +
  9. + クライアントからのクエリはロードバランサーを経由して 1 つのノードに送信されます。このノードがこのクエリのコーディネーターになります。 +
  10. + +
  11. + コーディネーターノードは、クラスター内のすべてのレプリカからアナウンスメントを取得するリクエストを送信します。レプリカは、テーブルの現在のパーツ集合について、わずかに異なる見え方をしている場合があります。そのため、誤ったスケジューリング判断を避けるために、この情報を収集する必要があります。 +
  12. + +
  13. + その後、コーディネーターノードはアナウンスメントを使用して、異なるレプリカに割り当て可能なグラニュールの集合を定義します。たとえばここでは、レプリカ 2 は自分のアナウンスメントで part 3 を提示していないため、part 3 のグラニュールはレプリカ 2 には一切割り当てられていないことがわかります。また、レプリカ 3 はアナウンスメントを提供していないため、このレプリカにはタスクが割り当てられていない点にも注意してください。 +
  14. + +
  15. + 各レプリカがそれぞれのグラニュールのサブセットに対してクエリ処理を行い、マージ可能な状態をコーディネーターに送り返した後、コーディネーターは結果をマージし、そのレスポンスをクライアントに送信します。 +
### 動的なコーディネーション \{#dynamic-coordination\} @@ -180,37 +192,41 @@ Keeper クラスタは、メタデータに関する単一の信頼できる情 動的コーディネーション - パート 1
    -
  1. - レプリカは、タスクを処理可能であること、またどの程度の作業量を処理可能かをコーディネータノードに通知します。 -
  2. -
  3. - コーディネータは、レプリカにタスクを割り当てます。 -
  4. +
  5. + レプリカは、タスクを処理可能であること、またどの程度の作業量を処理可能かをコーディネータノードに通知します。 +
  6. + +
  7. + コーディネータは、レプリカにタスクを割り当てます。 +
動的コーディネーション - パート 2
    -
  1. - レプリカ 1 と 2 はタスクを非常に速く完了できます。そのため、コーディネータノードに別のタスクを要求します。 -
  2. -
  3. - コーディネータは、新しいタスクをレプリカ 1 と 2 に割り当てます。 -
  4. +
  5. + レプリカ 1 と 2 はタスクを非常に速く完了できます。そのため、コーディネータノードに別のタスクを要求します。 +
  6. + +
  7. + コーディネータは、新しいタスクをレプリカ 1 と 2 に割り当てます。 +
動的コーディネーション - パート 3
    -
  1. - すべてのレプリカが、自身に割り当てられたタスクの処理を完了しました。そこで、さらにタスクを要求します。 -
  2. -
  3. - コーディネータは、アナウンスを使って残っているタスクを確認しますが、もはや残りのタスクはありません。 -
  4. -
  5. - コーディネータは、すべての処理が完了したことをレプリカに通知します。次に、マージ可能な状態をすべてマージし、クエリに応答します。 -
  6. +
  7. + すべてのレプリカが、自身に割り当てられたタスクの処理を完了しました。そこで、さらにタスクを要求します。 +
  8. + +
  9. + コーディネータは、アナウンスを使って残っているタスクを確認しますが、もはや残りのタスクはありません。 +
  10. + +
  11. + コーディネータは、すべての処理が完了したことをレプリカに通知します。次に、マージ可能な状態をすべてマージし、クエリに応答します。 +
### キャッシュローカリティの管理 \{#managing-cache-locality\} @@ -220,34 +236,38 @@ Keeper クラスタは、メタデータに関する単一の信頼できる情 保証できるでしょうか。前の例では、次のようにタスクが割り当てられていました。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
レプリカ 1レプリカ 2レプリカ 3
パート 1g1, g6, g7g2, g4, g5g3
パート 2g1g2, g4, g5g3
パート 3g1, g6g2, g4, g5g3
+ + レプリカ 1レプリカ 2レプリカ 3
パート 1g1, g6, g7g2, g4, g5g3
パート 2g1g2, g4, g5g3
パート 3g1, g6g2, g4, g5g3
同じタスクが同じレプリカに割り当てられ、キャッシュの恩恵を受けられるようにするために、 @@ -284,13 +304,13 @@ Keeper クラスタは、メタデータに関する単一の信頼できる情 | Setting | Description | |----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `enable_parallel_replicas` | `0`: 無効
`1`: 有効
`2`: 並列レプリカの使用を強制し、使用されない場合は例外をスローします。 | +| `enable_parallel_replicas` | `0`: 無効
`1`: 有効
`2`: 並列レプリカの使用を強制し、使用されない場合は例外をスローします。 | | `cluster_for_parallel_replicas` | 並列レプリケーションに使用するクラスタ名。ClickHouse Cloud を使用している場合は `default` を指定します。 | | `max_parallel_replicas` | 複数レプリカ上でクエリを実行する際に使用するレプリカの最大数。クラスタ内のレプリカ数より小さい値を指定した場合、ノードはランダムに選択されます。この値は水平方向のスケーリングを考慮してオーバーコミットとして設定することもできます。 | -| `parallel_replicas_min_number_of_rows_per_replica` | 処理が必要な行数に基づいて使用するレプリカ数を制限するのに役立ちます。使用されるレプリカ数は次の式で決まります:
`estimated rows to read` / `min_number_of_rows_per_replica`. | -| `allow_experimental_analyzer` | `0`: 旧アナライザを使用
`1`: 新アナライザを使用

使用するアナライザによって、並列レプリカの動作が変わる場合があります。 | +| `parallel_replicas_min_number_of_rows_per_replica` | 処理が必要な行数に基づいて使用するレプリカ数を制限するのに役立ちます。使用されるレプリカ数は次の式で決まります:
`estimated rows to read` / `min_number_of_rows_per_replica`. | +| `allow_experimental_analyzer` | `0`: 旧アナライザを使用
`1`: 新アナライザを使用

使用するアナライザによって、並列レプリカの動作が変わる場合があります。 | -## パラレルレプリカに関する問題の調査 +## パラレルレプリカに関する問題の調査 \{#investigating-issues-with-parallel-replicas\} 各クエリでどの設定が使用されているかは、 [`system.query_log`](/docs/operations/system-tables/query_log) テーブルで確認できます。 @@ -308,7 +328,6 @@ FROM clusterAllReplicas('default', system.events) WHERE event ILIKE '%ParallelReplicas%' ``` -
レスポンス @@ -370,7 +389,6 @@ WHERE query_id = 'ad40c712-d25d-45c4-b1a1-a28ba8d4019c' ORDER BY event_time_microseconds ASC ``` -
レスポンス diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md index a8b481d0a43..d751cfa1ba2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md @@ -9,19 +9,19 @@ keywords: ['レプリケーション', '高可用性', 'クラスター構成', --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ReplicationArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/replication.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > この例では、データをレプリケートするシンプルな ClickHouse クラスターのセットアップ方法を学びます。ここでは 5 台のサーバーを構成します。うち 2 台はデータのコピーを保持するために使用します。残りの 3 台のサーバーは、データレプリケーションを調整するために使用します。 @@ -31,7 +31,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前提条件 {#pre-requisites} - 以前に [ローカルの ClickHouse サーバー](/install) をセットアップしている diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md index 1a3de02acd9..0d0da37adfc 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md @@ -9,19 +9,19 @@ keywords: ['シャーディング', '水平スケーリング', '分散データ --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ShardingArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/sharding.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > この例では、スケールするシンプルな ClickHouse クラスターのセットアップ方法を学びます。 > ここでは 5 台のサーバーを構成します。うち 2 台はデータのシャーディングに使用し、 @@ -33,7 +33,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前提条件 {#pre-requisites} - 以前に [ローカル ClickHouse サーバー](/install) をセットアップしたことがある diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md index 783be44d886..bb00080f6b9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md @@ -10,14 +10,14 @@ keywords: ['クラスター デプロイメント', 'レプリケーション', import Image from '@theme/IdealImage'; import SharedReplicatedArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/both.png'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import KeeperConfig from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > この例では、レプリケーションとスケールの両方に対応したシンプルな ClickHouse クラスターをセットアップする方法を学びます。クラスターは 2 つのシャードと 2 つのレプリカに加え、クラスター内の調整とクォーラムの維持を行う 3 ノード構成の ClickHouse Keeper クラスターで構成されています。 @@ -27,7 +27,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前提条件 {#prerequisites} - すでに [ローカルの ClickHouse サーバー](/install) をセットアップしている diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md index e2027e59947..4c8289717f2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md @@ -8,7 +8,7 @@ doc_type: 'guide' keywords: ['デプロイメント', 'アーキテクチャ', 'レプリケーション', 'シャーディング', 'クラスタ構成'] --- -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; このセクションのデプロイメント例は、ClickHouse の Support and Services チームが ClickHouse ユーザーに提供しているアドバイスに基づいています。これらは実際に動作する例であり、 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/architecture.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/architecture.md index 8d9187de727..e5546f6a7f7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/architecture.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/architecture.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# アーキテクチャ概要 +# アーキテクチャ概要 {#architecture-overview} ClickHouse は真のカラム指向 DBMS です。データはカラム単位で保存され、クエリ実行時には配列(カラムのベクターまたはチャンク)単位で処理されます。 可能な限り、個々の値ではなく配列に対して演算が行われます。 @@ -242,7 +242,7 @@ IO スレッドプールは、`IOThreadPool::get()` メソッドからアクセ -## 同時実行制御 +## 同時実行制御 {#concurrency-control} 並列実行が可能なクエリは、自身を制限するために `max_threads` 設定を使用します。この設定のデフォルト値は、単一クエリがすべての CPU コアを最適な形で利用できるように選択されています。では、複数のクエリが同時に実行されており、それぞれがデフォルトの `max_threads` 設定値を使用している場合はどうなるでしょうか。その場合、クエリ同士で CPU リソースを共有することになります。OS はスレッドを頻繁に切り替えることで公平性を保証しますが、これはある程度の性能低下を招きます。`ConcurrencyControl` は、このペナルティに対処し、大量のスレッド割り当てを避けるのに役立ちます。構成設定 `concurrent_threads_soft_limit_num` は、CPU に負荷をかけ始める前に、どれだけ多くのスレッドを同時に割り当てられるかを制限するために使用されます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-arm.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-arm.md index 9fb456d8d01..0dd3ffde8a7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-arm.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-arm.md @@ -7,7 +7,7 @@ title: 'Linux 上で AARCH64 向け ClickHouse をビルドする方法' doc_type: 'guide' --- -# Linux 上で AArch64 向けに ClickHouse をビルドする方法 +# Linux 上で AArch64 向けに ClickHouse をビルドする方法 {#how-to-build-clickhouse-on-linux-for-aarch64} AArch64 マシン上で AArch64 向けに ClickHouse をビルドする場合、特別な手順は必要ありません。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md index c729981e2df..5ea1889e8a9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md @@ -7,15 +7,11 @@ title: 'LoongArch64 向け Linux 上でのビルド' doc_type: 'guide' --- - - -# Linux 上での LoongArch64 向けビルド +# Linux 上での LoongArch64 向けビルド {#build-on-linux-for-loongarch64} ClickHouse は LoongArch64 を実験的にサポートしています - - -## ClickHouse をビルドする +## ClickHouse をビルドする {#build-clickhouse} ビルドに必要な LLVM のバージョンは 19.1.0 以上である必要があります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-osx.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-osx.md index b279a8ab85d..b7483aa4fd1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-osx.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-osx.md @@ -7,9 +7,7 @@ title: 'Linux で macOS 向けにビルド' doc_type: 'guide' --- - - -# Linux 上で macOS 向けの ClickHouse をビルドする方法 +# Linux 上で macOS 向けの ClickHouse をビルドする方法 {#how-to-build-clickhouse-on-linux-for-macos} このドキュメントは、Linux マシンを使って OS X 上で実行する `clickhouse` バイナリをビルドしたい場合の手順です。 主なユースケースは、Linux マシン上で実行される継続的インテグレーション(CI)チェックです。 @@ -21,9 +19,7 @@ macOS 向けのクロスビルドは [ビルド手順](../development/build.md) ARM アーキテクチャをターゲットにする場合は、すべての `x86_64` を `aarch64` に置き換えてください。 たとえば、手順全体を通して `x86_64-apple-darwin` を `aarch64-apple-darwin` に置き換えます。 - - -## クロスコンパイル用ツールセットをインストールする +## クロスコンパイル用ツールセットをインストールする {#install-cross-compilation-toolset} `cctools` をインストールしたパスを `${CCTOOLS}` として覚えておきましょう。 @@ -53,8 +49,7 @@ cd ClickHouse/cmake/toolchain/darwin-x86_64 curl -L 'https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.0.sdk.tar.xz' | tar xJ --strip-components=1 ``` - -## ClickHouse をビルドする +## ClickHouse をビルドする {#build-clickhouse} ```bash cd ClickHouse diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md index 9344d23a940..d28f8b77f28 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md @@ -7,15 +7,11 @@ title: 'Linux 上で RISC-V 64 向けに ClickHouse をビルドする方法' doc_type: 'guide' --- - - -# Linux 上で RISC-V 64 向けに ClickHouse をビルドする方法 +# Linux 上で RISC-V 64 向けに ClickHouse をビルドする方法 {#how-to-build-clickhouse-on-linux-for-risc-v-64} ClickHouse は RISC-V を実験的にサポートしています。すべての機能を有効にできるわけではありません。 - - -## ClickHouse をビルドする +## ClickHouse をビルドする {#build-clickhouse} RISC-V ではないマシン上で RISC-V 向けにクロスコンパイルするには: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md index 969418a150e..2e702066df2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md @@ -7,38 +7,23 @@ title: 'Linux 上での s390x (zLinux) 向けビルド' doc_type: 'guide' --- - - -# Linux 上での s390x(zLinux)向けビルド +# Linux 上での s390x (zLinux) 向けビルド {#build-on-linux-for-s390x-zlinux} ClickHouse は s390x を実験的にサポートしています。 +## s390x 向けの ClickHouse のビルド {#building-clickhouse-for-s390x} +s390x では、他のプラットフォームと同様に、OpenSSL はスタティックライブラリとしてビルドされます。OpenSSL を動的ライブラリとしてビルドしたい場合は、CMake に `-DENABLE_OPENSSL_DYNAMIC=1` を指定する必要があります。 -## s390x 向けの ClickHouse のビルド - -s390x には、OpenSSL 関連のビルドオプションが 2 つあります。 - -* デフォルトでは、s390x 上では OpenSSL は共有ライブラリとしてビルドされます。これは、他のすべてのプラットフォームでは OpenSSL が静的ライブラリとしてビルドされるのとは異なります。 -* それでも OpenSSL を静的ライブラリとしてビルドしたい場合は、CMake に `-DENABLE_OPENSSL_DYNAMIC=0` を渡します。 - -これらの手順は、ホストマシンが x86_64 であり、[ビルド手順](../development/build.md) に従ってネイティブビルドに必要なツール一式がすべてインストールされていることを前提とします。また、ホストが Ubuntu 22.04 であることを想定していますが、以下の手順は Ubuntu 20.04 でも動作するはずです。 - -ネイティブビルドに使用するツールをインストールすることに加えて、以下の追加パッケージをインストールする必要があります。 - -```bash -apt-get install binutils-s390x-linux-gnu libc6-dev-s390x-cross gcc-s390x-linux-gnu binfmt-support qemu-user-static -``` +これらの手順では、ホストマシンが Linux x86_64/ARM であり、[ビルド手順](../development/build.md) に基づいてネイティブビルドに必要なツールが一通りそろっていることを前提としています。また、ホストが Ubuntu 22.04 であることを想定していますが、以下の手順は Ubuntu 20.04 でも動作するはずです。 -Rust コードをクロスコンパイルする場合は、s390x 向けの Rust クロスコンパイルターゲットをインストールしてください。 +ネイティブビルドに使用するツールのインストールに加えて、以下の追加パッケージをインストールする必要があります。 ```bash +apt-get mold rustup target add s390x-unknown-linux-gnu ``` -s390x ビルドでは mold リンカーを使用します。[https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz](https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz) -からダウンロードし、`$PATH` に配置してください。 - s390x 向けにビルドするには: ```bash @@ -47,30 +32,37 @@ ninja ``` -## 実行 +## 実行 {#running} + +エミュレーションを行うには、s390x 用の QEMU user static バイナリが必要です。Ubuntu では次のコマンドでインストールできます。 + +```bash +apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-static +``` -ビルドが完了したら、たとえば次のようにバイナリを実行できます。 +ビルドが完了したら、たとえば次のようにバイナリを実行できます: ```bash -qemu-s390x-static -L /usr/s390x-linux-gnu ./clickhouse +qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2" +2 ``` -## デバッグ +## デバッグ {#debugging} LLDB をインストールします: ```bash -apt-get install lldb-15 +apt-get install lldb-21 ``` -s390x 実行ファイルをデバッグするには、QEMU をデバッグモードで実行して ClickHouse を起動します: +s390x 向け実行ファイルをデバッグするには、デバッグモードで QEMU を使用して ClickHouse を実行します。 ```bash qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouse ``` -別のシェルで LLDB を実行してアタッチし、`` と `` を、お使いの環境に対応する値に置き換えてください。 +別のシェルで LLDB を実行してプロセスにアタッチし、`<ClickHouse Parent Directory>` と `<build directory>` をお使いの環境に対応する値に置き換えてください。 ```bash lldb-15 @@ -102,16 +94,16 @@ Process 1 stopped ``` -## Visual Studio Code 連携 +## Visual Studio Code との連携 {#visual-studio-code-integration} -* ビジュアルデバッグには [CodeLLDB](https://github.com/vadimcn/vscode-lldb) 拡張機能が必要です。 -* [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md) を使用している場合、[Command Variable](https://github.com/rioj7/command-variable) 拡張機能を使うと動的な起動に役立ちます。 -* バックエンドとして使用する LLVM のインストール先を指すように設定してください(例: `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so"`)。 -* 起動前に ClickHouse 実行ファイルをデバッグモードで実行しておいてください(これを自動化する `preLaunchTask` を作成することも可能です)。 +- ビジュアルデバッグを行うには [CodeLLDB](https://github.com/vadimcn/vscode-lldb) 拡張機能が必要です。 +- [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md) を使用する場合、動的な起動設定には [Command Variable](https://github.com/rioj7/command-variable) 拡張機能が役立ちます。 +- バックエンドが使用している LLVM のインストール先に設定されていることを確認してください。例: `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"` +- 起動前に ClickHouse の実行ファイルをデバッグモードで実行しておいてください(これを自動化する `preLaunchTask` を作成することも可能です)。 -### 設定例 +### 構成例 {#example-configurations} -#### cmake-variants.yaml +#### cmake-variants.yaml {#cmake-variantsyaml} ```yaml buildType: @@ -119,11 +111,11 @@ buildType: choices: debug: short: Debug - long: デバッグ情報を出力する + long: デバッグ情報を出力 buildType: Debug release: short: Release - long: 生成コードを最適化する + long: 生成コードを最適化 buildType: Release relwithdebinfo: short: RelWithDebInfo @@ -136,7 +128,7 @@ buildType: toolchain: default: default - description: ツールチェーンを選択する + description: ツールチェーンを選択 choices: default: short: x86_64 @@ -148,7 +140,8 @@ toolchain: CMAKE_TOOLCHAIN_FILE: cmake/linux/toolchain-s390x.cmake ``` -#### launch.json + +#### launch.json {#launchjson} ```json { @@ -166,29 +159,32 @@ toolchain: } ``` -#### settings.json -これにより、異なるビルドが `build` フォルダー内の別々のサブフォルダーに配置されるようになります。 +#### settings.json {#settingsjson} + +これにより、ビルドごとに `build` フォルダー内の別々のサブフォルダーに配置されます。 ```json { "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}", - "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so" + "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so" } ``` -#### run-debug.sh + +#### run-debug.sh {#run-debugsh} ```sh #! /bin/sh -echo 'デバッガセッションを開始します' +echo 'デバッガーセッションを開始します' cd $1 qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4 ``` -#### tasks.json -`programs/server/config.xml` の設定を使用して、バイナリと同じディレクトリ内にある `tmp` フォルダーでコンパイル済み実行ファイルを `server` モードで実行するタスクを定義します。 +#### tasks.json {#tasksjson} + +`server` モードでコンパイル済み実行ファイルを実行するタスクを定義します。バイナリと同じディレクトリ内の `tmp` フォルダを使用し、`programs/server/config.xml` にある設定を利用します。 ```json { diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-e2k.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-e2k.md index b859fdb2de3..a95b0486a8e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-e2k.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-e2k.md @@ -7,15 +7,11 @@ title: 'Linux での E2K 向けビルド' doc_type: 'guide' --- - - -# E2K 向け Linux 上でのビルド +# E2K 向け Linux 上でのビルド {#build-on-linux-for-e2k} ClickHouse は E2K (Elbrus-2000) を非常に実験的にサポートしており、boost、croaring、libunwind、zstd などの e2k 向けにカスタムビルドされたライブラリを使用した最小限の構成で、ネイティブモードでのみコンパイル可能です。 - - -## ClickHouse をビルドする +## ClickHouse をビルドする {#build-clickhouse} ビルドに必要な LLVM のバージョンは 20.1.8 以上が必要です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-osx.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-osx.md index 200c296a2fe..47b91ce316f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build-osx.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build-osx.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# macOS 向けに macOS 上で ClickHouse をビルドする方法 +# macOS 向けに macOS 上で ClickHouse をビルドする方法 {#how-to-build-clickhouse-on-macos-for-macos} :::info ClickHouse を自分でビルドする必要はありません! [Quick Start](https://clickhouse.com/#quick-start) に記載されている手順に従って、事前にビルド済みの ClickHouse をインストールできます。 @@ -22,7 +22,7 @@ ClickHouse は、macOS 10.15 (Catalina) 以降の macOS 上で、x86_64 (Intel) -## 前提条件をインストールする +## 前提条件をインストールする {#install-prerequisites} まず、共通の[前提条件ドキュメント](developer-instruction.md)を参照してください。 @@ -53,7 +53,7 @@ mkdir build export PATH=$(brew --prefix llvm)/bin:$PATH cmake -S . -B build cmake --build build -# 生成されるバイナリは次の場所に作成されます: build/programs/clickhouse +# 生成されるバイナリは次の場所に作成されます: build/programs/clickhouse {#the-resulting-binary-will-be-created-at-buildprogramsclickhouse} ``` :::note @@ -62,7 +62,7 @@ cmake --build build ::: -## 注意点 +## 注意点 {#caveats} `clickhouse-server` を実行する場合は、システムの `maxfiles` 変数の値を増やしておいてください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/build.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/build.md index 07da31b680c..c9bfb79fe3b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/build.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/build.md @@ -1,21 +1,19 @@ --- -description: 'Linux システム上で ClickHouse をソースからビルドするためのステップバイステップガイド' -sidebar_label: 'Linux でビルド' +description: 'Linux 上で ClickHouse をソースコードからビルドするためのステップバイステップガイド' +sidebar_label: 'Linux でのビルド' sidebar_position: 10 slug: /development/build title: 'Linux で ClickHouse をビルドする方法' doc_type: 'guide' --- +# Linux で ClickHouse をビルドする方法 {#how-to-build-clickhouse-on-linux} - -# Linux 上で ClickHouse をビルドする方法 - -:::info ClickHouse を自分でビルドする必要はありません! -[Quick Start](https://clickhouse.com/#quick-start) に記載されているように、事前にビルド済みの ClickHouse をインストールできます。 +:::info 自分で ClickHouse をビルドする必要はありません! +[Quick Start](https://clickhouse.com/#quick-start) に記載されている手順に従って、事前にビルド済みの ClickHouse をインストールできます。 ::: -ClickHouse は以下のプラットフォーム上でビルドできます: +ClickHouse は次のプラットフォーム上でビルドできます: - x86_64 - AArch64 @@ -23,24 +21,20 @@ ClickHouse は以下のプラットフォーム上でビルドできます: - s390/x(実験的) - RISC-V 64(実験的) - - ## 前提条件 {#assumptions} -このチュートリアルは Ubuntu Linux をベースとしていますが、適切な変更を加えれば他の Linux ディストリビューションでも動作するはずです。 -開発用として推奨される最小の Ubuntu バージョンは 24.04 LTS です。 - -このチュートリアルは、ClickHouse リポジトリとそのすべてのサブモジュールがローカル環境にチェックアウト済みであることを前提としています。 - +以下のチュートリアルは Ubuntu Linux を前提としていますが、適宜調整すれば他の Linux ディストリビューション上でも動作します。 +開発環境として推奨される Ubuntu の最低バージョンは 24.04 LTS です。 +このチュートリアルでは、ClickHouse のリポジトリとすべてのサブモジュールがローカルにチェックアウトされていることを前提としています。 -## 前提条件をインストールする +## 前提条件をインストールする {#install-prerequisites} -まず、共通の[前提条件のドキュメント](developer-instruction.md)を参照してください。 +まず、共通の[前提条件ドキュメント](developer-instruction.md)を参照してください。 ClickHouse はビルドに CMake と Ninja を使用します。 -ビルド時に既にコンパイル済みのオブジェクトファイルを再利用できるように、任意で ccache をインストールできます。 +ビルドで既にコンパイル済みのオブジェクトファイルを再利用できるように、必要に応じて ccache をインストールすることもできます。 ```bash sudo apt-get update @@ -48,34 +42,32 @@ sudo apt-get install build-essential git cmake ccache python3 ninja-build nasm y ``` -## Clang コンパイラをインストールする +## Clang コンパイラをインストールする {#install-the-clang-compiler} -Ubuntu/Debian に Clang をインストールするには、[こちら](https://apt.llvm.org/)から LLVM 提供の自動インストールスクリプトを使用してください。 +Ubuntu/Debian に Clang をインストールするには、[こちら](https://apt.llvm.org/) から LLVM の自動インストールスクリプトを使用してください。 ```bash sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ``` -他の Linux ディストリビューションの場合は、LLVM の[事前ビルド済みパッケージ](https://releases.llvm.org/download.html)をインストールできるか確認してください。 +他の Linux ディストリビューションについては、LLVM の[事前ビルド済みパッケージ](https://releases.llvm.org/download.html)をインストールできるか確認してください。 -2025 年 3 月時点では、Clang 19 以降が必要です。 -GCC やその他のコンパイラはサポートされていません。 +2025 年 3 月時点では、Clang 19 以上が必要です。 +GCC などの他のコンパイラはサポートされていません。 -## Rust コンパイラをインストールする(任意) {#install-the-rust-compiler-optional} +## Rust コンパイラのインストール(任意) {#install-the-rust-compiler-optional} :::note Rust は ClickHouse のオプションの依存関係です。 Rust がインストールされていない場合、ClickHouse の一部の機能はコンパイルされません。 ::: -まず、公式の [Rust ドキュメント](https://www.rust-lang.org/tools/install)の手順に従って `rustup` をインストールします。 - -C++ の依存関係と同様に、ClickHouse は vendoring(ベンダリング)を使用して、何がインストールされるかを正確に制御し、(`crates.io` レジストリのような)サードパーティサービスへの依存を避けています。 - -リリースモードでは、最新の rustup ツールチェーンであればどのバージョンでもこれらの依存関係は動作するはずですが、サニタイザを有効にする予定がある場合は、CI で使用しているものとまったく同じ `std` に一致するバージョン(そのための crate を vendoring しています)を使用する必要があります。 +まず、公式の [Rust ドキュメント](https://www.rust-lang.org/tools/install)に記載されている手順に従って `rustup` をインストールします。 +C++ の依存関係と同様に、ClickHouse はインストール内容を正確に制御し、`crates.io` レジストリのようなサードパーティサービスへの依存を避けるために vendoring を使用します。 +リリースモードでは、これらの依存関係に対して任意の最新の rustup ツールチェーンバージョンが動作するはずですが、サニタイザーを有効にする予定がある場合は、CI で使用しているものとまったく同じ `std` に対応するバージョンを使用する必要があります(そのためのクレートは vendoring 済みです)。 ```bash rustup toolchain install nightly-2025-07-07 @@ -83,16 +75,17 @@ rustup default nightly-2025-07-07 rustup component add rust-src ``` -## ClickHouse のビルド -すべてのビルド成果物を格納する専用ディレクトリ `build` を `ClickHouse` ディレクトリ内に作成することを推奨します。 +## ClickHouse をビルドする {#build-clickhouse} + +すべてのビルド成果物を格納するために、`ClickHouse` ディレクトリ内に専用の `build` ディレクトリを作成することを推奨します。 ```sh mkdir build cd build ``` -異なるビルドタイプごとに(例:`build_release`、`build_debug` など)、複数のディレクトリを用意できます。 +ビルドタイプごとに、(例: `build_release`、`build_debug` など)複数のディレクトリを用意できます。 オプション: 複数のコンパイラバージョンがインストールされている場合、使用するコンパイラを明示的に指定することもできます。 @@ -101,86 +94,87 @@ export CC=clang-19 export CXX=clang++-19 ``` -開発用途では、`debug` ビルドを推奨します。 -`release` ビルドと比較してコンパイラ最適化レベル(`-O`)が低く、よりデバッグしやすくなります。 -また、`LOGICAL_ERROR` 型の内部例外は、穏やかに処理されるのではなく、即座にクラッシュを引き起こします。 +開発用途には、`debug` ビルドの使用を推奨します。 +`release` ビルドと比較してコンパイラの最適化レベル(`-O`)が低く、デバッグ時の利便性が向上します。 +また、`LOGICAL_ERROR` 型の内部例外は、エラーからの復旧を試みず、即座にクラッシュします。 ```sh cmake -D CMAKE_BUILD_TYPE=Debug .. ``` :::note -gdb などのデバッガを使用したい場合は、上記のコマンドに `-D DEBUG_O_LEVEL="0"` を追加して、すべてのコンパイラ最適化を無効にしてください。コンパイラ最適化により、gdb が変数を表示・参照できなくなる場合があります。 +gdb のようなデバッガを使用したい場合は、上記のコマンドに `-D DEBUG_O_LEVEL="0"` を追加して、すべてのコンパイラ最適化を無効にしてください。最適化が有効なままだと、gdb による変数の表示やアクセスの妨げになる可能性があります。 ::: -ビルドするには ninja を実行します。 +ビルドするには `ninja` を実行します。 ```sh ninja clickhouse ``` -すべてのバイナリ(ユーティリティとテスト)をビルドするには、引数を付けずに `ninja` を実行します: +すべてのバイナリ(ユーティリティおよびテスト)をビルドするには、引数を付けずに `ninja` を実行します。 ```sh ninja ``` -並列ビルドジョブの数は、パラメーター `-j` で制御できます。 +パラメータ `-j` を使用して、並列ビルドジョブの数を指定できます。 ```sh ninja -j 1 clickhouse-server clickhouse-client ``` :::tip -CMake では、上記のコマンドを簡略化するためのショートカットが用意されています。 +CMake には、上記のコマンドを簡略化するショートカットが用意されています: ```sh -cmake -S . -B build # ビルドを構成、リポジトリのトップレベルディレクトリから実行 -cmake --build build # コンパイル +cmake -S . -B build # ビルドを構成します。リポジトリのトップレベルディレクトリから実行してください +cmake --build build # コンパイルします ``` ::: -## ClickHouse 実行ファイルの実行 +## ClickHouse 実行ファイルの起動 {#running-the-clickhouse-executable} -ビルドが正常に完了すると、実行ファイルは `ClickHouse//programs/` に生成されます。 +ビルドが正常に完了すると、`ClickHouse//programs/` に実行ファイルが生成されます。 -ClickHouse サーバーは、カレントディレクトリで設定ファイル `config.xml` を探します。 -または、コマンドラインで `-C` オプションを指定して設定ファイルを明示的に指定できます。 +ClickHouse サーバーは、カレントディレクトリ内の `config.xml` という設定ファイルを探します。 +代わりに、コマンドラインで `-C` オプションを指定して使用する設定ファイルを明示的に指定することもできます。 -`clickhouse-client` を使用して ClickHouse サーバーに接続するには、別のターミナルを開き、`ClickHouse/build/programs/` に移動して `./clickhouse client` を実行します。 +`clickhouse-client` で ClickHouse サーバーに接続するには、別のターミナルを開き、`ClickHouse/build/programs/` に移動してから `./clickhouse client` を実行します。 -macOS または FreeBSD で `Connection refused` というメッセージが表示される場合は、ホストアドレスとして 127.0.0.1 を指定してください。 +macOS または FreeBSD で `Connection refused` というメッセージが表示される場合は、ホストアドレスを 127.0.0.1 に指定してみてください。 ```bash clickhouse client --host 127.0.0.1 ``` -## 高度なオプション +## 高度なオプション {#advanced-options} -### 最小構成でのビルド +### 最小構成でのビルド {#minimal-build} -サードパーティ製ライブラリが提供する機能が不要な場合は、ビルド時間をさらに短縮できます。 +サードパーティ製ライブラリが提供する機能が不要な場合は、ビルドをさらに高速化できます。 ```sh cmake -DENABLE_LIBRARIES=OFF ``` -問題が発生した場合は、すべて自己解決していただくことになります... +問題が発生した場合は自己対応となります… -Rust の利用にはインターネット接続が必要です。Rust サポートを無効にするには、次のようにします: +Rust にはインターネット接続が必要です。Rust サポートを無効化するには: ```sh cmake -DENABLE_RUST=OFF ``` -### ClickHouse 実行ファイルの実行 -システムにインストールされている本番環境版の ClickHouse バイナリを、コンパイル済みの ClickHouse バイナリに置き換えることができます。 -そのためには、公式ウェブサイトの手順に従ってマシンに ClickHouse をインストールしてください。 -次に、以下を実行します: +### ClickHouse バイナリの実行 {#running-the-clickhouse-executable-1} + +システムにインストールされている本番用の ClickHouse バイナリを、コンパイル済みの ClickHouse バイナリに置き換えることができます。 +そのためには、まず公式サイトの手順に従ってマシンに ClickHouse をインストールします。 +次に、以下を実行します。 ```bash sudo service clickhouse-server stop @@ -190,16 +184,17 @@ sudo service clickhouse-server start `clickhouse-client`、`clickhouse-server` などは、共通の `clickhouse` バイナリへのシンボリックリンクであることに注意してください。 -システムにインストールされている ClickHouse パッケージの設定ファイルを使って、独自にビルドした ClickHouse バイナリを実行することもできます。 +システムにインストールされている ClickHouse パッケージに含まれる設定ファイルを使用して、独自にビルドした ClickHouse バイナリを実行することもできます。 ```bash sudo service clickhouse-server stop sudo -u clickhouse ClickHouse/build/programs/clickhouse server --config-file /etc/clickhouse-server/config.xml ``` -### 任意の Linux 上でのビルド -OpenSUSE Tumbleweed に必要なパッケージをインストールします: +### 任意の Linux 環境でのビルド {#building-on-any-linux} + +openSUSE Tumbleweed に必要な前提パッケージをインストールします: ```bash sudo zypper install git cmake ninja clang-c++ python lld nasm yasm gawk @@ -220,19 +215,20 @@ cmake -S . -B build cmake --build build ``` -### Docker でのビルド -CI と同様の環境で、任意のビルドを次のコマンドを使ってローカルで実行できます: +### Docker でのビルド {#building-in-docker} + +次のコマンドを使用して、CI と同様の環境で任意のビルドをローカル環境で実行できます。 ```bash -python -m ci.praktika "BUILD_JOB_NAME" +python -m ci.praktika run "BUILD_JOB_NAME" ``` -ここで BUILD_JOB_NAME は CI レポートに表示されるジョブ名であり、例えば "Build (arm_release)" や "Build (amd_debug)" などです。 +ここで BUILD_JOB_NAME は、CI レポートに表示されるジョブ名であり、例として "Build (arm_release)" や "Build (amd_debug)" などがあります。 -このコマンドは、必要な依存関係がすべて含まれた適切な Docker イメージ `clickhouse/binary-builder` を取得して、 +このコマンドは、必要な依存関係をすべて含む適切な Docker イメージ `clickhouse/binary-builder` を取得して、 その中でビルドスクリプト `./ci/jobs/build_clickhouse.py` を実行します。 ビルド成果物は `./ci/tmp/` に配置されます。 -これは AMD と ARM の両方のアーキテクチャで動作し、Docker 以外に追加の依存関係は必要ありません。 +これは AMD と ARM の両方のアーキテクチャで動作し、`requests` モジュールが利用可能な Python と Docker 以外に、追加の依存関係は必要ありません。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md index 0cd5b7f0f56..090a4f15541 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# DEFLATE_QPL を使用して ClickHouse をビルドする +# DEFLATE_QPL を使用して ClickHouse をビルドする {#build-clickhouse-with-deflate_qpl} - ホストマシンが QPL の要求する[前提条件](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#prerequisites)を満たしていることを確認してください - `cmake` ビルド時には `deflate_qpl` はデフォルトで有効になっています。誤って設定を変更してしまった場合は、ビルドフラグ `ENABLE_QPL=1` になっていることを必ず再確認してください @@ -18,7 +18,7 @@ doc_type: 'guide' -# DEFLATE_QPL を使ってベンチマークを実行する +# DEFLATE_QPL を使ってベンチマークを実行する {#run-benchmark-with-deflate_qpl} @@ -35,7 +35,7 @@ doc_type: 'guide' -## スター・スキーマ向けベンチマークを自動実行する: +## スター・スキーマ向けベンチマークを自動実行する: {#run-benchmark-automatically-for-star-schema} ```bash $ cd ./benchmark_sample/client_scripts @@ -53,7 +53,7 @@ $ sh run_ssb.sh -## 環境 +## 環境 {#environment} * CPU: Sapphire Rapid * OS 要件については [System Requirements for QPL](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#system-requirements) を参照してください @@ -81,7 +81,7 @@ $ accel-config list | grep -P 'iax|state' 何も出力されない場合は、IAA の準備がまだ整っていないことを意味します。IAA のセットアップを再度確認してください。 -## 未加工データを生成する +## 未加工データを生成する {#generate-raw-data} ```bash $ cd ./benchmark_sample @@ -94,7 +94,7 @@ $ mkdir rawdata_dir && cd rawdata_dir `*.tbl` のようなファイルは、`./benchmark_sample/rawdata_dir/ssb-dbgen` 配下に出力されます: -## データベースのセットアップ +## データベースのセットアップ {#database-setup} LZ4 コーデックを使用したデータベースのセットアップ @@ -164,7 +164,7 @@ SELECT count() FROM lineorder_flat これは IAA デバイスが使用可能な状態になっていないことを意味します。IAA のセットアップをもう一度確認する必要があります。 -## 単一インスタンスでのベンチマーク +## 単一インスタンスでのベンチマーク {#benchmark-with-single-instance} * ベンチマークを開始する前に、C6 を無効化し、CPU周波数ガバナーを `performance` に設定してください @@ -218,7 +218,7 @@ zstd.log QPS を中心に確認します。キーワード `QPS_Final` を検索し、統計情報を収集してください -## マルチインスタンスでのベンチマーク +## マルチインスタンスでのベンチマーク {#benchmark-with-multi-instances} * メモリボトルネックがスレッド数の増加に与える影響を抑えるため、マルチインスタンス構成でベンチマークを実行することを推奨します。 * マルチインスタンスとは、複数(2 または 4)台のサーバーがそれぞれ個別のクライアントに接続されている構成を指します。 @@ -350,7 +350,7 @@ zstd_2insts.log レビュー用の最終レポートには、2 インスタンス構成のベンチマークデータを採用することを推奨します。 -## ヒント +## ヒント {#tips} 新しい ClickHouse サーバーを起動する前には毎回、バックグラウンドで動作している ClickHouse プロセスがないことを必ず確認し、残っている古いプロセスがあれば終了させてください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/continuous-integration.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/continuous-integration.md index 73f5809c047..b705033c126 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/continuous-integration.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/continuous-integration.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# 継続的インテグレーション (CI) +# 継続的インテグレーション (CI) {#continuous-integration-ci} プルリクエストを作成すると、ClickHouse の [継続的インテグレーション (CI) システム](tests.md#test-automation) によって、あなたのコードに対していくつかの自動チェックが実行されます。 これは、リポジトリのメンテナー (ClickHouse チームのメンバー) があなたのコードを確認し、プルリクエストに `can be tested` ラベルを追加した後に行われます。 @@ -75,26 +75,26 @@ ClickHouse server および keeper 用の Docker イメージをビルドし、 -## スタイルチェック +## スタイルチェック {#style-check} コードベースに対してさまざまなスタイルチェックを実行します。 Style Check ジョブで実行される基本的なチェックは次のとおりです。 -##### cpp +##### cpp {#cpp} [`ci/jobs/scripts/check_style/check_cpp.sh`](https://github.com/ClickHouse/ClickHouse/blob/master/ci/jobs/scripts/check_style/check_cpp.sh) スクリプト(ローカルでも実行可能)を使用して、単純な正規表現ベースのコードスタイルチェックを行います。\ 失敗した場合は、[コードスタイルガイド](style.md) に従ってスタイル上の問題を修正してください。 -##### codespell, aspell +##### codespell, aspell {#codespell} 文法ミスや綴りの誤りをチェックします。 -##### mypy +##### mypy {#mypy} Python コードに対して静的型チェックを実行します。 -### スタイルチェックジョブをローカルで実行する +### スタイルチェックジョブをローカルで実行する {#running-style-check-locally} *Style Check* ジョブ全体は、Docker コンテナ内でローカルに実行できます: @@ -112,14 +112,14 @@ python -m ci.praktika run "Style check" --test cpp Python 3 と Docker 以外に必要な依存関係はありません。 -## Fast test +## Fast test {#fast-test} 通常、これは PR に対して最初に実行されるチェックです。 ClickHouse をビルドし、一部を除くほとんどの [stateless functional tests](tests.md#functional-tests) を実行します。 これが失敗すると、問題が修正されるまで後続のチェックは実行されません。 どのテストが失敗したかを確認するにはレポートを参照し、その後[こちら](/development/tests#running-a-test-locally)で説明されているとおりにローカルでその失敗を再現します。 -#### Fast test をローカルで実行する: +#### Fast test をローカルで実行する: {#running-fast-test-locally} ```sh python -m ci.praktika run "Fast test" [--test テスト名] @@ -129,11 +129,11 @@ python -m ci.praktika run "Fast test" [--test テスト名] Python 3 と Docker 以外の依存関係は必要ありません。 -## ビルドチェック +## ビルドチェック {#build-check} 以降の手順で利用するために、さまざまな構成で ClickHouse をビルドします。 -### ローカルでのビルドの実行 +### ローカルでのビルドの実行 {#running-builds-locally} ビルドは、次のコマンドを使用して CI 環境に近い形でローカル実行できます。 @@ -143,7 +143,7 @@ python -m ci.praktika run "<ビルドジョブ名>" Python 3 と Docker 以外に必要な依存関係はありません。 -#### 利用可能なビルドジョブ +#### 利用可能なビルドジョブ {#available-build-jobs} ビルドジョブ名は CI レポートに表示されるものと完全に同一です。 @@ -181,7 +181,7 @@ Python 3 と Docker 以外に必要な依存関係はありません。 **注意:** クロスコンパイルを使用する「Other Architectures」カテゴリ以外のビルドでは、指定した `BUILD_JOB_NAME` どおりのビルドを生成するために、ローカルマシンのアーキテクチャがビルドタイプと一致している必要があります。 -#### 例 +#### 例 {#example-run-local} ローカルでデバッグビルドを実行するには: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/contrib.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/contrib.md index e8ef83d04ad..552b8ed75d5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/contrib.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/contrib.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# サードパーティライブラリ +# サードパーティライブラリ {#third-party-libraries} ClickHouse は、さまざまな目的でサードパーティライブラリを利用します。たとえば、他のデータベースへの接続、ディスクへの保存/ディスクからの読み込み時のデータのデコード/エンコード、あるいは特定の SQL 関数の実装などです。 対象システムにインストールされているライブラリに依存しないようにするため、各サードパーティライブラリは Git サブモジュールとして ClickHouse のソースツリーにインポートされ、ClickHouse とともにコンパイルおよびリンクされます。 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..3ba6214e8df 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' --- - - -# 前提条件 +# 前提条件 {#prerequisites} ClickHouse は Linux、FreeBSD、macOS 上でビルドできます。 -Windows を使用している場合でも、Ubuntu を実行している [VirtualBox](https://www.virtualbox.org/) などの Linux 仮想マシン上で ClickHouse をビルドできます。 - +Windows を使用している場合でも、Linux を実行している仮想マシン上で ClickHouse をビルドできます。たとえば、Ubuntu を実行する [VirtualBox](https://www.virtualbox.org/) などです。 +## GitHub にリポジトリを作成する {#create-a-repository-on-github} -## 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 を作成します。 -次に、右上隅の「fork」ボタンをクリックして、ご自身のアカウントの下に [ClickHouse リポジトリ](https://github.com/ClickHouse/ClickHouse/) をフォークします。 +変更をコントリビュートするには(例: issue の修正や新機能の追加など)、まず fork 先のブランチに変更を commit し、その変更をメインリポジトリに反映する「Pull Request」を作成します。 -Issue の修正や機能追加などの変更を貢献するには、まずフォークしたリポジトリ内のブランチに変更をコミットし、その変更をメインのリポジトリに対して反映する「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) にあります。 -## リポジトリを開発マシンにクローンする +## リポジトリを開発マシンにクローンする {#clone-the-repository-to-your-development-machine} -まず、作業用マシンにソースファイルを取得します。具体的には、リポジトリをクローンします。 +まず、作業用マシンにソースファイルを取得するため、リポジトリをクローンします。 ```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 パッケージへの直接リンクがあり、必要であれば本番サーバーにデプロイすることもできます。 - +メインのテストセットは 1 時間以内に完了します。 +システムは、あなたのプルリクエスト専用の ClickHouse バイナリビルドを準備します。 +これらのビルドを取得するには、チェック一覧で「Builds」項目の横にある「Details」リンクをクリックします。 +そこから ClickHouse のビルド済み .deb パッケージへの直接リンクにアクセスでき、それらは(問題なければ)本番サーバーにそのままデプロイすることもできます。 ## ドキュメントを作成する {#write-documentation} -新機能を追加するプルリクエストには、必ず適切なドキュメントを含めてください。 -ドキュメントの変更をプレビューしたい場合は、ドキュメントページをローカルでビルドする手順が、README.md ファイル内の[こちら](https://github.com/ClickHouse/clickhouse-docs)に記載されています。 -ClickHouse に新しい関数を追加する際は、以下のテンプレートをガイドとして使用できます。 - - +新機能を追加するプルリクエストには、必ずそれに対応するドキュメントを含めてください。 +ドキュメントの変更内容をプレビューしたい場合は、ドキュメントページをローカルでビルドする手順が README.md ファイル内の[こちら](https://github.com/ClickHouse/clickhouse-docs)に記載されています。 +ClickHouse に新しい関数を追加する際は、以下のテンプレートをガイドとして利用できます。 ````markdown -# newFunctionName +# newFunctionName {#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'; ```` -## テストデータの使用 +## テストデータの利用 {#using-test-data} -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..a9454cd4764 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/index.md @@ -5,36 +5,37 @@ title: '開発と貢献' doc_type: 'landing-page' --- -このセクションには、次のページが含まれます。 +このセクションには、次のページがあります。 -{/* 以下の目次は、YAML フロントマターの title、description、slug フィールドから、 - 次のスクリプトによって自動生成されています: +{/* 以下の目次は、次のスクリプトによって、 + YAML フロントマターの title、description、slug フィールドから + 自動的に生成されます: https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - 誤りを見つけた場合や説明を改善したい場合は、これらのファイル自体を + 誤りを見つけた場合や説明文を改善したい場合は、該当ファイルを 直接編集してください。 */ } {/*AUTOGENERATED_START*/ } -| Page | Description | +| ページ | 説明 | | ------------------------------------------------------------------------------------------- | --------------------------------------------------------- | -| [Developer Prerequisites](/development/developer-instruction) | ClickHouse 開発の前提条件とセットアップ手順 | +| [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 をクロスコンパイルするためのガイド | +| [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 のアーキテクチャとカラム指向設計に関する包括的な概要 | +| [Build on Linux for E2K](/development/build-e2k) | E2K アーキテクチャ向けに 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 コーデック付きでビルドし、ベンチマークを実行する方法 | +| [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/jp/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md index 4e585a1a138..257f428d292 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md @@ -6,7 +6,7 @@ title: 'Rust ライブラリの統合' doc_type: 'guide' --- -# Rust ライブラリ +# Rust ライブラリ {#rust-libraries} Rust ライブラリの統合については、BLAKE3 ハッシュ関数の統合を例に説明します。 @@ -80,7 +80,6 @@ pub unsafe extern "C" fn blake3_apply_shim( また、すべての C 互換の項目に対して属性 #[no_mangle] と `extern "C"` を使用する必要があります。これらがないと、ライブラリが正しくコンパイルされず、cbindgen によるヘッダーの自動生成が実行されません。 - これらすべての手順が完了したら、小さなプロジェクトでライブラリをテストして、互換性やヘッダー生成に関する問題をすべて洗い出してください。ヘッダー生成中に問題が発生した場合は、`cbindgen.toml` ファイルで設定を行ってみてください(テンプレートはここで参照できます: [https://github.com/eqrion/cbindgen/blob/master/template.toml](https://github.com/eqrion/cbindgen/blob/master/template.toml))。 BLAKE3 を統合した際に発生した問題についても触れておきます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/style.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/style.md index 6a4630f655c..83161cf0342 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/style.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/style.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# C++ スタイルガイド +# C++ スタイルガイド {#c-style-guide} @@ -22,7 +22,7 @@ doc_type: 'guide' -## フォーマット +## フォーマット {#formatting} **1.** ほとんどのコード整形は `clang-format` によって自動的に行われます。 @@ -214,7 +214,7 @@ for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ``` -## コメント +## コメント {#comments} **1.** 自明ではない箇所には、必ずコメントを追加してください。 @@ -312,7 +312,7 @@ void executeQuery( ``` -## 名前 +## 名前 {#names} **1.** 変数およびクラスメンバーの名前には、小文字とアンダースコアからなるスネークケースを使用します。 @@ -431,7 +431,7 @@ T_PAAMAYIM_NEKUDOTAYIM のような名前は使用しないでくださ **17.** C++ ソースコードのファイル名には `.cpp` 拡張子を付けなければなりません。ヘッダーファイルには `.h` 拡張子を付けなければなりません。 -## コードの書き方 +## コードの書き方 {#how-to-write-code} **1.** メモリ管理。 @@ -700,7 +700,7 @@ auto s = std::string{"Hello"}; **26.** 仮想関数を宣言する場合、基底クラスでは `virtual` を記述し、派生クラスでは `virtual` の代わりに `override` を記述します。 -## C++で使用しない機能 +## C++で使用しない機能 {#unused-features-of-c} **1.** 仮想継承は用いない。 @@ -830,7 +830,7 @@ CPU の命令セットは、当社サーバー群で共通してサポートさ -## 追加の推奨事項 +## 追加の推奨事項 {#additional-recommendations} **1.** `stddef.h` に含まれる型に対して `std::` を明示的に指定すること diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/development/tests.md b/i18n/jp/docusaurus-plugin-content-docs/current/development/tests.md index 6468d88f0b7..deca78415a2 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/development/tests.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/development/tests.md @@ -9,11 +9,11 @@ doc_type: 'guide' -# ClickHouse のテスト +# ClickHouse のテスト {#testing-clickhouse} -## 機能テスト +## 機能テスト {#functional-tests} 機能テストは最もシンプルで扱いやすいテストです。 ClickHouse の機能のほとんどは機能テストで検証でき、この方法でテスト可能な ClickHouse のコード変更については、機能テストの実行が必須です。 @@ -34,7 +34,7 @@ SQL だけでは検証できない機能、たとえば入力データを `click `DateTime` および `DateTime64` のデータ型をテストする際のよくある誤りは、サーバーが特定のタイムゾーン(例: "UTC")を使用していると想定してしまうことです。実際にはそうではなく、CI テスト実行時のタイムゾーンは意図的にランダム化されています。最も簡単な回避策は、テスト値に対してタイムゾーンを明示的に指定することです。例: `toDateTime64(val, 3, 'Europe/Amsterdam')`。 ::: -### ローカルでテストを実行する +### ローカルでテストを実行する {#running-a-test-locally} ClickHouse サーバーをローカルで起動し、デフォルトポート(9000)で待ち受けるようにします。 たとえばテスト `01428_hash_set_nan_key` を実行するには、リポジトリのフォルダーに移動して次のコマンドを実行します。 @@ -49,7 +49,7 @@ PATH=:$PATH tests/clickhouse-test 01428_hash_set_ すべてのテストを実行することも、テスト名に対するフィルターを指定して一部のテストのみを実行することもできます: `./clickhouse-test substring`。 テストを並列で実行したり、ランダムな順序で実行したりするオプションもあります。 -### 新しいテストの追加 +### 新しいテストの追加 {#adding-a-new-test} 新しいテストを追加するには、まず `queries/0_stateless` ディレクトリに `.sql` または `.sh` ファイルを作成します。 次に、`clickhouse-client < 12345_test.sql > 12345_test.reference` または `./12345_test.sh > ./12345_test.reference` を使用して、対応する `.reference` ファイルを生成します。 @@ -76,7 +76,7 @@ sudo ./install.sh * 他のテストが同じ内容をテストしていないことを確認すること(つまり、まず grep して確認する) ::: -### テスト実行の制限 +### テスト実行の制限 {#restricting-test-runs} テストには 0 個以上の *タグ* を付けることができ、CI 上でどのコンテキストで実行されるかを制御できます。 @@ -95,9 +95,9 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Tags: no-fasttest, no-replicated-database -# - no-fasttest: <ここにタグの理由を記載> -# - no-replicated-database: <ここに理由を記載> +# Tags: no-fasttest, no-replicated-database {#tags-no-fasttest-no-replicated-database} +# - no-fasttest: <ここにタグの理由を記載> {#no-fasttest-provide_a_reason_for_the_tag_here} +# - no-replicated-database: <ここに理由を記載> {#no-replicated-database-provide_a_reason_here} ``` 利用可能なタグの一覧は次のとおりです: @@ -134,7 +134,7 @@ SELECT 1 上記の設定に加えて、特定の ClickHouse 機能を使用するかどうかを指定するために、`system.build_options` の `USE_*` フラグを使用できます。 たとえば、テストで MySQL テーブルを使用する場合は、タグ `use-mysql` を追加する必要があります。 -### ランダム設定の制限の指定 +### ランダム設定の制限の指定 {#specifying-limits-for-random-settings} テストでは、テスト実行中にランダム化される可能性がある設定について、許可される最小値と最大値を指定できます。 @@ -143,8 +143,8 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Tags: no-fasttest -# ランダム設定の制限: max_block_size=(1000, 10000); index_granularity=(100, None) +# Tags: no-fasttest {#tags-no-fasttest} +# ランダム設定の制限: max_block_size=(1000, 10000); index_granularity=(100, None) {#random-settings-limits-max_block_size1000-10000-index_granularity100-none} ``` `.sql` テストでは、タグは対象行の直後の行か、先頭行に SQL コメントとして記述します。 @@ -157,7 +157,7 @@ SELECT 1 片方の上限だけを指定する場合は、もう一方には `None` を指定できます。 -### テスト名の決め方 +### テスト名の決め方 {#choosing-the-test-name} テストの名前は、`00422_hash_function_constexpr.sql` のように、5桁のプレフィックスの後に内容を表す名前を付けます。 プレフィックスを決めるには、ディレクトリ内で既に存在する最大のプレフィックスを確認し、その値に 1 を加えてください。 @@ -168,7 +168,7 @@ ls tests/queries/0_stateless/[0-9]*.reference | tail -n 1 その間に、同じ数値プレフィックスを持つ別のテストが追加されることもありますが、それでも問題はなく、そのままで構いません。後から変更する必要はありません。 -### 必ず発生するエラーの確認 +### 必ず発生するエラーの確認 {#checking-for-an-error-that-must-occur} 誤ったクエリに対してサーバーエラーが発生することを確認したい場合があります。そのために、SQL テストでは次の形式の特別なアノテーションをサポートしています。 @@ -184,12 +184,12 @@ SELECT x; -- { serverError 49 } エラーコードのみを確認してください。 既存のエラーコードが要件に対して十分に厳密でない場合は、新しいエラーコードの追加を検討してください。 -### 分散クエリのテスト +### 分散クエリのテスト {#testing-a-distributed-query} 機能テストで分散クエリを使用したい場合、サーバー自身に対してクエリを実行するために、アドレス `127.0.0.{1..2}` を指定した `remote` テーブル関数を利用できます。または、サーバー設定ファイル内であらかじめ定義された `test_shard_localhost` のようなテスト用クラスタを使用することもできます。 テスト名には必ず `shard` または `distributed` という単語を含めてください。そうすることで、サーバーが分散クエリをサポートするように設定されている正しい構成で、CI 上でテストが実行されるようになります。 -### 一時ファイルの扱い +### 一時ファイルの扱い {#working-with-temporary-files} シェルテストの中で、その場でファイルを作成して利用する必要が生じる場合があります。 一部の CI チェックではテストが並列に実行されることに注意してください。そのため、一意ではない名前でスクリプト内から一時ファイルを作成または削除していると、`Flaky` などの CI チェックが失敗する原因になります。 @@ -217,7 +217,7 @@ SELECT x; -- { serverError 49 } -## ユニットテスト +## ユニットテスト {#unit-tests} ユニットテストは、ClickHouse 全体ではなく、特定のライブラリやクラス単体をテストしたい場合に有用です。 テストのビルドは、`ENABLE_TESTS` という CMake オプションで有効または無効にできます。 @@ -272,7 +272,7 @@ $ ./src/unit_tests_dbms --gtest_filter=LocalAddress* -## 手動テスト +## 手動テスト {#manual-testing} 新しい機能を開発した場合、その機能を手動でもテストするのは妥当です。 次の手順で行うことができます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/dictionary/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/dictionary/index.md index 3ffaa3a0a60..3d011e40c2d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/dictionary/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/dictionary/index.md @@ -1,8 +1,8 @@ --- slug: /dictionary -title: '辞書' -keywords: ['辞書', '辞書型'] -description: '辞書は、高速なルックアップのためにデータをキーと値のペアで表現する構造です。' +title: 'Dictionary' +keywords: ['dictionary', 'dictionaries'] +description: 'Dictionary は、高速なルックアップのためのキー値型データ表現を提供します。' doc_type: 'reference' --- @@ -11,36 +11,35 @@ import dictionaryLeftAnyJoin from '@site/static/images/dictionary/dictionary-lef import Image from '@theme/IdealImage'; -# Dictionary +# Dictionary {#dictionary} -ClickHouse における Dictionary は、さまざまな[内部および外部ソース](/sql-reference/dictionaries#dictionary-sources)からのデータをメモリ上の [key-value](https://en.wikipedia.org/wiki/Key%E2%80%93value_database) 形式で表現し、きわめて低レイテンシなルックアップクエリ向けに最適化したものです。 +ClickHouse における Dictionary は、さまざまな[内部および外部ソース](/sql-reference/dictionaries#dictionary-sources)からのデータをインメモリの[キー・バリュー](https://en.wikipedia.org/wiki/Key%E2%80%93value_database)形式で表現し、超低レイテンシーなルックアップクエリのために最適化されたものです。 -Dictionary は次のような用途に役立ちます: -- 特に `JOIN` と組み合わせて使用する場合に、クエリのパフォーマンスを向上させる -- インジェスト処理を低速化させることなく、その場でインジェストされたデータを拡充する - -ClickHouse における Dictionary のユースケース +Dictionary は次の用途に有用です: +- 特に `JOIN` を使用する場合に、クエリのパフォーマンスを向上させる +- インジェスト処理を低速化することなく、取り込むデータをオンザフライで拡充する +ClickHouse における Dictionary のユースケース -## Dictionary を使用した JOIN の高速化 +## Dictionary を使用した結合の高速化 {#speeding-up-joins-using-a-dictionary} -Dictionary は、特定タイプの `JOIN`、すなわち結合キーが基礎となるキー・バリュー型ストレージのキー属性と一致する必要がある [`LEFT ANY` 型](/sql-reference/statements/select/join#supported-types-of-join) を高速化するために利用できます。 +Dictionary は、特定の種類の `JOIN`、すなわち結合キーが基盤となるキー・バリュー型ストレージのキー属性と一致している必要がある [`LEFT ANY` 型](/sql-reference/statements/select/join#supported-types-of-join) を高速化するために利用できます。 -LEFT ANY JOIN で Dictionary を使用する +LEFT ANY JOIN で Dictionary を使用する -この条件が満たされる場合、ClickHouse は Dictionary を利用して [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join) を実行できます。これは ClickHouse における最速の JOIN アルゴリズムであり、右側のテーブルに対して使用されている [table engine](/engines/table-engines) が低レイテンシなキー・バリュー要求をサポートしている場合に適用可能です。ClickHouse にはこれに対応する table engine が 3 種類あります: [Join](/engines/table-engines/special/join)(事前計算済みのハッシュテーブルに相当)、[EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb)、および [Dictionary](/engines/table-engines/special/dictionary) です。ここでは Dictionary ベースのアプローチについて説明しますが、仕組み自体は 3 つのエンジンで共通です。 +この条件を満たす場合、ClickHouse は Dictionary を利用して [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join) を実行できます。これは ClickHouse で最も高速な結合アルゴリズムであり、右側のテーブルの基盤となる [table engine](/engines/table-engines) が低レイテンシーのキー・バリュー要求をサポートしている場合に適用可能です。ClickHouse にはこれを提供するテーブルエンジンが 3 つあります。[Join](/engines/table-engines/special/join)(事前計算済みハッシュテーブルに相当)、[EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb)、および [Dictionary](/engines/table-engines/special/dictionary) です。ここでは Dictionary ベースのアプローチについて説明しますが、仕組みは 3 つのエンジンで共通です。 -Direct Join アルゴリズムでは、右側のテーブルが Dictionary をバックエンドとして持っている必要があります。これにより、そのテーブルから結合対象となるデータが、低レイテンシなキー・バリュー型データ構造としてすでにメモリ上に存在している状態になります。 +Direct Join アルゴリズムでは、右側のテーブルが Dictionary をバックエンドとして使用しており、そのテーブルから結合対象となるデータが、低レイテンシーのキー・バリュー型データ構造として、すでにメモリ上に存在している必要があります。 -### 例 +### 例 {#example} -Stack Overflow データセットを使用して、次の疑問に答えてみます: -*Hacker News において、SQL に関する最も「物議を醸した」投稿はどれか?* +[Stack Overflow データセット](/getting-started/example-datasets/stackoverflow)を使って、次の質問に答えてみましょう: +*Hacker News 上で、SQL に関して最も物議を醸している投稿はどれか?* -ここでは「物議を醸した」を、賛成票と反対票の数が近い投稿と定義します。この絶対差を計算し、値が 0 に近いほど議論を呼んでいるとみなします。また、投稿には少なくとも 10 件以上の賛成票と反対票があるものに限定します — そもそもほとんど投票されていない投稿は、あまり物議を醸しているとはいえないためです。 +ここでは、賛成票と反対票の数が近い投稿を「物議を醸している」と定義します。この絶対差を計算し、値が 0 に近いほど物議の度合いが高いとみなします。また、投稿には少なくとも賛成票と反対票がそれぞれ 10 件以上あるものと仮定します — ほとんど投票されない投稿は、あまり物議を醸しているとは言えないためです。 -データが正規化されている前提では、このクエリには現在、`posts` テーブルと `votes` テーブルを用いた `JOIN` が必要です: +データを正規化した状態では、このクエリでは現在、`posts` テーブルと `votes` テーブルを使った `JOIN` が必要です。 ```sql WITH PostIds AS @@ -79,18 +78,18 @@ UpVotes: 13 DownVotes: 13 Controversial_ratio: 0 -1行を取得しました。経過時間: 1.283秒。処理行数: 4億1844万行、7.23 GB (3億2607万行/秒、5.63 GB/秒) +1 行が返されました。経過時間: 1.283秒。処理された行数: 4億1844万行、7.23 GB (3億2607万行/秒、5.63 GB/秒) ピークメモリ使用量: 3.18 GiB。 ``` -> **`JOIN` の右側にはより小さいデータセットを使用する**: このクエリでは、外側とサブクエリの両方で `PostId` をフィルタリングしているため、必要以上に冗長に見えるかもしれません。これは、クエリの応答時間を高速に保つためのパフォーマンス最適化です。最適なパフォーマンスを得るには、常に `JOIN` の右側がより小さな集合となるようにし、可能な限り小さく保ってください。`JOIN` のパフォーマンス最適化や利用可能なアルゴリズムの理解に関するヒントとしては、[このブログ記事シリーズ](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1)を参照することを推奨します。 +> **`JOIN` の右側には小さいデータセットを使用する**: このクエリでは、外側とサブクエリの両方で `PostId` によるフィルタリングを行っているため、必要以上に冗長に見えるかもしれません。これはクエリの応答時間を短く保つためのパフォーマンス最適化です。最適なパフォーマンスを得るには、常に `JOIN` の右側がより小さな集合となるようにし、可能な限り小さく保ってください。JOIN のパフォーマンス最適化のコツや利用可能なアルゴリズムの理解については、[このブログ記事シリーズ](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1) を参照することをおすすめします。 -このクエリは高速ですが、良好なパフォーマンスを得るには `JOIN` を慎重に記述する必要があります。本来であれば、まず投稿を「SQL」を含むものだけにフィルタリングし、その後で対象となる一部のブログについて `UpVote` と `DownVote` の数を確認してメトリクスを計算したいところです。 +このクエリは高速ですが、良好なパフォーマンスを得るには `JOIN` を慎重に記述する必要があります。本来であれば、「SQL」を含む投稿だけに単純にフィルタリングし、その投稿のサブセットに対して `UpVote` と `DownVote` のカウントを確認してメトリクスを計算できるのが理想的です。 -#### 辞書の適用 -これらの概念を示すために、投票データに辞書を使用します。辞書は通常メモリ上に保持されるため(例外は [ssd_cache](/sql-reference/dictionaries#ssd_cache))、ユーザーはデータサイズを意識する必要があります。次に `votes` テーブルのサイズを確認します: +#### Dictionary の適用 {#applying-a-dictionary} +これらの概念を示すために、投票データに対して Dictionary を使用します。Dictionary は通常メモリ上に保持されるため([ssd_cache](/sql-reference/dictionaries#ssd_cache) は例外)、ユーザーはデータサイズに留意しておく必要があります。ここで、`votes` テーブルのサイズを確認します: ```sql SELECT table, @@ -106,11 +105,11 @@ GROUP BY table └─────────────────┴─────────────────┴───────────────────┴───────┘ ``` -データはディクショナリ内に非圧縮のまま保存されるため、すべてのカラム(実際にはそうしません)をディクショナリに保存すると仮定すると、少なくとも 4GB のメモリが必要になります。ディクショナリはクラスター全体にレプリケートされるため、このメモリ量は *ノードごとに* 確保する必要があります。 +データは Dictionary 内で非圧縮のまま保存されるため、すべてのカラム(実際にはそうしません)を Dictionary に保存すると仮定すると、少なくとも 4GB のメモリが必要になります。Dictionary はクラスター全体でレプリケートされるため、このメモリ量は *ノードごとに* 確保しておく必要があります。 -> 以下の例では、ディクショナリ用のデータは ClickHouse テーブルに由来しています。これはディクショナリの最も一般的なソースですが、ファイル、HTTP、[Postgres](/sql-reference/dictionaries#postgresql) を含むデータベースなど、[多数のソース](/sql-reference/dictionaries#dictionary-sources) がサポートされています。後述するように、ディクショナリは自動的に更新できるため、頻繁に変更される小さなデータセットを直接結合で利用可能にする理想的な方法となります。 +> 以下の例では、Dictionary 用のデータは ClickHouse テーブルを起点としています。これは最も一般的な Dictionary のソースですが、ファイル、HTTP、さらには [Postgres](/sql-reference/dictionaries#postgresql) を含むデータベースなど、[複数のソース](/sql-reference/dictionaries#dictionary-sources) がサポートされています。後ほど示すように、Dictionary は自動更新が可能であり、頻繁に変更が発生する小規模なデータセットをダイレクトに JOIN で参照可能にする理想的な手段です。 -ディクショナリには、ルックアップを行うための主キーが必要です。これは概念的にはトランザクションデータベースの主キーと同様であり、一意である必要があります。上記のクエリでは、結合キー `PostId` に対するルックアップが必要です。ディクショナリには、`votes` テーブルから各 `PostId` について賛成票と反対票の合計値が格納されている必要があります。以下が、このディクショナリデータを取得するためのクエリです: +Dictionary には、ルックアップを行うためのプライマリキーが必要です。これは概念的にはトランザクションデータベースのプライマリキーと同じで、一意である必要があります。上記のクエリでは、JOIN キーである `PostId` に対してルックアップを行います。Dictionary には、`votes` テーブルから `PostId` ごとの賛成票と反対票の合計が格納されている必要があります。以下は、この Dictionary 用データを取得するクエリです。 ```sql SELECT PostId, @@ -120,7 +119,7 @@ FROM votes GROUP BY PostId ``` -このディクショナリを作成するには、次の DDL が必要です。ここで、先ほどのクエリを使用している点に注意してください。 +Dictionary を作成するには、以下の DDL を実行します。先ほどのクエリが使われている点に注目してください。 ```sql CREATE DICTIONARY votes_dict @@ -137,9 +136,9 @@ LAYOUT(HASHED()) 0 rows in set. Elapsed: 36.063 sec. ``` -> 自己管理の OSS 環境では、上記のコマンドをすべてのノードで実行する必要があります。ClickHouse Cloud では、ディクショナリはすべてのノードに自動的にレプリケートされます。上記の処理は、RAM 64GB の ClickHouse Cloud ノード上で実行しており、ロードに 36 秒を要しました。 +> セルフマネージドの OSS では、上記のコマンドをすべてのノードで実行する必要があります。ClickHouse Cloud では、Dictionary はすべてのノードに自動的にレプリケートされます。上記は 64GB の RAM を搭載した ClickHouse Cloud ノード上で実行しており、ロードには 36 秒かかりました。 -ディクショナリが消費しているメモリ量を確認するには、次のようにします。 +Dictionary によって消費されているメモリを確認するには: ```sql SELECT formatReadableSize(bytes_allocated) AS size @@ -151,7 +150,8 @@ WHERE name = 'votes_dict' └──────────┘ ``` -特定の `PostId` に対する賛成票と反対票は、シンプルな `dictGet` 関数で取得できるようになりました。以下の例では、投稿 `11227902` の値を取得しています。 +特定の`PostId`に対する賛成票数と反対票数は、シンプルな`dictGet`関数で取得できるようになりました。以下の例では、投稿`11227902`の値を取得しています。 + ```sql SELECT dictGet('votes_dict', ('UpVotes', 'DownVotes'), '11227902') AS votes @@ -160,7 +160,7 @@ SELECT dictGet('votes_dict', ('UpVotes', 'DownVotes'), '11227902') AS votes │ (34999,32) │ └────────────┘ -これを先ほどのクエリに適用することで、JOINを削除できます: +これを先ほどのクエリに適用することで、JOINを削除できます: WITH PostIds AS ( @@ -177,16 +177,16 @@ WHERE (Id IN (PostIds)) AND (UpVotes > 10) AND (DownVotes > 10) ORDER BY Controversial_ratio ASC LIMIT 3 -3行のセット。経過時間: 0.551秒。処理: 1億1964万行、3.29 GB (毎秒2億1696万行、毎秒5.97 GB)。 -ピークメモリ使用量: 552.26 MiB。 +3行のセット。経過時間:0.551秒。処理:1億1964万行、3.29 GB(2億1696万行/秒、5.97 GB/秒) +ピークメモリ使用量:552.26 MiB。 ``` -このクエリははるかに単純なだけでなく、実行速度も2倍以上高速です! さらに最適化するには、賛成票と反対票の合計が10を超える投稿だけを辞書に読み込み、あらかじめ計算した「controversial」値だけを保存するようにします。 +このクエリははるかに単純なだけでなく、実行速度も2倍以上速くなります。さらに、Dictionary には賛成票・反対票がそれぞれ 10 を超える投稿だけを読み込み、あらかじめ計算しておいた物議度の値だけを保持するようにすれば、より最適化できます。 -## クエリ時の拡張 +## クエリ時のエンリッチメント {#query-time-enrichment} -辞書は、クエリ実行時に値を参照するために使用できます。これらの値は結果として返したり、集約処理で使用したりできます。たとえば、ユーザー ID をロケーションに対応付ける辞書を作成するとします。 +Dictionary はクエリ実行時に値を参照するために使用できます。これらの値は結果として返したり、集約で利用したりできます。たとえば、ユーザー ID を所在地にマッピングする Dictionary を作成するとします。 ```sql CREATE DICTIONARY users_dict @@ -200,7 +200,7 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -この辞書を使用して、POST の結果に情報を付加できます。 +この Dictionary を使用して、投稿の結果を充実させることができます。 ```sql SELECT @@ -213,18 +213,18 @@ LIMIT 5 FORMAT PrettyCompactMonoBlock ┌───────Id─┬─Title─────────────────────────────────────────────────────────┬─Location──────────────┐ -│ 52296928 │ ClickHouseにおける2つの文字列の比較 │ Spain │ -│ 52345137 │ ファイルを使用してMySQLからClickHouseにデータを移行する方法 │ 中国江苏省Nanjing Shi │ -│ 61452077 │ ClickHouseでPARTITIONを変更する方法 │ Guangzhou, 广东省中国 │ -│ 55608325 │ ClickHouseでmax()を使わずにテーブルの最後のレコードを選択 │ Moscow, Russia │ -│ 55758594 │ ClickHouseで一時テーブルを作成 │ Perm', Russia │ +│ 52296928 │ Comparison between two Strings in ClickHouse │ Spain │ +│ 52345137 │ How to use a file to migrate data from mysql to a clickhouse? │ 中国江苏省Nanjing Shi │ +│ 61452077 │ How to change PARTITION in clickhouse │ Guangzhou, 广东省中国 │ +│ 55608325 │ Clickhouse select last record without max() on all table │ Moscow, Russia │ +│ 55758594 │ ClickHouse create temporary table │ Perm', Russia │ └──────────┴───────────────────────────────────────────────────────────────┴───────────────────────┘ -5行を取得しました。経過時間: 0.033秒。処理行数: 425万行、82.84 MB (1億3062万行/秒、2.55 GB/秒) +5行が返されました。経過時間: 0.033秒。処理された行数: 425万行、82.84 MB (1億3062万行/秒、2.55 GB/秒) ピークメモリ使用量: 249.32 MiB。 ``` -先ほどの結合の例と同様に、同じ辞書を使って、投稿のおもな発信元を効率的に判定できます。 +上記の結合例と同様に、同じ Dictionary を使用して、ほとんどの投稿がどこから投稿されているのかを効率的に判定できます。 ```sql SELECT @@ -249,13 +249,13 @@ Peak memory usage: 248.84 MiB. ``` -## インデックス時のエンリッチメント +## インデックス時のエンリッチメント {#index-time-enrichment} -上記の例では、クエリ時に辞書を使用して結合を排除しました。辞書は、挿入時に行をエンリッチするためにも使用できます。これは通常、エンリッチに用いる値が変わらず、かつ辞書を埋めるために利用できる外部ソースに存在する場合に適しています。この場合、挿入時に行をエンリッチしておけば、クエリ時の辞書ルックアップを回避できます。 +上記の例では、クエリ時に Dictionary を使用して結合を回避しました。Dictionary は、挿入時に行をエンリッチするためにも使用できます。これは通常、エンリッチに用いる値が変化せず、Dictionary を埋めるために利用できる外部ソースに存在する場合に適しています。この場合、行を挿入時にエンリッチしておくことで、クエリ時に Dictionary を参照してルックアップする必要を回避できます。 -Stack Overflow におけるユーザーの `Location` が決して変わらないと仮定します(実際には変わります)— 具体的には、`users` テーブルの `Location` 列です。投稿テーブルをロケーション別に分析するクエリを実行したいとします。このテーブルには `UserId` が含まれています。 +Stack Overflow におけるユーザーの `Location` が決して変わらない(実際には変わりますが)と仮定してみましょう。具体的には、`users` テーブルの `Location` カラムです。`posts` テーブルに対して Location ごとの分析クエリを実行したいとします。このテーブルには `UserId` が含まれています。 -辞書は、`users` テーブルをデータソースとして、ユーザー ID からロケーションへのマッピングを提供します。 +Dictionary は、`users` テーブルをデータソースとして、ユーザー ID から Location へのマッピングを提供します。 ```sql CREATE DICTIONARY users_dict @@ -269,9 +269,9 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -> `Hashed` 辞書型を使用できるようにするため、`Id < 0` のユーザーを除外しています。`Id < 0` のユーザーはシステムユーザーです。 +> `Hashed` 型の Dictionary を使用できるようにするため、`Id < 0` のユーザーを除外しています。`Id < 0` のユーザーはシステムユーザーです。 -この辞書を posts テーブルへの挿入時に利用するには、スキーマを変更する必要があります。 +posts テーブルの挿入時にこの Dictionary を活用するには、スキーマを変更する必要があります。 ```sql CREATE TABLE posts_with_location @@ -285,9 +285,9 @@ ENGINE = MergeTree ORDER BY (PostTypeId, toDate(CreationDate), CommentCount) ``` -上記の例では、`Location` は `MATERIALIZED` カラムとして宣言されています。これは、値を `INSERT` クエリの一部として指定することもできますが、その値に関わらず常に計算されることを意味します。 +上記の例では、`Location` は `MATERIALIZED` カラムとして宣言されています。これは、値を `INSERT` クエリの一部として指定することもできますが、常に計算された値が使用されることを意味します。 -> ClickHouse は [`DEFAULT` カラム](/sql-reference/statements/create/table#default_values) もサポートしています(値を明示的に挿入することも、指定されていない場合に計算させることもできます)。 +> ClickHouse は、[`DEFAULT` columns](/sql-reference/statements/create/table#default_values)(値を挿入することも、指定されていない場合に計算させることもできるカラム)もサポートしています。 テーブルにデータを投入するには、通常どおり S3 からの `INSERT INTO SELECT` を使用できます。 @@ -297,7 +297,7 @@ INSERT INTO posts_with_location SELECT Id, PostTypeId::UInt8, AcceptedAnswerId, 0 rows in set. Elapsed: 36.830 sec. Processed 238.98 million rows, 2.64 GB (6.49 million rows/s., 71.79 MB/s.) ``` -これで、投稿の大半がどの場所から発信されているか、その場所名を取得できます。 +これで、投稿の大半が発信されている場所の名称を取得できるようになりました。 ```sql SELECT Location, count() AS c @@ -319,24 +319,24 @@ Peak memory usage: 666.82 MiB. ``` -## 辞書に関する高度なトピック {#advanced-dictionary-topics} +## Dictionary の高度なトピック {#advanced-dictionary-topics} -### 辞書の `LAYOUT` の選択 {#choosing-the-dictionary-layout} +### Dictionary の `LAYOUT` を選択する {#choosing-the-dictionary-layout} -`LAYOUT` 句は、辞書の内部データ構造を制御します。利用可能なオプションはいくつかあり、その内容は[こちら](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory)に記載されています。適切なレイアウトを選択するためのヒントは[こちら](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout)にあります。 +`LAYOUT` 句は、Dictionary の内部データ構造を決定します。複数のオプションがあり、その詳細は[こちら](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory)に記載されています。適切なレイアウトを選択するためのヒントは[こちら](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout)で確認できます。 -### 辞書の更新 {#refreshing-dictionaries} +### Dictionary の更新 {#refreshing-dictionaries} -辞書の `LIFETIME` として `MIN 600 MAX 900` を指定しました。LIFETIME は辞書の更新間隔であり、ここで指定した値により 600~900 秒のランダムな間隔で定期的に再読み込みが行われます。このランダムな間隔は、多数のサーバーで更新を行う際に辞書のソースへの負荷を分散するために必要です。更新中でも、古いバージョンの辞書には引き続きクエリを実行できます。初回の読み込みのみがクエリをブロックします。`(LIFETIME(0))` を設定すると、辞書は更新されなくなる点に注意してください。 -辞書は `SYSTEM RELOAD DICTIONARY` コマンドを使用して強制的に再読み込みできます。 +`LIFETIME` を `MIN 600 MAX 900` として Dictionary に指定しています。LIFETIME は Dictionary の更新間隔を表し、ここで指定した値により 600~900 秒のランダムな間隔で定期的に再読み込みが行われます。このランダムな間隔は、多数のサーバーで更新を行う際に、Dictionary のソースへの負荷を分散するために必要です。更新中も Dictionary の旧バージョンに対するクエリは引き続き実行可能であり、クエリがブロックされるのは初回ロード時のみです。`(LIFETIME(0))` を設定すると、Dictionary が更新されなくなる点に注意してください。 +Dictionary は `SYSTEM RELOAD DICTIONARY` コマンドを使用して強制的に再読み込みできます。 -ClickHouse や Postgres のようなデータベースソースでは、一定間隔ではなく、実際に変更があった場合にのみ辞書を更新するクエリを設定できます(クエリの応答結果によって更新の要否が決まります)。詳細は[こちら](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime)を参照してください。 +ClickHouse や Postgres のようなデータベースソースの場合、クエリのレスポンスに基づいて実際に変更があった場合にのみ Dictionary を更新するように設定でき、一定間隔での更新に代えてこの方式を利用できます。詳細は[こちら](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime)を参照してください。 -### その他の辞書タイプ {#other-dictionary-types} +### その他の Dictionary タイプ {#other-dictionary-types} -ClickHouse は [階層型](/sql-reference/dictionaries#hierarchical-dictionaries)、[Polygon](/sql-reference/dictionaries#polygon-dictionaries)、[正規表現](/sql-reference/dictionaries#regexp-tree-dictionary) 辞書もサポートしています。 +ClickHouse では、[Hierarchical](/sql-reference/dictionaries#hierarchical-dictionaries)、[Polygon](/sql-reference/dictionaries#polygon-dictionaries)、および [Regular Expression](/sql-reference/dictionaries#regexp-tree-dictionary) の各 Dictionary もサポートしています。 -### 参考資料 {#more-reading} +### 参考情報 {#more-reading} -- [Using Dictionaries to Accelerate Queries](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse) -- [Advanced Configuration for Dictionaries](/sql-reference/dictionaries) +- [辞書を利用してクエリを高速化する](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse) +- [辞書の高度な設定](/sql-reference/dictionaries) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md index a5893eaab15..a1a2c5057d7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Atomic +# Atomic {#atomic} `Atomic` エンジンは、ノンブロッキングな [`DROP TABLE`](#drop-detach-table) および [`RENAME TABLE`](#rename-table) クエリに加え、アトミックな [`EXCHANGE TABLES`](#exchange-tables) クエリをサポートします。`Atomic` データベースエンジンは、オープンソース版の ClickHouse でデフォルトとして使用されています。 @@ -19,16 +19,16 @@ ClickHouse Cloud では、デフォルトで [`Shared` データベースエン -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...]; ``` -## 詳細と推奨事項 +## 詳細と推奨事項 {#specifics-and-recommendations} -### テーブル UUID +### テーブル UUID {#table-uuid} `Atomic` データベース内の各テーブルには永続的な [UUID](../../sql-reference/data-types/uuid.md) が付与されており、そのデータは以下のディレクトリに保存されます。 @@ -50,16 +50,16 @@ CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE [`SHOW CREATE` クエリで UUID を表示するには、[show_table_uuid_in_table_create_query_if_not_nil](../../operations/settings/settings.md#show_table_uuid_in_table_create_query_if_not_nil) 設定を使用できます。 ::: -### RENAME TABLE +### RENAME TABLE {#rename-table} [`RENAME`](../../sql-reference/statements/rename.md) クエリは UUID を変更せず、テーブルデータも移動しません。これらのクエリは即座に実行され、そのテーブルを使用している他のクエリの完了を待ちません。 -### DROP/DETACH TABLE +### DROP/DETACH TABLE {#drop-detach-table} `DROP TABLE` を使用しても、データはすぐには削除されません。`Atomic` エンジンは、メタデータを `/clickhouse_path/metadata_dropped/` に移動してテーブルを削除済みとしてマークし、バックグラウンドスレッドに通知するだけです。テーブルデータが最終的に削除されるまでの遅延は、[`database_atomic_delay_before_drop_table_sec`](../../operations/server-configuration-parameters/settings.md#database_atomic_delay_before_drop_table_sec) 設定で指定します。 `SYNC` 修飾子を使用して同期モードを指定できます。これを行うには、[`database_atomic_wait_for_drop_and_detach_synchronously`](../../operations/settings/settings.md#database_atomic_wait_for_drop_and_detach_synchronously) 設定を使用します。この場合、`DROP` はテーブルを使用している実行中の `SELECT`、`INSERT` などのクエリが終了するまで待機します。テーブルは使用されていない状態になったときに削除されます。 -### EXCHANGE TABLES/DICTIONARIES +### EXCHANGE TABLES/DICTIONARIES {#exchange-tables} [`EXCHANGE`](../../sql-reference/statements/exchange.md) クエリは、テーブルやディクショナリをアトミックに入れ替えます。たとえば、次のような非アトミックな操作の代わりに使用できます。 @@ -73,11 +73,11 @@ RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table; EXCHANGE TABLES new_table AND old_table; ``` -### atomic データベースにおける ReplicatedMergeTree +### atomic データベースにおける ReplicatedMergeTree {#replicatedmergetree-in-atomic-database} [`ReplicatedMergeTree`](/engines/table-engines/mergetree-family/replication) テーブルでは、ZooKeeper 内のパスおよびレプリカ名を指定するエンジンパラメータは設定しないことを推奨します。この場合、設定パラメータ [`default_replica_path`](../../operations/server-configuration-parameters/settings.md#default_replica_path) と [`default_replica_name`](../../operations/server-configuration-parameters/settings.md#default_replica_name) が使用されます。エンジンパラメータを明示的に指定したい場合は、`{uuid}` マクロを使用することを推奨します。これにより、ZooKeeper 内でテーブルごとに一意なパスが自動的に生成されます。 -### メタデータディスク +### メタデータディスク {#metadata-disk} `SETTINGS` 内で `disk` が指定されている場合、そのディスクはテーブルのメタデータファイルの保存に使用されます。 例えば次のとおりです。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md index 917606ca327..476c6e6c551 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md @@ -7,17 +7,13 @@ title: 'バックアップ' doc_type: 'reference' --- - - -# バックアップ +# バックアップ {#backup} データベースのバックアップ機能を使用すると、[バックアップ](../../operations/backup) からテーブルやデータベースを読み取り専用モードで即座にアタッチできます。 データベースのバックアップは、増分バックアップと非増分バックアップの両方に対応しています。 - - -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE backup_database @@ -38,8 +34,7 @@ ENGINE = Backup('database_name_inside_backup', Disk('disk_name', 'backup_name')) * `database_name_inside_backup` — バックアップ内のデータベースの名前。 * `backup_destination` — バックアップ先。 - -## 使用例 +## 使用例 {#usage-example} `Disk` バックアップ先を使った例を見てみましょう。まずは `storage.xml` でバックアップ用ディスクを設定します: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md index c24b3bd2eb4..14d1611a99f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' -# DataLakeCatalog +# DataLakeCatalog {#datalakecatalog} `DataLakeCatalog` データベースエンジンを使用すると、ClickHouse を外部の データカタログに接続し、データを複製することなくオープンテーブルフォーマットのデータをクエリできます。 @@ -28,7 +28,7 @@ doc_type: 'reference' -## データベースの作成 +## データベースの作成 {#creating-a-database} `DataLakeCatalog` エンジンを使用するには、以下の必要な設定を有効にする必要があります。 @@ -66,7 +66,7 @@ catalog_type, | `region` | サービスの AWS リージョン(例: `us-east-1`) | -## 例 +## 例 {#examples} `DataLakeCatalog` エンジンの使用例については、以下のセクションを参照してください。 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..1ebfaed9c21 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,41 +1,39 @@ --- -description: 'データベースエンジンに関するドキュメント' +description: 'データベース エンジンに関するドキュメント' slug: /engines/database-engines/ -toc_folder_title: 'データベースエンジン' +toc_folder_title: 'データベース エンジン' toc_priority: 27 -toc_title: '概要' -title: 'データベースエンジン' +toc_title: 'はじめに' +title: 'データベース エンジン' doc_type: 'landing-page' --- +# データベースエンジン {#database-engines} +データベースエンジンを使用すると、テーブルを扱うことができます。デフォルトでは、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 - によって自動生成されています。 + YAML フロントマターのフィールド(slug、description、title)から自動生成されています。 - 誤りを見つけた場合は、各ページの YML フロントマターを編集してください。 + 誤りを見つけた場合は、該当ページの YAML フロントマターを編集してください。 */ } {/*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 を外部データカタログに接続し、オープンテーブル形式のデータをクエリできます。 | +| Page | Description | +| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| [Atomic](/engines/database-engines/atomic) | `Atomic` エンジンは、ブロックしない `DROP TABLE` および `RENAME TABLE` クエリと、アトミックな `EXCHANGE TABLES` クエリをサポートします。`Atomic` データベースエンジンがデフォルトとして使用されます。 | +| [Shared](/engines/database-engines/shared) | ClickHouse Cloud で利用可能な `Shared` データベースエンジンについて説明するページです。 | +| [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 サーバー上のデータベースに接続し、ClickHouse と MySQL 間でデータを交換するための `INSERT` および `SELECT` クエリを実行できるようにします。 | +| [SQLite](/engines/database-engines/sqlite) | SQLite データベースに接続し、ClickHouse と SQLite 間でデータを交換するための `INSERT` および `SELECT` クエリを実行できるようにします。 | +| [Backup](/engines/database-engines/backup) | バックアップからテーブル/データベースを読み取り専用モードで即座にアタッチできるようにします。 | +| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | PostgreSQL データベース内のテーブルを使用して ClickHouse データベースを作成します。 | +| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | DataLakeCatalog データベースエンジンにより、ClickHouse を外部データカタログに接続し、オープンなテーブルフォーマットのデータに対してクエリを実行できます。 | {/*AUTOGENERATED_END*/ } diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md index 216fe8f5698..54ca2f612ca 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md @@ -7,17 +7,13 @@ title: 'Lazy' doc_type: 'reference' --- +# Lazy {#lazy} +テーブルを最後のアクセスから `expiration_time_in_seconds` 秒間だけ RAM 内に保持します。 *Log テーブルでのみ使用できます。 -# Lazy +アクセス間隔が長い多数の小さな *Log テーブルを格納する用途に最適化されています。 -テーブルを最後のアクセスから `expiration_time_in_seconds` 秒間だけ RAM 内に保持します。 \*Log テーブルでのみ使用できます。 - -アクセス間隔が長い多数の小さな \*Log テーブルを格納する用途に最適化されています。 - - - -## データベースを作成する +## データベースを作成する {#creating-a-database} ```sql CREATE DATABASE testlazy diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md index 0dfe9d79b00..9f42bd4e7b6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MaterializedPostgreSQL +# MaterializedPostgreSQL {#materializedpostgresql} @@ -35,7 +35,7 @@ SET allow_experimental_database_materialized_postgresql=1 ::: -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -50,7 +50,7 @@ ENGINE = MaterializedPostgreSQL('host:port', 'database', 'user', 'password') [SE * `password` — ユーザーのパスワード。 -## 使用例 +## 使用例 {#example-of-use} ```sql CREATE DATABASE postgres_db @@ -66,7 +66,7 @@ SELECT * FROM postgresql_db.postgres_table; ``` -## レプリケーションへの新しいテーブルの動的追加 +## レプリケーションへの新しいテーブルの動的追加 {#dynamically-adding-table-to-replication} `MaterializedPostgreSQL` データベースが作成された後は、対応する PostgreSQL データベース内の新しいテーブルは自動的には検出されません。こうしたテーブルは手動で追加できます。 @@ -79,7 +79,7 @@ ATTACH TABLE postgres_database.new_table; ::: -## レプリケーションからテーブルを動的に除外する +## レプリケーションからテーブルを動的に除外する {#dynamically-removing-table-from-replication} 特定のテーブルをレプリケーション対象から除外することができます。 @@ -88,7 +88,7 @@ DETACH TABLE postgres_database.table_to_remove PERMANENTLY; ``` -## PostgreSQL スキーマ +## PostgreSQL スキーマ {#schema} PostgreSQL の [スキーマ](https://www.postgresql.org/docs/9.1/ddl-schemas.html) は、3 通りの方法で設定できます(バージョン 21.12 以降)。 @@ -136,7 +136,7 @@ SELECT * FROM database1.`schema2.table2`; 警告: このケースでは、テーブル名にピリオド(.)を含めることはできません。 -## 要件 +## 要件 {#requirements} 1. PostgreSQL の設定ファイルにおいて、[wal_level](https://www.postgresql.org/docs/current/runtime-config-wal.html) 設定は `logical` にし、`max_replication_slots` パラメータは少なくとも `2` に設定する必要があります。 @@ -172,9 +172,9 @@ WHERE oid = 'postgres_table'::regclass; ::: -## 設定 +## 設定 {#settings} -### `materialized_postgresql_tables_list` +### `materialized_postgresql_tables_list` {#materialized-postgresql-tables-list} [MaterializedPostgreSQL](../../engines/database-engines/materialized-postgresql.md) データベースエンジンによって複製される、PostgreSQL データベースのテーブルのコンマ区切りリストを設定します。 @@ -186,15 +186,15 @@ materialized_postgresql_tables_list = 'table1(co1, col2),table2,table3(co3, col5 デフォルト値: 空リスト。空リストの場合、PostgreSQL データベース全体がレプリケートされます。 -### `materialized_postgresql_schema` +### `materialized_postgresql_schema` {#materialized-postgresql-schema} デフォルト値: 空文字列(デフォルトスキーマが使用されます)。 -### `materialized_postgresql_schema_list` +### `materialized_postgresql_schema_list` {#materialized-postgresql-schema-list} デフォルト値: 空リスト(デフォルトスキーマが使用されます)。 -### `materialized_postgresql_max_block_size` +### `materialized_postgresql_max_block_size` {#materialized-postgresql-max-block-size} PostgreSQL データベースのテーブルにデータをフラッシュする前に、メモリ内に蓄積する行数を設定します。 @@ -204,11 +204,11 @@ PostgreSQL データベースのテーブルにデータをフラッシュする デフォルト値: `65536`。 -### `materialized_postgresql_replication_slot` +### `materialized_postgresql_replication_slot` {#materialized-postgresql-replication-slot} ユーザーが作成したレプリケーションスロットです。`materialized_postgresql_snapshot` と一緒に使用する必要があります。 -### `materialized_postgresql_snapshot` +### `materialized_postgresql_snapshot` {#materialized-postgresql-snapshot} スナップショットを識別する文字列であり、このスナップショットから [PostgreSQL テーブルの初回ダンプ](../../engines/database-engines/materialized-postgresql.md) が実行されます。`materialized_postgresql_replication_slot` と一緒に使用する必要があります。 @@ -226,7 +226,7 @@ SELECT * FROM database1.table1; ALTER DATABASE postgres_database MODIFY SETTING materialized_postgresql_max_block_size = <新しいサイズ>; ``` -### `materialized_postgresql_use_unique_replication_consumer_identifier` +### `materialized_postgresql_use_unique_replication_consumer_identifier` {#materialized_postgresql_use_unique_replication_consumer_identifier} レプリケーション用に一意のレプリケーションコンシューマ識別子を使用します。デフォルト: `0`。 `1` に設定すると、同じ `PostgreSQL` テーブルを参照する複数の `MaterializedPostgreSQL` テーブルを設定できるようになります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md index 0d96fca92b6..f2628f548d6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/mysql.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MySQL データベースエンジン +# MySQL データベースエンジン {#mysql-database-engine} @@ -26,7 +26,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -65,7 +65,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') -## グローバル変数のサポート +## グローバル変数のサポート {#global-variables-support} 互換性を高めるために、グローバル変数を MySQL 互換の `@@identifier` 形式で参照できます。 @@ -85,7 +85,7 @@ SELECT @@version; ``` -## 使用例 +## 使用例 {#examples-of-use} MySQL のテーブル: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md index 83bb0870368..85be4e88481 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# PostgreSQL +# PostgreSQL {#postgresql} リモート [PostgreSQL](https://www.postgresql.org) サーバー上のデータベースに接続できます。ClickHouse と PostgreSQL 間でデータをやり取りするために、読み取りおよび書き込み操作(`SELECT` および `INSERT` クエリ)をサポートします。 @@ -19,7 +19,7 @@ doc_type: 'guide' -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE test_database @@ -56,7 +56,7 @@ ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use -## 利用例 +## 利用例 {#examples-of-use} ClickHouse 上のデータベースが PostgreSQL サーバーとデータを交換する例: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md index 11660d30875..474e08d08d4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md @@ -9,7 +9,7 @@ doc_type: "reference" -# Replicated +# Replicated {#replicated} このエンジンは [Atomic](../../engines/database-engines/atomic.md) エンジンをベースとしています。ZooKeeper に書き込まれる DDL ログを介したメタデータのレプリケーションをサポートしており、特定のデータベースに対するすべてのレプリカで実行されます。 @@ -17,7 +17,7 @@ doc_type: "reference" -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE testdb [UUID '...'] ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...] @@ -54,7 +54,7 @@ CREATE DATABASE testdb [UUID '...'] ENGINE = Replicated('zoo_path', 'shard_name' -## 使用例 +## 使用例 {#usage-example} 3 つのホストを持つクラスターの作成: @@ -153,7 +153,7 @@ node2 :) SELECT materialize(hostName()) AS host, groupArray(n) FROM r.d GROUP BY ``` -## 設定 +## 設定 {#settings} サポートされている設定は次のとおりです: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md index 949076750dc..9961eeeabea 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md @@ -12,7 +12,7 @@ import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -# Shared データベースエンジン +# Shared データベースエンジン {#shared-database-engine} `Shared` データベースエンジンは、Shared Catalog と連携して、[`SharedMergeTree`](/cloud/reference/shared-merge-tree) などのステートレスなテーブルエンジンを使用するデータベースを管理します。 これらのテーブルエンジンは永続的な状態をディスクに書き込まず、動的なコンピュート環境と互換性があります。 @@ -30,7 +30,7 @@ ClickHouse Cloud における `Shared` データベースエンジンは、ロ -## 構文 +## 構文 {#syntax} エンドユーザーが Shared Catalog と Shared データベースエンジンを利用する際に、特別な設定は必要ありません。データベースの作成手順は従来どおりです。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md index ec3f790a4fe..86e191d2bbb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md @@ -10,13 +10,13 @@ doc_type: 'reference' -# SQLite +# SQLite {#sqlite} [SQLite](https://www.sqlite.org/index.html) データベースに接続し、`INSERT` および `SELECT` クエリを実行して、ClickHouse と SQLite 間でデータを交換できるようにします。 -## データベースの作成 +## データベースの作成 {#creating-a-database} ```sql CREATE DATABASE sqlite_database @@ -46,7 +46,7 @@ SQLite には、サービスとしての管理(起動スクリプトなど) -## 使用例 +## 使用例 {#usage-example} SQLite に接続された ClickHouse のデータベース: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/index.md index 2923e5a08cb..26eb7a236a0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/index.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# テーブルエンジン +# テーブルエンジン {#table-engines} テーブルエンジン(テーブルの種類)は、次の点を決定します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md index c0b4b97b07e..9f113595864 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md @@ -7,15 +7,11 @@ title: 'ExternalDistributed テーブルエンジン' doc_type: 'reference' --- - - -# ExternalDistributed テーブルエンジン +# ExternalDistributed テーブルエンジン {#externaldistributed-table-engine} `ExternalDistributed` エンジンを使用すると、リモートサーバー上の MySQL または PostgreSQL データベースに保存されているデータに対して `SELECT` クエリを実行できます。引数として [MySQL](../../../engines/table-engines/integrations/mysql.md) または [PostgreSQL](../../../engines/table-engines/integrations/postgresql.md) エンジンを指定できるため、シャーディングが可能です。 - - -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -42,8 +38,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `user` — ユーザー名。 * `password` — ユーザーのパスワード。 - -## 実装の詳細 +## 実装の詳細 {#implementation-details} 複数レプリカ構成をサポートしており、レプリカは `|` で、シャードは `,` で区切って列挙する必要があります。例えば次のようになります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md index 339f3533e35..9bc1782155d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md @@ -9,14 +9,14 @@ doc_type: 'reference' -# ArrowFlight テーブルエンジン +# ArrowFlight テーブルエンジン {#arrowflight-table-engine} ArrowFlight テーブルエンジンを使用すると、ClickHouse は [Apache Arrow Flight](https://arrow.apache.org/docs/format/Flight.html) プロトコル経由でリモートのデータセットに対してクエリを実行できます。 この統合により、ClickHouse は外部の Flight 対応サーバーから、列指向の Arrow 形式で高いパフォーマンスでデータを取得できます。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) (その場合、Arrow Flight サーバー側で未認証アクセスが許可されている必要があります)。 -## 使用例 +## 使用例 {#usage-example} この例では、リモートの Arrow Flight サーバーからデータを読み込むテーブルを作成する方法を示します。 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..3fd28dfe261 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,13 +7,9 @@ title: 'AzureQueue テーブルエンジン' doc_type: 'reference' --- +# AzureQueue テーブルエンジン {#azurequeue-table-engine} - -# 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} @@ -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)を参照してください。 **例** @@ -45,22 +41,58 @@ ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1; SETTINGS mode = 'unordered' ``` +## 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} -## 設定 {#settings} +宛先が別の Azure コンテナーである場合に、正常に処理されたファイルを移動するための Azure Blob Storage 接続文字列。 -サポートされている設定は`S3Queue`テーブルエンジンと同じですが、`s3queue_`プレフィックスは付きません。[設定の完全なリスト](../../../engines/table-engines/integrations/s3queue.md#settings)を参照してください。 -テーブルに設定されている設定のリストを取得するには、`system.azure_queue_settings`テーブルを使用します。`24.10`から利用可能です。 +指定可能な値: +* 文字列。 -## Description {#description} +デフォルト値: 空文字列。 -`SELECT`はストリーミングインポートにはあまり有用ではありません(デバッグを除く)。各ファイルは一度しかインポートできないためです。[マテリアライズドビュー](../../../sql-reference/statements/create/view.md)を使用してリアルタイム処理を作成する方が実用的です。これを行うには: +### `after_processing_move_container` {#after_processing_move_container} -1. エンジンを使用してS3の指定されたパスから読み取るテーブルを作成し、それをデータストリームとして扱います。 -2. 必要な構造を持つテーブルを作成します。 -3. エンジンからデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 +移動先が別の Azure コンテナである場合に、正常に処理されたファイルを移動する移動先コンテナ名。 -`MATERIALIZED VIEW`がエンジンに接続されると、バックグラウンドでデータの収集が開始されます。 +指定可能な値: + +* 文字列。 + +デフォルト値: 空文字列。 + +例: + +```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} + +`SELECT` は、各ファイルを 1 回しかインポートできないため(デバッグ用途を除き)ストリーミングインポートにはあまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使用してリアルタイム処理フローを作成する方が実用的です。これを行うには、次のようにします。 + +1. エンジンを使用して、S3 内の指定パスからデータを取り込むテーブルを作成し、それをデータストリームとみなします。 +2. 目的の構造を持つテーブルを作成します。 +3. エンジンからのデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 + +`MATERIALIZED VIEW` をエンジンと関連付けると、バックグラウンドでデータの取り込みを開始します。 例: @@ -79,61 +111,59 @@ CREATE MATERIALIZED VIEW consumer TO stats SELECT * FROM stats ORDER BY key; ``` - ## 仮想カラム {#virtual-columns} -- `_path` — ファイルへのパス -- `_file` — ファイル名 - -仮想カラムの詳細については、[こちら](../../../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 +171,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +行 1: ────── hostname: clickhouse event_date: 2024-12-16 @@ -156,6 +186,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/azureBlobStorage.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md index c07db77f886..72d6c5b2374 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# AzureBlobStorage テーブルエンジン +# AzureBlobStorage テーブルエンジン {#azureblobstorage-table-engine} このエンジンは、[Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) エコシステムとの統合機能を提供します。 -## テーブルを作成する +## テーブルを作成する {#create-table} ```sql CREATE TABLE azure_blob_storage_table (name String, value UInt32) @@ -24,7 +24,7 @@ CREATE TABLE azure_blob_storage_table (name String, value UInt32) [SETTINGS ...] ``` -### エンジンパラメータ +### エンジンパラメータ {#engine-parameters} * `endpoint` — コンテナおよびプレフィックスを含む Azure Blob Storage のエンドポイント URL。使用する認証方式で必要な場合は、任意で account_name を含めることもできます(`http://azurite1:{port}/[account_name]{container_name}/{data_prefix}`)。あるいは、これらのパラメータを storage_account_url、account_name、container を用いて個別に指定することもできます。プレフィックスを指定する場合は、endpoint を使用する必要があります。 * `endpoint_contains_account_name` - endpoint に account_name が含まれているかどうかを指定するためのフラグです。これは特定の認証方式でのみ必要となります(デフォルト: true)。 @@ -70,7 +70,7 @@ SELECT * FROM test_table; -## 認証 +## 認証 {#authentication} 現在、認証方法は 3 つあります: @@ -78,7 +78,7 @@ SELECT * FROM test_table; * `SAS Token` — `endpoint`、`connection_string`、または `storage_account_url` を指定することで利用できます。URL 内に '?' が含まれていることで識別されます。例については [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage#using-shared-access-signatures-sas-sas-tokens) を参照してください。 * `Workload Identity` — `endpoint` または `storage_account_url` を指定することで利用できます。設定で `use_workload_identity` パラメータが指定されている場合、認証には [workload identity](https://github.com/Azure/azure-sdk-for-cpp/tree/main/sdk/identity/azure-identity#authenticate-azure-hosted-applications) が使用されます。 -### データキャッシュ +### データキャッシュ {#data-cache} `Azure` テーブルエンジンはローカルディスク上でのデータキャッシュをサポートします。 ファイルシステムキャッシュの設定オプションと利用方法については、この [セクション](/operations/storing-data.md/#using-local-cache) を参照してください。 @@ -107,13 +107,13 @@ SETTINGS filesystem_cache_name = 'cache_for_azure', enable_filesystem_cache = 1; 2. ClickHouse の `storage_configuration` セクションで定義されたキャッシュ設定(およびキャッシュストレージ)を再利用します。詳細は[こちら](/operations/storing-data.md/#using-local-cache)を参照してください。 -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — 任意です。ほとんどの場合、パーティションキーは不要であり、必要な場合でも月単位より細かいパーティションキーが必要になることは通常ありません。パーティショニングは(ORDER BY 式とは対照的に)クエリの高速化には寄与しません。パーティションを細かくし過ぎてはいけません。データをクライアント識別子やクライアント名でパーティション分割しないでください(代わりに、クライアント識別子または名前を ORDER BY 式の先頭のカラムにします)。 月単位でパーティショニングするには、`toYYYYMM(date_column)` 式を使用します。ここで `date_column` は型が [Date](/sql-reference/data-types/date.md) の日付カラムです。ここでのパーティション名は `"YYYYMM"` 形式になります。 -#### パーティション戦略 +#### パーティション戦略 {#partition-strategy} `WILDCARD`(デフォルト):ファイルパス内の `{_partition_id}` ワイルドカードを実際のパーティションキーに置き換えます。読み取りはサポートされていません。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md index ced4221a56e..27330a45065 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# DeltaLake テーブルエンジン +# DeltaLake テーブルエンジン {#deltalake-table-engine} このエンジンは、Amazon S3 上に存在する既存の [Delta Lake](https://github.com/delta-io/delta) テーブルとの読み取り専用の連携を提供します。 -## テーブルを作成する +## テーブルを作成する {#create-table} Delta Lake テーブルはあらかじめ S3 上に存在している必要があり、このコマンドでは新しいテーブルを作成するための DDL パラメータは指定できません。 @@ -55,7 +55,7 @@ CREATE TABLE deltalake ENGINE=DeltaLake('http://mars-doc-test.s3.amazonaws.com/c CREATE TABLE deltalake ENGINE=DeltaLake(deltalake_conf, filename = 'test_table') ``` -### データキャッシュ +### データキャッシュ {#data-cache} `Iceberg` テーブルエンジンおよびテーブル関数は、`S3`、`AzureBlobStorage`、`HDFS` ストレージと同様に、データキャッシュをサポートします。詳細は[こちら](../../../engines/table-engines/integrations/s3.md#data-cache)を参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md index b4bcbbdefcf..a825a735218 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - -# EmbeddedRocksDB テーブルエンジン +# EmbeddedRocksDB テーブルエンジン {#embeddedrocksdb-table-engine} このエンジンを使用すると、ClickHouse を [RocksDB](http://rocksdb.org/) と統合できます。 - - -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,8 +56,7 @@ ENGINE = EmbeddedRocksDB PRIMARY KEY key ``` - -## メトリクス +## メトリクス {#metrics} RocksDB の統計情報を提供する `system.rocksdb` というテーブルもあります。 @@ -76,8 +72,7 @@ FROM system.rocksdb └───────────────────────────┴───────┘ ``` - -## 設定 +## 設定 {#configuration} `config` を使用して、[rocksdb の任意のオプション](https://github.com/facebook/rocksdb/wiki/Option-String-and-Option-Map) を変更することもできます。 @@ -107,10 +102,9 @@ FROM system.rocksdb `optimize_trivial_approximate_count_query = 1` を設定します。また、この設定は EmbeddedRocksDB エンジンにおける `system.tables` にも影響し、 `total_rows` および `total_bytes` の近似値を表示するには、この設定を有効にしておく必要があります。 +## サポートされている操作 {#supported-operations} -## サポートされている操作 - -### 挿入 +### 挿入 {#inserts} 新しい行が `EmbeddedRocksDB` に挿入されると、キーがすでに存在している場合は値が更新され、存在しない場合は新しいキーが作成されます。 @@ -120,7 +114,7 @@ FROM system.rocksdb INSERT INTO test VALUES ('some key', 1, 'value', 3.2); ``` -### 削除 +### 削除 {#deletes} 行は `DELETE` クエリまたは `TRUNCATE` クエリを使用して削除できます。 @@ -136,7 +130,7 @@ ALTER TABLE test DELETE WHERE key LIKE 'some%' AND v1 > 1; テーブル test の全データを削除; ``` -### 更新 +### 更新 {#updates} 値は `ALTER TABLE` クエリを使用して更新できます。主キーは変更できません。 @@ -144,7 +138,7 @@ ALTER TABLE test DELETE WHERE key LIKE 'some%' AND v1 > 1; ALTER TABLE test UPDATE v1 = v1 * 10 + 2 WHERE key LIKE 'some%' AND v3 > 3.1; ``` -### 結合 +### 結合 {#joins} EmbeddedRocksDB テーブルでは、特殊な `direct` 結合がサポートされています。 この `direct` 結合ではメモリ内にハッシュテーブルを構築せず、 @@ -163,9 +157,9 @@ SET join_algorithm = 'direct, hash' `join_algorithm` が `direct, hash` に設定されている場合、可能なときは direct join が使用され、それ以外の場合は hash join が使用されます。 ::: -#### 例 +#### 例 {#example} -##### EmbeddedRocksDB テーブルを作成してデータを投入する +##### EmbeddedRocksDB テーブルを作成してデータを投入する {#create-and-populate-an-embeddedrocksdb-table} ```sql CREATE TABLE rdb @@ -187,7 +181,7 @@ INSERT INTO rdb FROM numbers_mt(10); ``` -##### `rdb` テーブルと結合するためのテーブルを作成し、データを投入する +##### `rdb` テーブルと結合するためのテーブルを作成し、データを投入する {#create-and-populate-a-table-to-join-with-table-rdb} ```sql CREATE TABLE t2 @@ -202,13 +196,13 @@ INSERT INTO t2 SELECT number AS k FROM numbers_mt(10) ``` -##### 結合アルゴリズムを `direct` に設定 +##### 結合アルゴリズムを `direct` に設定 {#set-the-join-algorithm-to-direct} ```sql SET join_algorithm = 'direct' ``` -##### INNER JOIN の例 +##### INNER JOIN の例 {#an-inner-join} ```sql SELECT * @@ -233,7 +227,7 @@ ORDER BY key ASC └─────┴─────────┴────────┴────────┘ ``` -### JOIN の詳細情報 +### JOIN の詳細情報 {#more-information-on-joins} * [`join_algorithm` 設定](/operations/settings/settings.md#join_algorithm) * [JOIN 句](/sql-reference/statements/select/join.md) diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md index c5cc68f30aa..88c01de61de 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# HDFS テーブルエンジン +# HDFS テーブルエンジン {#hdfs-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 使用方法 +## 使用方法 {#usage} ```sql ENGINE = HDFS(URI, format) @@ -34,7 +34,7 @@ ENGINE = HDFS(URI, format) [Formats](/sql-reference/formats#formats-overview) セクションに一覧されています。 * [PARTITION BY expr] -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — 任意です。ほとんどの場合、パーティションキーは不要であり、必要な場合でも、一般的には月単位より細かいパーティションキーは不要です。パーティショニングは(ORDER BY 式とは対照的に)クエリを高速化しません。細かすぎるパーティショニングは決して行うべきではありません。クライアント ID や名前でデータをパーティションしないでください(代わりに、ORDER BY 式の先頭のカラムとしてクライアント ID または名前を指定してください)。 @@ -68,7 +68,7 @@ SELECT * FROM hdfs_engine_table LIMIT 2 ``` -## 実装の詳細 +## 実装の詳細 {#implementation-details} * 読み取りと書き込みは並列に実行できます。 * 次の機能はサポートされません: @@ -136,7 +136,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV') ``` -## 設定 +## 設定 {#configuration} GraphiteMergeTree と同様に、HDFS エンジンでは ClickHouse の設定ファイルを用いた拡張的な設定が可能です。使用できる設定キーは 2 種類あり、グローバル (`hdfs`) とユーザーレベル (`hdfs_*`) です。最初にグローバル設定が適用され、その後に(存在する場合は)ユーザーレベルの設定が適用されます。 @@ -154,9 +154,9 @@ GraphiteMergeTree と同様に、HDFS エンジンでは ClickHouse の設定フ ``` -### 設定オプション +### 設定オプション {#configuration-options} -#### libhdfs3 がサポートする項目 +#### libhdfs3 がサポートする項目 {#supported-by-libhdfs3} | **parameter** | **default value** | @@ -230,7 +230,7 @@ libhdfs3 の制限により、古典的な方式のみがサポートされて `hadoop_kerberos_keytab`、`hadoop_kerberos_principal` または `hadoop_security_kerberos_ticket_cache_path` が指定されている場合、Kerberos 認証が使用されます。この場合、`hadoop_kerberos_keytab` と `hadoop_kerberos_principal` は必須となります。 -## HDFS NameNode HA サポート +## HDFS NameNode HA サポート {#namenode-ha} libhdfs3 は HDFS NameNode の HA をサポートします。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md index 40d5b433858..b727f9daf34 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md @@ -9,22 +9,19 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# Hive テーブルエンジン {#hive-table-engine} -# Hive テーブルエンジン - - + Hive エンジンを使用すると、HDFS 上の Hive テーブルに対して `SELECT` クエリを実行できます。現在、以下の入力フォーマットをサポートしています。 -- Text: `binary` を除く単純なスカラー列型のみをサポート - -- ORC: `char` を除く単純なスカラー列型をサポートし、複合型は `array` のみサポート - -- Parquet: すべての単純なスカラー列型をサポートし、複合型は `array` のみサポート +* Text: `binary` を除く単純なスカラー列型のみをサポート +* ORC: `char` を除く単純なスカラー列型をサポートし、複合型は `array` のみサポート +* Parquet: すべての単純なスカラー列型をサポートし、複合型は `array` のみサポート -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -52,10 +49,9 @@ PARTITION BY expr * `table` — リモートテーブル名。 +## 使用例 {#usage-example} -## 使用例 - -### HDFS ファイルシステムでローカルキャッシュを使用する方法 +### HDFS ファイルシステムでローカルキャッシュを使用する方法 {#how-to-use-local-cache-for-hdfs-filesystem} リモートファイルシステムに対しては、ローカルキャッシュを有効にすることを強く推奨します。ベンチマークでは、キャッシュありの場合はほぼ 2 倍高速になることが示されています。 @@ -75,9 +71,9 @@ PARTITION BY expr * limit_size: 必須。ローカルキャッシュファイルの最大サイズ (バイト単位) です。 * bytes_read_before_flush: リモートファイルシステムからファイルをダウンロードする際に、ローカルファイルシステムへフラッシュするまでの読み取りバイト数を制御します。デフォルト値は 1MB です。 -### ORC 入力フォーマットで Hive テーブルをクエリする +### ORC 入力フォーマットで Hive テーブルをクエリする {#query-hive-table-with-orc-input-format} -#### Hive でテーブルを作成する +#### Hive でテーブルを作成する {#create-table-in-hive} ```text hive > CREATE TABLE `test`.`test_orc`( @@ -125,8 +121,7 @@ OK Time taken: 0.295 seconds, Fetched: 1 row(s) ``` -#### ClickHouse でテーブルを作成 - +#### ClickHouse でテーブルを作成 {#create-table-in-clickhouse} 次の ClickHouse テーブルは、上で作成した Hive テーブルからデータを取得します: @@ -199,9 +194,9 @@ day: 2021-09-18 1 rows in set. Elapsed: 0.078 sec. ``` -### Parquet 入力フォーマットの Hive テーブルをクエリする +### Parquet 入力フォーマットの Hive テーブルをクエリする {#query-hive-table-with-parquet-input-format} -#### Hive でテーブルを作成する +#### Hive でテーブルを作成する {#create-table-in-hive-1} ```text hive > @@ -241,7 +236,6 @@ OK Time taken: 0.51 seconds ``` - hive > insert into test.test_parquet partition(day='2021-09-18') select 1, 2, 3, 4, 5, 6.11, 7.22, 8.333, current_timestamp(), current_date(), 'hello world', 'hello world', 'hello world', true, 'hello world', array(1, 2, 3), array('hello world', 'hello world'), array(float(1.1), float(1.2)), array(array(1, 2), array(3, 4)), array(array('a', 'b'), array('c', 'd')), array(array(float(1.11), float(2.22)), array(float(3.33), float(4.44))); OK 処理時間: 36.025秒 @@ -329,7 +323,6 @@ day: 2021-09-18 #### Hive でテーブルを作成する - ```text hive > CREATE TABLE `test`.`test_text`( @@ -377,7 +370,7 @@ OK Time taken: 0.624 seconds, Fetched: 1 row(s) ``` -#### ClickHouse でテーブルを作成する +#### ClickHouse でテーブルを作成する {#create-table-in-hive-2} 上で作成した Hive テーブルからデータを取得する ClickHouse テーブル: @@ -416,7 +409,6 @@ SETTINGS input_format_skip_unknown_fields = 1, input_format_with_names_use_heade Query id: 55b79d35-56de-45b9-8be6-57282fbf1f44 ``` - Row 1: ────── f_tinyint: 1 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md index 727502e2e99..594a2acc67a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Hudi テーブルエンジン +# Hudi テーブルエンジン {#hudi-table-engine} このエンジンは、Amazon S3 上の既存の Apache [Hudi](https://hudi.apache.org/) テーブルと読み取り専用で統合する機能を提供します。 -## テーブルを作成 +## テーブルを作成 {#create-table} Hudi テーブルはあらかじめ S3 上に存在している必要がある点に注意してください。このコマンドでは、新しいテーブルを作成するための DDL パラメータを指定することはできません。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md index 406ce597883..34ea2f0dff7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md @@ -23,7 +23,7 @@ Iceberg Table Engine も利用可能ですが、いくつかの制限があり -## テーブルを作成 +## テーブルを作成 {#create-table} Iceberg テーブルはあらかじめストレージ上に存在している必要がある点に注意してください。このコマンドには、新しいテーブルを作成するための DDL パラメータを指定できません。 @@ -42,14 +42,14 @@ CREATE TABLE iceberg_table_local ``` -## エンジン引数 +## エンジン引数 {#engine-arguments} 引数の説明は、それぞれ `S3`、`AzureBlobStorage`、`HDFS` および `File` エンジンにおける引数の説明と同様です。 `format` は Iceberg テーブル内のデータファイルの形式を表します。 エンジンパラメータは [Named Collections](../../../operations/named-collections.md) を使用して指定できます。 -### 例 +### 例 {#example} ```sql CREATE TABLE iceberg_table ENGINE=IcebergS3('http://test.s3.amazonaws.com/clickhouse-bucket/test_table', 'test', 'test') @@ -105,7 +105,7 @@ ClickHouse は Iceberg テーブルに対するタイムトラベルをサポー -## 削除行を含むテーブルの処理 +## 削除行を含むテーブルの処理 {#deleted-rows} 現在サポートされているのは、[position deletes](https://iceberg.apache.org/spec/#position-delete-files) を使用する Iceberg テーブルのみです。 @@ -114,7 +114,7 @@ ClickHouse は Iceberg テーブルに対するタイムトラベルをサポー * [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files) * [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors)(v3 で導入) -### 基本的な使用方法 +### 基本的な使用方法 {#basic-usage} ```sql SELECT * FROM example_table ORDER BY 1 @@ -128,7 +128,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 注意: 同じクエリ内で `iceberg_timestamp_ms` パラメータと `iceberg_snapshot_id` パラメータを同時に指定することはできません。 -### 重要な考慮事項 +### 重要な考慮事項 {#important-considerations} * **スナップショット** は通常、次のタイミングで作成されます: * 新しいデータがテーブルに書き込まれたとき @@ -136,11 +136,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * **スキーマ変更によってスナップショットが作成されることは通常ない** — このため、スキーマ進化を行ったテーブルでタイムトラベルを使用する場合に特有の挙動が発生します。 -### シナリオ例 +### シナリオ例 {#example-scenarios} すべてのシナリオは Spark を用いて記述されています。これは、CH がまだ Iceberg テーブルへの書き込みをサポートしていないためです。 -#### シナリオ 1: 新しいスナップショットを伴わないスキーマ変更 +#### シナリオ 1: 新しいスナップショットを伴わないスキーマ変更 {#scenario-1} 次の一連の操作を考えてみます: @@ -200,7 +200,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * ts1 と ts2 の時点: 元の 2 列のみが表示される * ts3 の時点: 3 列すべてが表示され、1 行目の price 列は NULL になる -#### シナリオ 2: 履歴スキーマと現在のスキーマの差異 +#### シナリオ 2: 履歴スキーマと現在のスキーマの差異 {#scenario-2} 現在時点を指定したタイムトラベルクエリでは、現在のテーブルとは異なるスキーマが表示される場合があります: @@ -243,7 +243,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 これは、`ALTER TABLE` が新しいスナップショットを作成せず、現在のテーブルについては Spark がスナップショットではなく最新のメタデータファイルから `schema_id` の値を取得するために発生します。 -#### シナリオ 3: 過去と現在のスキーマの差異 +#### シナリオ 3: 過去と現在のスキーマの差異 {#scenario-3} 2つ目の制約は、タイムトラベルを行っても、テーブルに最初のデータが書き込まれる前の状態は取得できないという点です。 @@ -265,11 +265,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 ClickHouse における挙動は Spark と同じです。概念的には Spark の SELECT クエリを ClickHouse の SELECT クエリに置き換えて考えれば、同じように動作します。 -## メタデータファイルの解決 +## メタデータファイルの解決 {#metadata-file-resolution} ClickHouse で `Iceberg` テーブルエンジンを使用する場合、システムは Iceberg テーブル構造を記述する適切な metadata.json ファイルを特定する必要があります。以下は、この解決プロセスの概要です。 -### 候補の検索 +### 候補の検索 {#candidate-search} 1. **パスの直接指定**: @@ -286,7 +286,7 @@ ClickHouse で `Iceberg` テーブルエンジンを使用する場合、シス * 上記いずれの設定も指定されていない場合、`metadata` ディレクトリ内のすべての `.metadata.json` ファイルが候補になります -### 最新のファイルの選択 +### 最新のファイルの選択 {#most-recent-file} 上記のルールで候補ファイルを特定した後、システムはその中で最も新しいものを決定します: 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..f275a7afcfd 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,51 @@ --- -description: '統合向けテーブルエンジンのドキュメント' -sidebar_label: '統合' +description: 'インテグレーション向けテーブルエンジンに関するドキュメント' +sidebar_label: '連携' sidebar_position: 40 slug: /engines/table-engines/integrations/ -title: '統合向けテーブルエンジン' +title: 'インテグレーション向けテーブルエンジン' doc_type: 'reference' --- +# 連携のためのテーブルエンジン {#table-engines-for-integrations} +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 - によって自動生成されます。 + YAML フロントマターのフィールド(slug、description、title)を元に生成されます。 - 誤りを見つけた場合は、対象ページの YAML フロントマターを編集してください。 + 誤りを見つけた場合は、該当ページの YAML フロントマターを編集してください。 */ } - {/*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 を介してリモートデータセットに対してクエリを実行できます。 | +| ページ | 概要 | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| [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) | このエンジンは、HDFS 上のデータを ClickHouse から管理できるようにすることで、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 固有の機能も備えています。 | +| [AzureQueue テーブルエンジン](/engines/table-engines/integrations/azure-queue) | このエンジンは Azure Blob Storage エコシステムとの統合機能を提供し、ストリーミングデータのインポートを可能にします。 | +| [S3Queue テーブルエンジン](/engines/table-engines/integrations/s3queue) | このエンジンは Amazon S3 エコシステムと統合されており、ストリーミングによるインポートを可能にします。Kafka エンジンや RabbitMQ エンジンと似ていますが、S3 固有の機能を備えています。 | +| [SQLite テーブルエンジン](/engines/table-engines/integrations/sqlite) | このエンジンは、SQLite との間でデータをインポートおよびエクスポートでき、ClickHouse から SQLite テーブルに対して直接クエリを実行することをサポートします。 | +| [YTsaurus テーブルエンジン](/engines/table-engines/integrations/ytsaurus) | YTsaurus クラスターからデータを取り込むためのテーブルエンジン。 | +| [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/jdbc.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md index 84e338b3832..04a8ac2dc66 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# JDBC テーブルエンジン +# JDBC テーブルエンジン {#jdbc-table-engine} @@ -27,7 +27,7 @@ JDBC 接続を実現するために、ClickHouse はデーモンとして実行 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -51,7 +51,7 @@ ENGINE = JDBC(datasource, external_database, external_table) * これらのパラメータは、[名前付きコレクション](operations/named-collections.md)を使用して指定することもできます。 -## 使用例 +## 使用例 {#usage-example} コンソールクライアントから MySQL サーバーに直接接続してテーブルを作成します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md index 591f990a11d..722a8726e12 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md @@ -11,7 +11,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# Kafka テーブルエンジン +# Kafka テーブルエンジン {#kafka-table-engine} :::tip ClickHouse Cloud をご利用の場合は、代わりに [ClickPipes](/integrations/clickpipes) の利用を推奨します。ClickPipes は、プライベートネットワーク接続のネイティブサポート、インジェスト処理とクラスタリソースを独立してスケールさせる機能、そして Kafka のストリーミングデータを ClickHouse に取り込むための包括的なモニタリング機能を提供します。 @@ -21,7 +21,7 @@ ClickHouse Cloud をご利用の場合は、代わりに [ClickPipes](/integrati - フォールトトレラントなストレージの構成。 - ストリームを利用可能になり次第処理。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -135,7 +135,7 @@ Kafka テーブルエンジンは[デフォルト値](/sql-reference/statements/ ::: -## 説明 +## 説明 {#description} 配信されたメッセージは自動的に追跡されるため、グループ内の各メッセージは 1 回だけカウントされます。データを 2 回取得したい場合は、別のグループ名でテーブルのコピーを作成してください。 @@ -186,7 +186,7 @@ Kafka テーブルエンジンは[デフォルト値](/sql-reference/statements/ `ALTER` を使用してターゲットテーブルを変更する場合は、ターゲットテーブルとビューからのデータとの不整合を避けるため、マテリアライズドビューを無効化することを推奨します。 -## 設定 +## 設定 {#configuration} GraphiteMergeTree と同様に、Kafka エンジンは ClickHouse の設定ファイルを用いた詳細な設定をサポートしています。使用できる設定キーは 2 種類あり、グローバル(`` の下)とトピックレベル(`` の下)です。まずグローバル設定が適用され、その後にトピックレベルの設定(存在する場合)が適用されます。 @@ -233,7 +233,7 @@ GraphiteMergeTree と同様に、Kafka エンジンは ClickHouse の設定フ 利用可能な設定オプションの一覧については、[librdkafka の configuration reference](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md) を参照してください。ClickHouse の設定では、ドットの代わりにアンダースコア(`_`)を使用します。たとえば、`check.crcs=true` は `true` に対応します。 -### Kerberos サポート +### Kerberos サポート {#kafka-kerberos-support} Kerberos 対応の Kafka を扱うには、`security_protocol` の子要素として `sasl_plaintext` を追加します。Kerberos のチケット授与チケット (TGT) が OS の機能によって取得・キャッシュされていれば十分です。 ClickHouse は keytab ファイルを使用して Kerberos 資格情報を管理できます。`sasl_kerberos_service_name`、`sasl_kerberos_keytab`、`sasl_kerberos_principal` の子要素を指定します。 @@ -276,7 +276,7 @@ Kafka エンジンは、ClickHouse でサポートされているすべての[ - 行ベースのフォーマットでは、1 つの Kafka メッセージ内の行数は `kafka_max_rows_per_message` の設定で制御できます。 - ブロックベースのフォーマットでは、ブロックをより小さな部分に分割することはできませんが、1 ブロック内の行数は共通設定 [max_block_size](/operations/settings/settings#max_block_size) によって制御できます。 -## ClickHouse Keeper にコミット済みオフセットを保存するエンジン +## ClickHouse Keeper にコミット済みオフセットを保存するエンジン {#engine-to-store-committed-offsets-in-clickhouse-keeper} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md index 9d30551efc8..d8f94e49658 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MaterializedPostgreSQL テーブルエンジン +# MaterializedPostgreSQL テーブルエンジン {#materializedpostgresql-table-engine} @@ -36,7 +36,7 @@ SET allow_experimental_materialized_postgresql_table=1 複数のテーブルが必要な場合は、テーブルエンジンではなく [MaterializedPostgreSQL](../../../engines/database-engines/materialized-postgresql.md) データベースエンジンを使用し、レプリケートするテーブルを指定する `materialized_postgresql_tables_list` 設定(将来的にはデータベースの `schema` も追加可能になる予定)を利用することを強く推奨します。これにより、CPU 使用量を抑えつつ、接続数およびリモート PostgreSQL データベース内のレプリケーションスロット数を減らすことができ、はるかに効率的になります。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64) @@ -65,7 +65,7 @@ PRIMARY KEY key; -## 仮想カラム +## 仮想カラム {#virtual-columns} * `_version` — トランザクションカウンター。型: [UInt64](../../../sql-reference/data-types/int-uint.md)。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md index 56b79eb09f0..69fa3f5efc1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# MongoDB テーブルエンジン +# MongoDB テーブルエンジン {#mongodb-table-engine} MongoDB エンジンは、リモートの [MongoDB](https://www.mongodb.com/) コレクションからデータを読み取るための、読み取り専用のテーブルエンジンです。 @@ -18,7 +18,7 @@ MongoDB v3.6 以降のサーバーのみがサポートされています。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -61,7 +61,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); | `oid_columns` | WHERE 句で `oid` として扱う列をカンマ区切りで指定します。既定では `_id` です。 | -## 型マッピング +## 型マッピング {#types-mappings} | MongoDB | ClickHouse | | ----------------------- | --------------------------------------------------- | @@ -78,7 +78,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); キーが MongoDB ドキュメント内に存在しない場合 (たとえばカラム名が一致しない場合)、デフォルト値または (カラムが Nullable の場合は) `NULL` が挿入されます。 -### OID +### OID {#oid} WHERE 句で `String` を `oid` として扱いたい場合は、テーブルエンジンの最後の引数にそのカラム名を指定します。 これは、MongoDB でデフォルトで `oid` 型を持つ `_id` カラムでレコードをクエリする際に必要になる場合があります。 @@ -132,7 +132,7 @@ SELECT count() FROM sample_oid WHERE another_oid_column = '67bf6cc40000000000ea4 ``` -## サポートされている句 +## サポートされている句 {#supported-clauses} 単純な式を含むクエリのみがサポートされます(例: `WHERE field = ORDER BY field2 LIMIT `)。 このような式は MongoDB のクエリ言語に変換され、サーバー側で実行されます。 @@ -158,7 +158,7 @@ SELECT * FROM mongo_table WHERE date = '2024-01-01'::Date OR date = toDate('2024 ::: -## 使用例 +## 使用例 {#usage-example} MongoDB に [sample_mflix](https://www.mongodb.com/docs/atlas/sample-data/sample-mflix) データセットが読み込まれていることを前提とします diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md index 1f74c72fd6f..26f96d206c9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# MySQL テーブルエンジン +# MySQL テーブルエンジン {#mysql-table-engine} MySQL エンジンを使用すると、リモートの MySQL サーバー上に保存されているデータに対して `SELECT` および `INSERT` クエリを実行できます。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -67,7 +67,7 @@ CREATE TABLE test_replicas (id UInt32, name String, age UInt32, money UInt32) EN ``` -## 使用例 +## 使用例 {#usage-example} MySQL でテーブルを作成します: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md index 7b24cf139ee..bfed0ce9ab9 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md @@ -20,7 +20,7 @@ doc_type: 'guide' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -133,7 +133,7 @@ NATS サーバーの設定は、ClickHouse の設定ファイルに追加でき ``` -## 説明 +## 説明 {#description} 各メッセージは一度しか読み取れないため、(デバッグを除いて)メッセージの読み取りに `SELECT` を使ってもあまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使ってリアルタイムの処理フローを作成する方が実用的です。そのためには、次の手順を実行します。 @@ -198,7 +198,7 @@ NATS エンジンは、ClickHouse がサポートするすべての[フォーマ -## JetStream の使用 +## JetStream の使用 {#using-jetstream} NATS JetStream とともに NATS エンジンを使用する前に、NATS ストリームと永続プルコンシューマを作成する必要があります。これには、[NATS CLI](https://github.com/nats-io/natscli) パッケージに含まれる `nats` ユーティリティなどを使用できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md index 6bc95454554..587aa410d07 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# ODBC テーブルエンジン +# ODBC テーブルエンジン {#odbc-table-engine} @@ -22,7 +22,7 @@ ODBC 接続を安全に実装するために、ClickHouse は別のプログラ -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -51,7 +51,7 @@ ENGINE = ODBC(datasource, external_database, external_table) これらのパラメータは、[named collections](operations/named-collections.md) を使用して指定することもできます。 -## 使用例 +## 使用例 {#usage-example} **ODBC を介してローカルの MySQL インストールからデータを取得する** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md index d781104c93a..869f84bbdd5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# PostgreSQL テーブルエンジン +# PostgreSQL テーブルエンジン {#postgresql-table-engine} PostgreSQLエンジンを使用すると、リモートのPostgreSQLサーバーに保存されたデータに対して `SELECT` および `INSERT` クエリを実行できます。 @@ -23,7 +23,7 @@ ClickHouse Cloud ユーザーには、Postgres データを ClickHouse にスト -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -73,7 +73,7 @@ SELECT * FROM postgresql(postgres_creds, table='table1'); ``` -## 実装の詳細 +## 実装の詳細 {#implementation-details} PostgreSQL 側での `SELECT` クエリは、読み取り専用の PostgreSQL トランザクション内で `COPY (SELECT ...) TO STDOUT` として実行され、各 `SELECT` クエリの後にコミットされます。 @@ -121,9 +121,9 @@ PostgreSQL の辞書ソースではレプリカの優先度指定がサポート ``` -## 使用例 +## 使用例 {#usage-example} -### PostgreSQL のテーブル +### PostgreSQL のテーブル {#table-in-postgresql} ```text postgres=# CREATE TABLE "public"."test" ( @@ -146,7 +146,7 @@ postgresql> SELECT * FROM test; (1 row) ``` -### ClickHouse でテーブルを作成し、前述の PostgreSQL テーブルに接続する +### ClickHouse でテーブルを作成し、前述の PostgreSQL テーブルに接続する {#creating-table-in-clickhouse-and-connecting-to--postgresql-table-created-above} この例では、[PostgreSQL table engine](/engines/table-engines/integrations/postgresql.md) を使用して、ClickHouse テーブルを PostgreSQL テーブルに接続し、PostgreSQL データベースに対して SELECT 文および INSERT 文を実行します。 @@ -160,7 +160,7 @@ CREATE TABLE default.postgresql_table ENGINE = PostgreSQL('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### SELECT クエリを使用して PostgreSQL テーブルから ClickHouse テーブルへ初期データを挿入する +### SELECT クエリを使用して PostgreSQL テーブルから ClickHouse テーブルへ初期データを挿入する {#inserting-initial-data-from-postgresql-table-into-clickhouse-table-using-a-select-query} [postgresql テーブル関数](/sql-reference/table-functions/postgresql.md) は PostgreSQL から ClickHouse へデータをコピーします。これは、多くの場合、PostgreSQL ではなく ClickHouse 上でクエリや分析を実行することでデータのクエリパフォーマンスを向上させるため、あるいは PostgreSQL から ClickHouse へデータを移行するために使用されます。ここでは PostgreSQL から ClickHouse へデータをコピーするため、ClickHouse では MergeTree テーブルエンジンを使用したテーブルを作成し、名前を postgresql_copy とします。 @@ -180,7 +180,7 @@ INSERT INTO default.postgresql_copy SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### PostgreSQL テーブルから ClickHouse テーブルへの増分データ挿入 +### PostgreSQL テーブルから ClickHouse テーブルへの増分データ挿入 {#inserting-incremental-data-from-postgresql-table-into-clickhouse-table} 初回の挿入後に PostgreSQL テーブルと ClickHouse テーブルの間で継続的な同期を行う場合、ClickHouse 側で `WHERE` 句を使用して、タイムスタンプまたは一意のシーケンス ID に基づき、PostgreSQL に新たに追加されたデータのみを挿入できます。 @@ -198,7 +198,7 @@ SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postges_user', 'po WHERE int_id > maxIntID; ``` -### 生成された ClickHouse テーブルからデータを選択する +### 生成された ClickHouse テーブルからデータを選択する {#selecting-data-from-the-resulting-clickhouse-table} ```sql SELECT * FROM postgresql_copy WHERE str IN ('test'); @@ -210,7 +210,7 @@ SELECT * FROM postgresql_copy WHERE str IN ('test'); └────────────────┴──────┴────────┘ ``` -### デフォルト以外のスキーマを使用する +### デフォルト以外のスキーマを使用する {#using-non-default-schema} ```text postgres=# CREATE SCHEMA "nice.schema"; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md index 056cf863842..de3c7cff726 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# RabbitMQ テーブルエンジン +# RabbitMQ テーブルエンジン {#rabbitmq-table-engine} このエンジンを使用すると、ClickHouse を [RabbitMQ](https://www.rabbitmq.com) と統合できます。 @@ -20,7 +20,7 @@ doc_type: 'guide' -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -131,7 +131,7 @@ RabbitMQ サーバーの設定は、ClickHouse の設定ファイルに追加す ``` -## 説明 +## 説明 {#description} 各メッセージは一度しか読み取れないため、メッセージの読み取りに `SELECT` を使うのは(デバッグ用途を除き)あまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使ってリアルタイム処理用のパイプラインを作成する方が実用的です。そのためには次の手順を実行します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md index 57be2cf1b88..2a9593e4531 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md @@ -9,13 +9,13 @@ doc_type: 'guide' -# Redis テーブルエンジン +# Redis テーブルエンジン {#redis-table-engine} このエンジンにより、ClickHouse を [Redis](https://redis.io/) と連携させることができます。Redis はキー・バリュー(KV)モデルを採用しているため、`where k=xx` や `where k in (xx, xx)` のようなポイントアクセスのクエリに限定して利用することを強く推奨します。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -47,7 +47,7 @@ PRIMARY KEY(primary_key_name); ::: -## 使用例 +## 使用例 {#usage-example} 単純な引数を用いて、`Redis` エンジンを使用する ClickHouse のテーブルを作成します: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md index 358736967cf..a8a14dbbf45 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# S3 table engine +# S3 table engine {#s3-table-engine} このエンジンは、[Amazon S3](https://aws.amazon.com/s3/) エコシステムと連携します。このエンジンは [HDFS](/engines/table-engines/integrations/hdfs) エンジンと類似していますが、S3 固有の機能を備えています。 -## 例 +## 例 {#example} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -35,7 +35,7 @@ SELECT * FROM s3_engine_table LIMIT 2; ``` -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -44,7 +44,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) [SETTINGS ...] ``` -### エンジンパラメータ +### エンジンパラメータ {#parameters} * `path` — ファイルへのパスを含むバケット URL。読み取り専用モードでは `*`、`**`、`?`、`{abc,def}`、`{N..M}` というワイルドカードをサポートします。ここで `N`、`M` は数値、`'abc'`、`'def'` は文字列です。詳細は[下記](#wildcards-in-path)を参照してください。 * `NOSIGN` - 認証情報の代わりにこのキーワードが指定された場合、すべてのリクエストは署名されません。 @@ -55,7 +55,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) * `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/) を指定できます。 -### データキャッシュ +### データキャッシュ {#data-cache} `S3` テーブルエンジンはローカルディスク上でのデータキャッシュをサポートします。 ファイルシステムキャッシュの設定オプションと使用方法については、この[セクション](/operations/storing-data.md/#using-local-cache)を参照してください。 @@ -86,13 +86,13 @@ SETTINGS filesystem_cache_name = 'cache_for_s3', enable_filesystem_cache = 1; 2. ClickHouse の `storage_configuration` セクションで設定されたキャッシュ構成(およびそれに伴うキャッシュストレージ)を再利用します。詳しくは[こちら](/operations/storing-data.md/#using-local-cache)を参照してください。 -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — 省略可能です。ほとんどの場合、パーティションキーは不要であり、必要な場合でも月単位より細かいパーティションキーが求められることはほぼありません。パーティション分割は(ORDER BY 式とは対照的に)クエリを高速化しません。過度に細かいパーティション分割は避けてください。データをクライアント識別子や名前でパーティション分割しないでください(代わりに、ORDER BY 式の最初の列としてクライアント識別子または名前を指定してください)。 月単位でパーティション分割するには、`date_column` が型 [Date](/sql-reference/data-types/date.md) の日付を持つ列であるとき、`toYYYYMM(date_column)` 式を使用します。ここでのパーティション名は `"YYYYMM"` 形式になります。 -#### パーティション戦略 +#### パーティション戦略 {#partition-strategy} `WILDCARD`(デフォルト): ファイルパス内の `{_partition_id}` ワイルドカードを実際のパーティションキーに置き換えます。読み取りはサポートされていません。 @@ -139,7 +139,7 @@ arthur :) select _path, * from t_03363_parquet; └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘ ``` -### パーティション化されたデータのクエリ実行 +### パーティション化されたデータのクエリ実行 {#querying-partitioned-data} この例では、ClickHouse と MinIO を統合した [docker compose recipe](https://github.com/ClickHouse/examples/tree/5fdc6ff72f4e5137e23ea075c88d3f44b0202490/docker-compose-recipes/recipes/ch-and-minio-S3) を使用します。エンドポイントと認証情報の値を差し替えることで、S3 を使って同じクエリを再現できます。 @@ -159,7 +159,7 @@ ClickHouse のデータセットは非常に大きくなることが多く、ま 転送する、すなわちパーティション分割して書き込むのが理にかなっています。 ::: -#### テーブルを作成する +#### テーブルを作成する {#create-the-table} ```sql CREATE TABLE p @@ -177,13 +177,13 @@ ENGINE = S3( PARTITION BY column3 ``` -#### データを挿入する +#### データを挿入する {#insert-data} ```sql INSERT INTO p VALUES (1, 2, 3), (3, 2, 1), (78, 43, 45) ``` -#### パーティション 3 からの選択 +#### パーティション 3 からの選択 {#select-from-partition-3} :::tip このクエリは S3 テーブル関数を使用します。 @@ -200,7 +200,7 @@ FROM s3('http://minio:10000/clickhouse//test_3.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### パーティション1からの SELECT +#### パーティション1からの SELECT {#select-from-partition-1} ```sql SELECT * @@ -213,7 +213,7 @@ FROM s3('http://minio:10000/clickhouse//test_1.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### パーティション45からのSELECT +#### パーティション45からのSELECT {#select-from-partition-45} ```sql SELECT * @@ -226,7 +226,7 @@ FROM s3('http://minio:10000/clickhouse//test_45.csv', 'minioadmin', 'minioadminp └────┴────┴────┘ ``` -#### 制限事項 +#### 制限事項 {#limitation} つい `Select * from p` を実行したくなるかもしれませんが、上述のとおりこのクエリは失敗します。前述のクエリを使用してください。 @@ -273,7 +273,7 @@ Code: 48. DB::Exception: localhost:9000 から受信しました。DB::Exception -## パスのワイルドカード +## パスのワイルドカード {#wildcards-in-path} `path` 引数では、bash 形式のワイルドカードを使用して複数ファイルを指定できます。処理対象となるには、ファイルが存在し、パスパターン全体に一致している必要があります。ファイルの一覧は `SELECT` 実行時に決定されます(`CREATE` 時点ではありません)。 @@ -361,7 +361,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) -## エンドポイント単位の設定 +## エンドポイント単位の設定 {#endpoint-settings} 次の設定は、特定のエンドポイント用に設定ファイル内で指定できます(URL のプレフィックスの完全一致で判定されます)。 @@ -405,7 +405,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ``` -## アーカイブの操作 +## アーカイブの操作 {#working-with-archives} S3 上に、次の URI を持つ複数のアーカイブファイルがあるとします: @@ -431,7 +431,7 @@ ZIP および TAR アーカイブはサポートされている任意のスト ::: -## 公開バケットへのアクセス +## 公開バケットへのアクセス {#accessing-public-buckets} ClickHouse は、さまざまな種類のソースから認証情報を取得しようとします。 そのため、公開されている一部のバケットにアクセスする際に問題が発生し、クライアントが `403` エラーコードを返すことがあります。 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..0f056972c0f 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 @@ -9,16 +9,13 @@ doc_type: 'reference' import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' +# S3Queue テーブルエンジン {#s3queue-table-engine} -# 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} +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE s3_queue_engine_table (name String, value UInt32) @@ -49,12 +46,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 +62,7 @@ SETTINGS mode = 'unordered'; ``` -名前付きコレクションの使用: +名前付きコレクションの使用: ```xml @@ -86,164 +83,256 @@ SETTINGS mode = 'ordered'; ``` - ## 設定 {#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` {#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。 -デフォルト値: `/`。 +デフォルト値: 空文字列。 -### `s3queue_loading_retries` {#loading_retries} +### `after_processing_move_secret_access_key` {#after_processing_move_secret_access_key} + +移動先が別の S3 バケットである場合に、正常に処理されたファイルをそのバケットへ移動するための Secret Access Key。 + +設定可能な値: + +* 文字列。 + +デフォルト値: 空文字列。 + +### `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} -新しいファイルが見つからない場合に、前回のポーリング間隔に追加される待機時間を決定します。次のポーリングは、前回の間隔とこのバックオフ値の合計、または最大間隔のいずれか小さい方の後に実行されます。 +新しいファイルが見つからなかった場合に、前回のポーリング間隔に追加される待機時間を決定します。次回のポーリングは、前回の間隔にこのバックオフ値を加えた値と最大間隔のうち、短い方の時間が経過した後に行われます。 指定可能な値: -- 正の整数。 +* 正の整数。 デフォルト値: `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`処理の実際の並列度を定義するためです。 - -### `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-role-based-access} -## 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 @@ -259,29 +348,24 @@ SETTINGS ... ``` +## S3Queue の ordered モード {#ordered-mode} -## S3Queue順序付きモード {#ordered-mode} - -`S3Queue`処理モードでは、ZooKeeper内に保存するメタデータを削減できますが、時間的に後から追加されるファイルは、アルファベット順で大きい名前を持つ必要があるという制限があります。 +`S3Queue` の処理モードでは、ZooKeeper に保存するメタデータ量を減らせますが、時間的に後から追加されるファイルの名前は、英数字としてそれ以前のファイル名より大きくなる必要があるという制約があります。 -`S3Queue`の`ordered`モードは、`unordered`モードと同様に、`(s3queue_)processing_threads_num`設定(`s3queue_`プレフィックスは省略可能)をサポートしており、サーバー上でローカルに`S3`ファイルを処理するスレッド数を制御できます。 +`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` から利用可能です。 -さらに、`ordered`モードでは`(s3queue_)buckets`という別の設定が導入されており、これは「論理スレッド」を意味します。分散環境において、複数のサーバーに`S3Queue`テーブルのレプリカが存在する場合、この設定が処理単位の数を定義します。例えば、各`S3Queue`レプリカ上の各処理スレッドは、処理のために特定の`bucket`をロックしようとし、各`bucket`はファイル名のハッシュによって特定のファイルに割り当てられます。したがって、分散環境では、`(s3queue_)buckets`設定をレプリカ数以上に設定することを強く推奨します。バケット数がレプリカ数より多くても問題ありません。最も最適なシナリオは、`(s3queue_)buckets`設定を`number_of_replicas`と`(s3queue_)processing_threads_num`の積に等しくすることです。 +## 説明 {#description} -`(s3queue_)processing_threads_num`設定は、バージョン`24.6`より前での使用は推奨されません。 +`SELECT` は、各ファイルを 1 回しかインポートできないため(デバッグ用途を除いて)ストリーミングインポートにはあまり有用ではありません。代わりに、[マテリアライズドビュー](../../../sql-reference/statements/create/view.md) を使ってリアルタイムの処理フローを作成する方が実用的です。そのためには次のようにします。 -`(s3queue_)buckets`設定は、バージョン`24.6`以降で利用可能です。 +1. 指定した S3 内のパスからデータを消費するテーブルを S3 エンジンで作成し、それをデータストリームと見なします。 +2. 目的の構造を持つテーブルを作成します。 +3. エンジンからのデータを変換し、事前に作成したテーブルに書き込むマテリアライズドビューを作成します。 - -## Description {#description} - -`SELECT`はストリーミングインポートにはあまり有用ではありません(デバッグを除く)。各ファイルは一度しかインポートできないためです。[マテリアライズドビュー](../../../sql-reference/statements/create/view.md)を使用してリアルタイム処理を作成する方が実用的です。これを行うには: - -1. エンジンを使用してS3の指定されたパスからデータを取得するテーブルを作成し、それをデータストリームとして扱います。 -2. 必要な構造を持つテーブルを作成します。 -3. エンジンからデータを変換し、事前に作成したテーブルに格納するマテリアライズドビューを作成します。 - -`MATERIALIZED VIEW`がエンジンに接続されると、バックグラウンドでデータの収集が開始されます。 +`MATERIALIZED VIEW` がエンジンに紐付けられると、バックグラウンドでデータの取り込みを開始します。 例: @@ -300,48 +384,44 @@ SETTINGS SELECT * FROM stats ORDER BY name; ``` - ## 仮想カラム {#virtual-columns} -- `_path` — ファイルへのパス。 -- `_file` — ファイル名。 -- `_size` — ファイルのサイズ。 -- `_time` — ファイルの作成時刻。 - -仮想カラムの詳細については、[こちら](../../../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} -`path` 引数では、bashライクなワイルドカードを使用して複数のファイルを指定できます。処理されるファイルは存在し、パスパターン全体に一致している必要があります。ファイルのリストは `SELECT` 実行時に決定されます(`CREATE` 時ではありません)。 - -- `*` — `/` を除く任意の文字を任意の数(空文字列を含む)にマッチします。 -- `**` — `/` を含む任意の文字を任意の数(空文字列を含む)にマッチします。 -- `?` — 任意の1文字にマッチします。 -- `{some_string,another_string,yet_another_one}` — `'some_string'`、`'another_string'`、`'yet_another_one'` のいずれかの文字列にマッチします。 -- `{N..M}` — N から M までの範囲内の任意の数値にマッチします(両端を含む)。N と M は先頭にゼロを含むことができます(例: `000..078`)。 +`path` 引数では、bash 風のワイルドカードを使用して複数のファイルを指定できます。ファイルが処理対象となるには、実際に存在し、パスパターン全体に完全一致している必要があります。ファイルの一覧は `SELECT` 実行時に決定されます(`CREATE` 時点ではありません)。 -`{}` を使用した構文は、[remote](../../../sql-reference/table-functions/remote.md) テーブル関数と同様です。 +* `*` — `/` を除く任意の文字列(空文字列を含む)に対して任意の長さでマッチします。 +* `**` — `/` を含む任意の文字列(空文字列を含む)に対して任意の長さでマッチします。 +* `?` — 任意の 1 文字にマッチします。 +* `{some_string,another_string,yet_another_one}` — 文字列 `'some_string', 'another_string', 'yet_another_one'` のいずれか 1 つにマッチします。 +* `{N..M}` — N から M までの範囲(両端を含む)の任意の数値にマッチします。N と M には先頭にゼロを含めることができ、例えば `000..078` のように指定できます。 +`{}` を用いた構文は [remote](../../../sql-reference/table-functions/remote.md) テーブル関数と類似しています。 ## 制限事項 {#limitations} -1. 重複行は以下の理由により発生する可能性があります: +1. 行の重複は以下の要因により発生する可能性があります: -- ファイル処理の途中で解析中に例外が発生し、`s3queue_loading_retries`による再試行が有効になっている場合; +* ファイル処理の途中でパース中に例外が発生し、`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} -## イントロスペクション {#introspection} +内部状態の確認には、ステートレスな `system.s3queue` テーブルと永続的な `system.s3queue_log` テーブルを使用します。 -イントロスペクションには、`system.s3queue`ステートレステーブルと`system.s3queue_log`永続テーブルを使用します。 - -1. `system.s3queue`。このテーブルは永続化されず、`S3Queue`のインメモリ状態を表示します。現在処理中のファイル、処理済みまたは失敗したファイルを示します。 +1. `system.s3queue`。このテーブルは永続化されず、`S3Queue` のメモリ上の状態を表示します。現在処理中のファイル、処理済みのファイル、失敗したファイルを確認できます。 ```sql ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -358,11 +438,11 @@ SETTINGS `exception` String ) ENGINE = SystemS3Queue -COMMENT 'S3Queueメタデータのインメモリ状態とファイルごとの現在処理中の行数を含みます。' │ +COMMENT 'S3Queueメタデータのインメモリ状態と、ファイルごとに現在処理されている行を含みます。' │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -例: +例: ```sql @@ -381,14 +461,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 +491,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/integrations/sqlite.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md index 45fbc69acf6..6ee70ea4efd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# SQLite テーブルエンジン {#sqlite-table-engine} -# SQLite テーブルエンジン - - + このエンジンを使用すると、SQLite へのデータのインポートおよびエクスポートが可能になり、ClickHouse から SQLite テーブルへ直接クエリを実行することもできます。 - - -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -33,8 +30,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; * `db_path` — データベースを含む SQLite ファイルへのパス。 * `table` — SQLite データベース内のテーブル名。 - -## 使用例 +## 使用例 {#usage-example} SQLite テーブルを作成するクエリを次に示します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md index 21982415035..f56d5908e0f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# TimeSeries テーブルエンジン +# TimeSeries テーブルエンジン {#timeseries-table-engine} @@ -31,7 +31,7 @@ TimeSeries テーブルエンジンを使用するには、[allow_experiment ::: -## 構文 +## 構文 {#syntax} ```sql CREATE TABLE name [(columns)] ENGINE=TimeSeries @@ -42,7 +42,7 @@ CREATE TABLE name [(columns)] ENGINE=TimeSeries ``` -## 使用方法 +## 使用方法 {#usage} すべてをデフォルト設定のままにして開始するのが簡単です(列の一覧を指定しなくても `TimeSeries` テーブルを作成できます): @@ -116,7 +116,7 @@ _metrics_ テーブルは次のカラムを持たなければなりません: -## 作成 +## 作成 {#creation} `TimeSeries` テーブルエンジンでテーブルを作成する方法はいくつかあります。 最も簡単なステートメントは @@ -201,7 +201,7 @@ ORDER BY metric_family_name ``` -## 列型の調整 +## 列型の調整 {#adjusting-column-types} メインテーブルを定義する際に型を明示的に指定することで、内部ターゲットテーブルのほとんどすべての列型を調整できます。例えば、 @@ -226,7 +226,7 @@ ORDER BY (id, timestamp) ``` -## `id` 列 +## `id` 列 {#id-column} `id` 列には識別子が格納されており、各識別子はメトリクス名とタグの組み合わせに対して計算されます。 `id` 列の DEFAULT 式は、これらの識別子を計算するために使用される式です。 @@ -241,7 +241,7 @@ ENGINE=TimeSeries ``` -## `tags` 列と `all_tags` 列 +## `tags` 列と `all_tags` 列 {#tags-and-all-tags} タグのマップを含む列が 2 つあります。`tags` と `all_tags` です。この例では同じものですが、`tags_to_columns` 設定を使用した場合には異なる場合があります。この設定を使用すると、特定のタグを `tags` 列内のマップとしてではなく、別の列に保存するよう指定できます。 @@ -272,7 +272,7 @@ SETTINGS tags_to_columns = {'instance': 'instance', 'job': 'job'} ``` -## 内部ターゲットテーブルのテーブルエンジン +## 内部ターゲットテーブルのテーブルエンジン {#inner-table-engines} デフォルトでは、内部ターゲットテーブルは次のテーブルエンジンを使用します。 @@ -290,7 +290,7 @@ METRICS ENGINE=ReplicatedReplacingMergeTree ``` -## 外部ターゲットテーブル +## 外部ターゲットテーブル {#external-target-tables} `TimeSeries` テーブルが手動で作成したテーブルを使用するように設定できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md index ca15e112e3e..280b0b7a660 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md @@ -12,7 +12,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# YTsaurus テーブルエンジン +# YTsaurus テーブルエンジン {#ytsaurus-table-engine} @@ -21,7 +21,7 @@ YTsaurus テーブルエンジンを使用すると、YTsaurus クラスター -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -47,7 +47,7 @@ YTsaurus テーブルエンジンを使用すると、YTsaurus クラスター * `oauth_token` — OAuth トークン。 -## 使用例 +## 使用例 {#usage-example} YTsaurus テーブルを作成するクエリの例です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md index 0dad62231a5..1ac04994bd5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md @@ -10,7 +10,7 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Log テーブルエンジンファミリー +# Log テーブルエンジンファミリー {#log-table-engine-family} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md index 1bdb46cf405..9ba953b4e27 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Log テーブルエンジン +# Log テーブルエンジン {#log-table-engine} @@ -22,7 +22,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## テーブルを作成する +## テーブルを作成する {#table_engines-log-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,7 +59,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用例 +## 使用例 {#table_engines-log-example-of-use} テーブルの作成: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md index e553e83bcdd..83b423504ef 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# StripeLog テーブルエンジン +# StripeLog テーブルエンジン {#stripelog-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## テーブルの作成 +## テーブルの作成 {#table_engines-stripelog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -53,7 +53,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用例 +## 使用例 {#table_engines-stripelog-example-of-use} テーブルを作成: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md index df248d194d8..84dd0c2c058 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# TinyLog テーブルエンジン +# TinyLog テーブルエンジン {#tinylog-table-engine} @@ -32,7 +32,7 @@ Log エンジンとは異なり、TinyLog は mark ファイルを使用しま -## テーブルの作成 +## テーブルの作成 {#table_engines-tinylog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -58,7 +58,7 @@ ClickHouse は各テーブルに対して次のファイルを作成します。 -## 使用例 +## 使用例 {#table_engines-tinylog-example-of-use} テーブルの作成: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md index 076b06acabc..898e2700ce5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# AggregatingMergeTree テーブルエンジン +# AggregatingMergeTree テーブルエンジン {#aggregatingmergetree-table-engine} このエンジンは [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) から継承しており、データパーツのマージロジックを変更します。ClickHouse は、同じ主キー(より正確には、同じ[ソートキー](../../../engines/table-engines/mergetree-family/mergetree.md))を持つすべての行を 1 行(単一のデータパーツ内)にまとめ、その行に集約関数の状態を組み合わせて格納します。 @@ -29,7 +29,7 @@ doc_type: 'reference' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -80,7 +80,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 集約マテリアライズドビューの例 +## 集約マテリアライズドビューの例 {#example-of-an-aggregated-materialized-view} 次の例では、`test` という名前のデータベースが既に存在すると仮定します。まだない場合は、以下のコマンドで作成してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md index fe4f6ded1ef..bd01ea888cd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md @@ -10,7 +10,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# 厳密ベクトル検索と近似ベクトル検索 +# 厳密ベクトル検索と近似ベクトル検索 {#exact-and-approximate-vector-search} 多次元(ベクトル)空間において、ある点に最も近い N 個の点を見つける問題は、[nearest neighbor search](https://en.wikipedia.org/wiki/Nearest_neighbor_search)(最近傍探索)、または略してベクトル検索と呼ばれます。 ベクトル検索を行うための一般的なアプローチは 2 つあります: @@ -36,13 +36,13 @@ LIMIT `<N>` は、返すべき近傍点の数を指定します。 -## 厳密なベクトル検索 +## 厳密なベクトル検索 {#exact-nearest-neighbor-search} 厳密なベクトル検索は、上記の SELECT クエリをそのまま使用して実行できます。 このようなクエリの実行時間は、一般的に保存されているベクトル数とその次元数、つまり配列要素数に比例します。 また、ClickHouse はすべてのベクトルに対して総当たりスキャンを行うため、クエリで使用されるスレッド数(設定項目 [max_threads](../../../operations/settings/settings.md#max_threads) を参照)にも実行時間が依存します。 -### 例 +### 例 {#exact-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32)) ENGINE = MergeTree ORDER BY id; @@ -67,9 +67,9 @@ LIMIT 3; ``` -## 近似ベクトル検索 +## 近似ベクトル検索 {#approximate-nearest-neighbor-search} -### ベクトル類似度インデックス +### ベクトル類似度インデックス {#vector-similarity-index} ClickHouse は、近似ベクトル検索を実行するための特別な「ベクトル類似度」インデックスを提供します。 @@ -78,7 +78,7 @@ ClickHouse は、近似ベクトル検索を実行するための特別な「ベ 問題が発生した場合は、[ClickHouse リポジトリ](https://github.com/clickhouse/clickhouse/issues) に issue を作成してください。 ::: -#### ベクトル類似度インデックスの作成 +#### ベクトル類似度インデックスの作成 {#creating-a-vector-similarity-index} 新しいテーブルに対して、次のようにベクトル類似度インデックスを作成できます。 @@ -196,7 +196,7 @@ ORDER BY [...] 上記の式には、事前割り当てバッファやキャッシュなど、ベクトル類似性インデックスがランタイムのデータ構造を割り当てるために必要となる追加メモリは含まれていません。 -#### ベクトル類似性インデックスの使用 +#### ベクトル類似性インデックスの使用 {#using-a-vector-similarity-index} :::note ベクトル類似性インデックスを使用するには、[compatibility](../../../operations/settings/settings.md) 設定を `''`(デフォルト値)、または `'25.1'` 以降に設定する必要があります。 @@ -407,7 +407,7 @@ Query id: a2a9d0c8-a525-45c1-96ca-c5a11fa66f47 `vector_search_with_rescoring = 0` で再スコアリングなしのクエリを実行し、かつ並列レプリカを有効にしている場合、再スコアリングにフォールバックして実行されることがあります。 ::: -#### パフォーマンスチューニング +#### パフォーマンスチューニング {#performance-tuning} **圧縮のチューニング** @@ -541,7 +541,7 @@ result = chclient.query( この例では、参照ベクターはそのままバイナリ形式で送信され、サーバー側で浮動小数点数配列として再解釈されます。 これにより、サーバー側の CPU 時間を節約し、サーバーログおよび `system.query_log` の肥大化を防ぐことができます。 -#### 管理と監視 +#### 管理と監視 {#administration} ベクトル類似性インデックスのディスク上のサイズは、[system.data_skipping_indices](../../../operations/system-tables/data_skipping_indices) から取得できます。 @@ -559,7 +559,7 @@ WHERE type = 'vector_similarity'; └──────────┴───────┴──────┴──────────────────────────┘ ``` -#### 通常のスキッピングインデックスとの違い +#### 通常のスキッピングインデックスとの違い {#differences-to-regular-skipping-indexes} 通常の[スキッピングインデックス](/optimize/skipping-indexes)と同様に、ベクトル類似度インデックスはグラニュール単位で構築され、各インデックスブロックは `GRANULARITY = [N]` 個のグラニュールで構成されます(通常のスキッピングインデックスではデフォルトで `[N]` = 1)。 たとえば、テーブルのプライマリインデックスのグラニュラリティが 8192(`index_granularity = 8192` の設定)で `GRANULARITY = 2` の場合、各インデックスブロックには 16384 行が含まれます。 @@ -585,7 +585,7 @@ WHERE type = 'vector_similarity'; 一般的には、ベクトル類似度インデックスに対しては大きな `GRANULARITY` を使用し、ベクトル類似度構造によるメモリ消費が過大になるなどの問題が発生した場合にのみ、より小さな `GRANULARITY` の値に切り替えることを推奨します。 ベクトル類似度インデックスに対して `GRANULARITY` が指定されていない場合、デフォルト値は 1 億です。 -#### 例 +#### 例 {#approximate-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32), INDEX idx vec TYPE vector_similarity('hnsw', 'L2Distance', 2)) ENGINE = MergeTree ORDER BY id; @@ -616,7 +616,7 @@ LIMIT 3; * [dbpedia](../../../getting-started/example-datasets/dbpedia-dataset) * [hackernews](../../../getting-started/example-datasets/hackernews-vector-search-dataset) -### Quantized Bit (QBit) +### Quantized Bit (QBit) {#approximate-nearest-neighbor-search-qbit} @@ -650,7 +650,7 @@ column_name QBit(element_type, dimension) * `element_type` – 各ベクトル要素の型。サポートされている型は `BFloat16`、`Float32`、`Float64` です * `dimension` – 各ベクトル内の要素数 -#### `QBit` テーブルの作成とデータの追加 +#### `QBit` テーブルの作成とデータの追加 {#qbit-create} ```sql CREATE TABLE fruit_animal ( @@ -668,7 +668,7 @@ INSERT INTO fruit_animal VALUES ('horse', [-0.61435682, 0.48542571, 1.21091247, -0.62530446, -1.33082533]); ``` -#### `QBit` を使ったベクトル検索 +#### `QBit` を使ったベクトル検索 {#qbit-search} L2 距離を用いて、単語 'lemon' を表すベクトルに最も近い近傍を検索します。距離関数の第 3 引数ではビット単位の精度を指定します。値を大きくすると精度は向上しますが、計算コストも増加します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md index 857724da71b..4c81481dd5b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md @@ -9,9 +9,7 @@ show_related_blogs: true doc_type: 'reference' --- - - -# CoalescingMergeTree テーブルエンジン +# CoalescingMergeTree テーブルエンジン {#coalescingmergetree-table-engine} :::note Available from version 25.6 このテーブルエンジンは、OSS と Cloud の両方でバージョン 25.6 以降で利用可能です。 @@ -23,9 +21,7 @@ doc_type: 'reference' `CoalescingMergeTree` は、キー以外のカラムで Nullable 型と併用することを想定しています。カラムが Nullable でない場合は、その動作は [ReplacingMergeTree](/engines/table-engines/mergetree-family/replacingmergetree) と同じになります。 - - -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -42,16 +38,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] リクエストパラメータの説明については、[リクエストの説明](../../../sql-reference/statements/create/table.md)を参照してください。 -### CoalescingMergeTree のパラメータ +### CoalescingMergeTree のパラメータ {#parameters-of-coalescingmergetree} -#### Columns +#### Columns {#columns} `columns` - 値が統合されるカラム名のタプルです。省略可能なパラメータです。\ カラムは数値型である必要があり、パーティションキーまたはソートキーに含まれていてはなりません。 `columns` が指定されていない場合、ClickHouse はソートキーに含まれていないすべてのカラムの値を統合します。 -### クエリ句 +### クエリ句 {#query-clauses} `CoalescingMergeTree` テーブルを作成する際には、`MergeTree` テーブルを作成する場合と同じ [句](../../../engines/table-engines/mergetree-family/mergetree.md) が必要です。 @@ -76,8 +72,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `columns` — 値が合計されるカラム名のタプルです。省略可能なパラメータです。詳細な説明については上記のテキストを参照してください。
- -## 使用例 +## 使用例 {#usage-example} 次のテーブルを例にします。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md index 306f76d95e9..709781c6480 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# CollapsingMergeTree テーブルエンジン +# CollapsingMergeTree テーブルエンジン {#collapsingmergetree-table-engine} @@ -40,7 +40,7 @@ doc_type: 'guide' -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -81,9 +81,9 @@ ENGINE = CollapsingMergeTree(Sign) * `CollapsingMergeTree` テーブルを作成する場合は、`MergeTree` テーブルを作成する場合と同じ [クエリ句](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table) が必要です。 -## Collapsing +## Collapsing {#table_engine-collapsingmergetree-collapsing} -### Data +### Data {#data} あるオブジェクトに対して、継続的に変化するデータを保存する必要がある状況を考えます。 各オブジェクトにつき 1 行だけを持ち、何か変更があるたびにその行を更新する、というのは論理的に思えますが、 @@ -140,7 +140,7 @@ ENGINE = CollapsingMergeTree(Sign) 2. カラム内で長く伸び続ける配列は、書き込み負荷の増大によりエンジンの効率を低下させます。データが単純であればあるほど効率は高くなります。 3. `SELECT` の結果は、オブジェクト変更履歴の一貫性に大きく依存します。挿入用データを準備する際には注意してください。一貫性のないデータでは予測不能な結果が生じる可能性があります。たとえば、セッション深度のような非負のメトリクスに対して負の値が出力されることがあります。 -### Algorithm +### Algorithm {#table_engine-collapsingmergetree-collapsing-algorithm} ClickHouse がデータ[パーツ](/concepts/glossary#parts)をマージする際、 同じソートキー(`ORDER BY`)を持つ連続した行の各グループは、高々 2 行にまでまとめられます。 @@ -186,9 +186,9 @@ collapsing を最終確定させるには、`GROUP BY` 句と、`Sign` を考慮 -## 例 +## 例 {#examples} -### 使用例 +### 使用例 {#example-of-use} 次のサンプルデータを前提とします。 @@ -289,7 +289,7 @@ SELECT * FROM UAct FINAL このようなデータの選択方法は効率が悪く、スキャン対象データが多い場合(数百万行規模)には使用しないことを推奨します。 ::: -### 別のアプローチの例 +### 別のアプローチの例 {#example-of-another-approach} このアプローチの考え方は、マージ処理がキー列のみを考慮するという点にあります。 そのため「cancel」行では、`Sign` 列を使用せずに集計したときにその行の以前のバージョンと相殺されるような diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md index cc06feb766e..3c950ad0bac 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md @@ -7,9 +7,7 @@ title: 'カスタムパーティショニングキー' doc_type: 'guide' --- - - -# カスタムパーティションキー +# カスタムパーティションキー {#custom-partitioning-key} :::note ほとんどの場合、パーティションキーは不要であり、それ以外の多くの場合でも、月単位より細かいパーティションキーは不要です。例外はオブザーバビリティ向けのユースケースで、この場合は日単位のパーティションが一般的です。 @@ -78,7 +76,6 @@ WHERE table = 'visits' `partition` 列にはパーティション名が含まれています。この例では、`201901` と `201902` の 2 つのパーティションがあります。この列の値を使用して、[ALTER ... PARTITION](../../../sql-reference/statements/alter/partition.md) クエリでパーティション名を指定できます。 - `name` 列には、パーティションのデータパーツ名が含まれます。この列を使用して、[ALTER ATTACH PART](/sql-reference/statements/alter/partition#attach-partitionpart) クエリでパーツ名を指定できます。 パーツ名 `201901_1_9_2_11` を分解して説明します。 @@ -134,16 +131,13 @@ drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 detached フォルダ '201901_1_1_0'、'201901_1_7_1' などは、各パートのディレクトリです。各パートは対応するパーティションに紐づいており、特定の月のデータだけを含みます(この例のテーブルは月単位でパーティション分割されています)。 - `detached` ディレクトリには、[DETACH](/sql-reference/statements/detach) クエリを使用してテーブルから切り離されたパーツが含まれます。破損したパーツも削除されるのではなく、このディレクトリへ移動されます。サーバーは `detached` ディレクトリ内のパーツを使用しません。このディレクトリ内のデータは、いつでも追加、削除、または変更できます。サーバーは、[ATTACH](/sql-reference/statements/alter/partition#attach-partitionpart) クエリを実行するまでこれらを認識しません。 稼働中のサーバーでは、サーバーが認識できないため、ファイルシステム上のパーツの集合やそのデータを手動で変更することはできません。非レプリケートテーブルの場合、サーバー停止中であればこれを行うことはできますが、推奨されません。レプリケートテーブルの場合は、いかなる場合でもパーツの集合を変更することはできません。 ClickHouse ではパーティションに対して操作を実行できます。削除したり、あるテーブルから別のテーブルへコピーしたり、バックアップを作成したりできます。すべての操作の一覧は、[パーティションおよびパーツの操作](/sql-reference/statements/alter/partition) セクションを参照してください。 - - -## パーティションキーを利用した Group By 最適化 +## パーティションキーを利用した Group By 最適化 {#group-by-optimisation-using-partition-key} テーブルのパーティションキーとクエリの Group By キーの組み合わせによっては、 各パーティションごとに独立して集約処理を実行できる場合があります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md index c2dbfba48cf..f432ea61618 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md @@ -7,9 +7,7 @@ title: 'GraphiteMergeTree テーブルエンジン' doc_type: 'guide' --- - - -# GraphiteMergeTree テーブルエンジン +# GraphiteMergeTree テーブルエンジン {#graphitemergetree-table-engine} このエンジンは、[Graphite](http://graphite.readthedocs.io/en/latest/index.html) データの間引きおよび集約・平均化(ロールアップ)のために設計されています。Graphite のデータストアとして ClickHouse を使用したい開発者に役立ちます。 @@ -17,9 +15,7 @@ doc_type: 'guide' このエンジンは [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) の特性を継承します。 - - -## テーブルの作成 +## テーブルの作成 {#creating-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -82,8 +78,7 @@ Graphite データ用のテーブルには、以下のデータを格納する * `config_section` — 設定ファイル内のセクション名。このセクションに rollup のルールを設定します。
- -## ロールアップ設定 +## ロールアップ設定 {#rollup-configuration} ロールアップの設定は、サーバー設定内の [graphite_rollup](../../../operations/server-configuration-parameters/settings.md#graphite) パラメータによって定義されます。パラメータ名は任意の名前を付けることができます。複数の設定を作成し、異なるテーブルに対して使い分けることができます。 @@ -92,25 +87,25 @@ Graphite データ用のテーブルには、以下のデータを格納する required-columns patterns -### 必須カラム +### 必須カラム {#required-columns} -#### `path_column_name` +#### `path_column_name` {#path_column_name} `path_column_name` — メトリック名(Graphite センサー)を保存するカラム名。デフォルト値: `Path`。 -#### `time_column_name` +#### `time_column_name` {#time_column_name} `time_column_name` — メトリックを計測した時刻を保存するカラム名。デフォルト値: `Time`。 -#### `value_column_name` +#### `value_column_name` {#value_column_name} `value_column_name` — `time_column_name` で指定された時刻におけるメトリック値を保存するカラム名。デフォルト値: `Value`。 -#### `version_column_name` +#### `version_column_name` {#version_column_name} `version_column_name` — メトリックのバージョンを保存するカラム名。デフォルト値: `Timestamp`。 -### パターン +### パターン {#patterns} `patterns` セクションの構造: @@ -163,8 +158,7 @@ default * `precision`– データの経過時間を秒単位でどの程度の精度で定義するか。86400(1 日の秒数)を割り切れる値である必要があります。 * `function` – 経過時間が `[age, age + precision]` の範囲に入るデータに適用する集約関数の名前。使用可能な関数: min / max / any / avg。平均は、平均値同士の平均を取るのと同様に、厳密ではない平均として計算されます。 -### ルールタイプなしの設定例 - +### ルールタイプなしの設定例 {#configuration-example} ```xml @@ -199,7 +193,7 @@ default ``` -### ルールタイプ別の設定例 +### ルールタイプ別の設定例 {#configuration-typed-example} ```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..4e89b13e7f2 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 @@ -7,9 +7,7 @@ title: 'MergeTree エンジンファミリー' doc_type: 'reference' --- - - -# MergeTree エンジンファミリー +# MergeTree エンジンファミリー {#mergetree-engine-family} MergeTree ファミリーに属するテーブルエンジンは、ClickHouse のデータストレージ機能の中核となります。これらは、カラム型ストレージ、カスタムパーティショニング、疎なプライマリインデックス、セカンダリのデータスキップインデックスなど、耐障害性と高性能なデータ取得のためのほとんどの機能を提供します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md index 24a3927a6ca..647bba4c279 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md @@ -10,7 +10,7 @@ doc_type: 'reference' import PrivatePreviewBadge from '@theme/badges/PrivatePreviewBadge'; -# テキストインデックスを使用した全文検索 +# テキストインデックスを使用した全文検索 {#full-text-search-using-text-indexes} @@ -22,7 +22,7 @@ ClickHouse のテキストインデックス(["inverted indexes"](https://en.w -## テキストインデックスの作成 +## テキストインデックスの作成 {#creating-a-text-index} テキストインデックスを作成するには、まず対応する実験的な設定を有効にしてください。 @@ -186,12 +186,12 @@ ALTER TABLE tab ADD INDEX text_idx(s) TYPE text(tokenizer = splitByNonAlpha); ``` -## テキストインデックスの使用 +## テキストインデックスの使用 {#using-a-text-index} SELECT クエリでテキストインデックスを使用するのは簡単で、一般的な文字列検索関数では自動的にインデックスが利用されます。 インデックスが存在しない場合、以下の文字列検索関数は低速な総当たりスキャンによる処理にフォールバックします。 -### サポートされている関数 +### サポートされている関数 {#functions-support} SELECT クエリの `WHERE` 句でテキスト関数が使用されている場合、テキストインデックスを利用できます。 @@ -201,7 +201,7 @@ FROM [...] WHERE string_search_function(column_with_text_index) ``` -#### `=` と `!=` +#### `=` と `!=` {#functions-example-equals-notequals} `=` ([equals](/sql-reference/functions/comparison-functions.md/#equals)) と `!=` ([notEquals](/sql-reference/functions/comparison-functions.md/#notEquals)) は、指定された検索語全体と一致します。 @@ -213,7 +213,7 @@ SELECT * from tab WHERE str = 'こんにちは'; テキストインデックスは `=` と `!=` をサポートしますが、等値・不等値検索が意味を持つのは `array` トークナイザを使用する場合のみです(このトークナイザではインデックスに行全体の値が保存されます)。 -#### `IN` と `NOT IN` +#### `IN` と `NOT IN` {#functions-example-in-notin} `IN`([`in`](/sql-reference/functions/in-functions))と `NOT IN`([`notIn`](/sql-reference/functions/in-functions))は `equals` および `notEquals` 関数と似ていますが、検索語句のすべてに一致するもの(`IN`)、あるいはどれにも一致しないもの(`NOT IN`)を判定します。 @@ -225,7 +225,7 @@ SELECT * from tab WHERE str IN ('Hello', 'World'); `=` および `!=` に対する制限と同じ制限が適用されます。つまり、`IN` と `NOT IN` は `array` トークナイザーと組み合わせて使用する場合にのみ意味があります。 -#### `LIKE`、`NOT LIKE` および `match` +#### `LIKE`、`NOT LIKE` および `match` {#functions-example-like-notlike-match} :::note これらの関数がフィルタリングのためにテキストインデックスを使用するのは、インデックストークナイザーが `splitByNonAlpha` または `ngrams` のいずれかである場合に限られます。 @@ -250,7 +250,7 @@ SELECT count() FROM tab WHERE comment LIKE ' support %'; -- または `% support `support` の左右に空白を入れておくと、その語をトークンとして抽出できるようになります。 -#### `startsWith` と `endsWith` +#### `startsWith` と `endsWith` {#functions-example-startswith-endswith} `LIKE` と同様に、関数 [startsWith](/sql-reference/functions/string-functions.md/#startsWith) と [endsWith](/sql-reference/functions/string-functions.md/#endsWith) は、検索語から完全なトークンを抽出できる場合にのみテキストインデックスを使用できます。 @@ -275,7 +275,7 @@ startsWith(comment, 'clickhouse supports ')` SELECT count() FROM tab WHERE endsWith(comment, ' olap engine'); ``` -#### `hasToken` と `hasTokenOrNull` +#### `hasToken` と `hasTokenOrNull` {#functions-example-hastoken-hastokenornull} 関数 [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) および [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) は、指定された単一のトークンを対象にマッチングを行います。 @@ -289,7 +289,7 @@ SELECT count() FROM tab WHERE hasToken(comment, 'clickhouse'); 関数 `hasToken` と `hasTokenOrNull` は、`text` インデックスと組み合わせて使用する関数として最も高いパフォーマンスを発揮します。 -#### `hasAnyTokens` と `hasAllTokens` +#### `hasAnyTokens` と `hasAllTokens` {#functions-example-hasanytokens-hasalltokens} 関数 [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) と [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) は、指定されたトークンの一部またはすべてにマッチします。 @@ -309,7 +309,7 @@ SELECT count() FROM tab WHERE hasAnyTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); ``` -#### `has` +#### `has` {#functions-example-has} 配列関数 [has](/sql-reference/functions/array-functions#has) は、文字列配列内の単一のトークンとの一致を判定します。 @@ -319,7 +319,7 @@ SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE has(array, 'clickhouse'); ``` -#### `mapContains` +#### `mapContains` {#functions-example-mapcontains} 関数 [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains)(`mapContainsKey` のエイリアス)は、マップのキーに含まれる単一のトークンにマッチさせます。 @@ -331,7 +331,7 @@ SELECT count() FROM tab WHERE mapContainsKey(map, 'clickhouse'); SELECT count() FROM tab WHERE mapContains(map, 'clickhouse'); ``` -#### `operator[]` +#### `operator[]` {#functions-example-access-operator} アクセス演算子 [operator[]](/sql-reference/operators#access-operators)は、テキストインデックスと併用してキーおよび値をフィルタリングするために使用できます。 @@ -343,9 +343,9 @@ SELECT count() FROM tab WHERE map['engine'] = 'clickhouse'; `Array(T)` 型および `Map(K, V)` 型のカラムをテキストインデックスと併用する場合の例を以下に示します。 -### テキストインデックスを使用した `Array` および `Map` カラムの例 +### テキストインデックスを使用した `Array` および `Map` カラムの例 {#text-index-array-and-map-examples} -#### Array(String) カラムへのインデックス作成 +#### Array(String) カラムへのインデックス作成 {#text-index-example-array} ブログプラットフォームを想像してください。著者はキーワードを使って自身のブログ記事にカテゴリー付けを行います。 ユーザーには、トピックを検索したりクリックしたりすることで関連するコンテンツを見つけてほしいと考えています。 @@ -377,7 +377,7 @@ ALTER TABLE posts ADD INDEX keywords_idx(keywords) TYPE text(tokenizer = splitBy ALTER TABLE posts MATERIALIZE INDEX keywords_idx; -- 既存データに対してインデックスを再構築してください ``` -#### Map 列のインデックス作成 +#### Map 列のインデックス作成 {#text-index-example-map} 多くのオブザーバビリティのユースケースでは、ログメッセージは「コンポーネント」に分割され、タイムスタンプには日時型、ログレベルには enum 型など、適切なデータ型で保存されます。 メトリクスのフィールドはキーと値のペアとして保存するのが最適です。 @@ -435,9 +435,9 @@ SELECT * FROM logs WHERE has(mapValues(attributes), '192.168.1.1'); -- fast ``` -## パフォーマンスチューニング +## パフォーマンスチューニング {#performance-tuning} -### 直接読み取り +### 直接読み取り {#direct-read} 特定の種類のテキストクエリは、「direct read」と呼ばれる最適化によって大幅に高速化されます。 より正確には、`SELECT` クエリがテキスト列を *選択しない* 場合に、この最適化を適用できます。 @@ -515,7 +515,7 @@ Positions: 2番目の EXPLAIN PLAN の出力には、仮想カラム `__text_index___` が含まれます。 このカラムが存在する場合は、直接読み出しが使用されています。 -### キャッシュ +### キャッシュ {#caching} テキストインデックスの一部をメモリ上でバッファリングするために、複数のキャッシュが利用可能です([Implementation Details](#implementation) セクションを参照)。 現在、I/O を削減するために、テキストインデックスのデシリアライズ済みディクショナリブロック、ヘッダー、およびポスティングリスト用のキャッシュが用意されています。 @@ -524,7 +524,7 @@ Positions: キャッシュを設定するには、以下のサーバー設定を参照してください。 -#### ディクショナリブロックキャッシュの設定 +#### ディクショナリブロックキャッシュの設定 {#caching-dictionary} | Setting | Description | @@ -583,7 +583,7 @@ Index granules file (.idx) には、各辞書ブロックについて、その -## 例:Hackernews データセット +## 例:Hackernews データセット {#hacker-news-dataset} 大量のテキストを含む大規模なデータセットに対するテキストインデックスのパフォーマンス向上を確認していきます。 ここでは、人気サイトである Hacker News 上のコメント 2,870 万件を使用します。 @@ -650,7 +650,7 @@ ALTER TABLE hackernews MATERIALIZE INDEX comment_idx SETTINGS mutations_sync = 2 では、`hasToken`、`hasAnyTokens`、`hasAllTokens` 関数を使ってクエリを実行してみます。 次の例では、標準的なインデックススキャンとダイレクトリード最適化の間で、どれほど大きな性能差が生じるかを示します。 -### 1. `hasToken` を使用する +### 1. `hasToken` を使用する {#using-hasToken} `hasToken` は、テキストに特定の単一トークンが含まれているかどうかをチェックします。 ここでは大文字小文字を区別して、`ClickHouse` というトークンを検索します。 @@ -690,7 +690,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re 直接読み取りクエリは 45 倍以上高速 (0.362s 対 0.008s) で、インデックスのみを読み取ることで処理するデータ量も大幅に削減されます (9.51 GB 対 3.15 MB)。 -### 2. `hasAnyTokens` を使用する +### 2. `hasAnyTokens` を使用する {#using-hasAnyTokens} `hasAnyTokens` は、テキストに指定したトークンのうち少なくとも 1 つが含まれているかどうかをチェックします。 ここでは、'love' または 'ClickHouse' のいずれかを含むコメントを検索します。 @@ -730,7 +730,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re この一般的な「OR」検索では、高速化がさらに顕著です。 フルカラムスキャンを回避することで、クエリは約89倍高速化されます(1.329秒 vs 0.015秒)。 -### 3. `hasAllTokens`の使用 +### 3. `hasAllTokens`の使用 {#using-hasAllTokens} `hasAllTokens`は、テキストに指定されたすべてのトークンが含まれているかを確認します。 'love'と'ClickHouse'の両方を含むコメントを検索します。 @@ -770,7 +770,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re この AND 検索では、ダイレクトリード最適化は標準のスキップインデックススキャンと比べて 26 倍以上高速です (0.184s 対 0.007s)。 -### 4. 複合検索: OR, AND, NOT, ... +### 4. 複合検索: OR, AND, NOT, ... {#compound-search} ダイレクトリード最適化は、複合ブール式にも適用されます。 ここでは、大文字小文字を区別しない検索で「ClickHouse」または「clickhouse」を検索します。 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..b472dc8f3f5 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' --- @@ -10,31 +10,28 @@ doc_type: 'reference' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# MergeTree テーブルエンジン {#mergetree-table-engine} -# MergeTree テーブルエンジン +`MergeTree` エンジンおよび `MergeTree` ファミリーの他のエンジン(例: `ReplacingMergeTree`、`AggregatingMergeTree`)は、ClickHouse で最も一般的に使用され、最も堅牢なテーブルエンジンです。 -`MergeTree` エンジンおよび `ReplacingMergeTree`、`AggregatingMergeTree` などの `MergeTree` ファミリーの他のエンジンは、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} +## テーブルの作成 {#table_engine-mergetree-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,197 +56,193 @@ 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} +### クエリ構文 {#mergetree-query-clauses} #### ENGINE {#engine} -`ENGINE` — エンジンの名前とパラメータ。`ENGINE = MergeTree()`。`MergeTree`エンジンにはパラメータがありません。 +`ENGINE` — エンジンの名前とパラメータを指定します。`ENGINE = MergeTree()`。`MergeTree` エンジンにはパラメータがありません。 -#### ORDER BY {#order_by} +#### ORDER BY {#order_by} -`ORDER BY` — ソートキー。 +`ORDER BY` — ソートキーです。 -カラム名または任意の式のタプル。例: `ORDER BY (CounterID + 1, EventDate)`。 +カラム名または任意の式のタプルを指定します。例: `ORDER BY (CounterID + 1, EventDate)`。 -プライマリキーが定義されていない場合(つまり`PRIMARY KEY`が指定されていない場合)、ClickHouseはソートキーをプライマリキーとして使用します。 +`PRIMARY KEY` が定義されていない場合(つまり `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` が有効な場合、`ORDER BY ()` が `CREATE TABLE` 文に暗黙的に追加されます。[プライマリキーの選択](#selecting-a-primary-key) を参照してください。 #### 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` — [ソートキーと異なる](#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 intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`。 +例: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. #### TTL {#ttl} -`TTL` — 行の保存期間と[ディスクとボリューム間](#table_engine-mergetree-multiple-volumes)での自動パーツ移動のロジックを指定するルールのリスト。オプション。 +`TTL` — 行の保存期間と、[ディスクおよびボリューム間](#table_engine-mergetree-multiple-volumes)の自動的なパーツ移動ロジックを指定するルールのリストです。省略可能です。 -式は`Date`または`DateTime`を返す必要があります。例: `TTL date + INTERVAL 1 DAY`。 +式は `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 {#settings} +[MergeTree Settings](../../../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 + 新しいプロジェクトではこの方法を使用しないでください。可能であれば、既存のプロジェクトも上記で説明した方法に切り替えてください。 + ::: -:::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} -テーブルは、プライマリキーでソートされたデータパートで構成されます。 - -テーブルにデータが挿入されると、個別のデータパートが作成され、それぞれがプライマリキーで辞書順にソートされます。例えば、プライマリキーが`(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} -主キーの列数に明示的な制限はありません。データ構造に応じて、主キーに含める列を増減できます。これにより次のような効果が得られる可能性があります: +主キーに含める列数には明確な制限はありません。データ構造に応じて、主キーに含める列を増やしたり減らしたりできます。これにより次の効果が得られる可能性があります。 -- インデックスのパフォーマンスを向上させる。 +* インデックスのパフォーマンスが向上する。 - 主キーが `(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} +### クエリにおけるインデックスとパーティションの利用 {#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 +251,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -この場合、以下のクエリにおいて: +この場合、クエリは次のようになります: ```sql SELECT count() FROM table @@ -276,42 +269,41 @@ 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)設定を使用してください。 - -月次パーティショニングのキーにより、適切な範囲の日付を含むデータブロックのみを読み取ることができます。この場合、データブロックには多数の日付(最大で1か月全体)のデータが含まれる可能性があります。ブロック内では、データはプライマリキーでソートされており、プライマリキーの最初のカラムに日付が含まれていない場合があります。このため、プライマリキーの接頭辞を指定しない日付条件のみを使用するクエリでは、単一の日付に対するよりも多くのデータが読み取られることになります。 +クエリ実行時に 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} +月単位のパーティションキーは、指定した範囲に含まれる日付を持つデータブロックだけを読み取れるようにします。この場合、データブロックには多数の日付(最大で 1 か月分)に対応するデータが含まれている可能性があります。ブロック内ではデータは主キーでソートされていますが、主キーの先頭の列として日付が含まれていない場合があります。そのため、主キーのプレフィックスを指定せずに日付条件のみを含むクエリを使用すると、単一の日付だけを対象とする場合よりも多くのデータを読み取ることになります。 +### 部分的に単調な主キーに対するインデックスの利用 {#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} +### データスキップインデックス {#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 +321,7 @@ CREATE TABLE table_name ... ``` -この例のインデックスは、以下のクエリでディスクから読み取るデータ量を削減するためにClickHouseで使用できます: +サンプルで定義したインデックスは、以下のクエリでは ClickHouse がディスクから読み取るデータ量を減らすために利用できます。 ```sql SELECT count() FROM table WHERE u64 == 10; @@ -337,7 +329,7 @@ SELECT count() FROM table WHERE u64 * i32 >= 1234 SELECT count() FROM table WHERE u64 * length(s) == 1234 ``` -データスキップインデックスは複合カラムに対しても作成できます: +データスキップインデックスは複合列にも作成できます: ```sql -- Map型のカラムに対して: @@ -355,88 +347,87 @@ INDEX nested_2_index col.nested_col2 TYPE bloom_filter ### スキップインデックスの種類 {#skip-index-types} -`MergeTree`テーブルエンジンは以下の種類のスキップインデックスをサポートしています。 -スキップインデックスをパフォーマンス最適化に使用する方法の詳細については、 -["ClickHouseデータスキップインデックスの理解"](/optimize/skipping-indexes)を参照してください。 +`MergeTree` テーブルエンジンは、次の種類のスキップインデックスをサポートします。 +スキップインデックスをパフォーマンス最適化にどのように利用できるかについては、 +["ClickHouse のデータスキッピングインデックスを理解する"](/optimize/skipping-indexes) を参照してください。 -- [`MinMax`](#minmax)インデックス -- [`Set`](#set)インデックス -- [`bloom_filter`](#bloom-filter)インデックス -- [`ngrambf_v1`](#n-gram-bloom-filter)インデックス -- [`tokenbf_v1`](#token-bloom-filter)インデックス +* [`MinMax`](#minmax) インデックス +* [`Set`](#set) インデックス +* [`bloom_filter`](#bloom-filter) インデックス +* [`ngrambf_v1`](#n-gram-bloom-filter) インデックス +* [`tokenbf_v1`](#token-bloom-filter) インデックス -#### MinMaxスキップインデックス {#minmax} +#### MinMax スキップインデックス {#minmax} -各インデックスグラニュールに対して、式の最小値と最大値が格納されます。 -(式が`tuple`型の場合、各タプル要素の最小値と最大値が格納されます。) +各インデックスグラニュールごとに、式の最小値と最大値が格納されます。 +(式の型が `tuple` の場合は、各タプル要素ごとに最小値と最大値が格納されます。) -```text title="構文" +```text title="Syntax" minmax ``` #### Set {#set} -各インデックスグラニュールに対して、指定された式の最大`max_rows`個のユニークな値が格納されます。 -`max_rows = 0`は「すべてのユニークな値を格納する」ことを意味します。 +各インデックスグラニュールごとに、指定された式のユニークな値が最大 `max_rows` 個まで保存されます。 +`max_rows = 0` の場合は「すべてのユニークな値を保存する」ことを意味します。 -```text title="構文" +```text title="Syntax" set(max_rows) ``` -#### Bloomフィルタ {#bloom-filter} +#### ブルームフィルタ {#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 ブルームフィルタ {#n-gram-bloom-filter} -各インデックスグラニュールに対して、指定されたカラムの[n-gram](https://en.wikipedia.org/wiki/N-gram)用の[ブルームフィルタ](https://en.wikipedia.org/wiki/Bloom_filter)を格納します。 +各インデックスグラニュールには、指定された列の [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 +445,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,169 +469,161 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -もちろん、これらの関数を使用して他の条件に対するパラメータを推定することもできます。 -上記の関数は[こちら](https://hur.st/bloomfilter)のブルームフィルタ計算機を参照しています。 +もちろん、これらの関数は他の条件のパラメータを見積もるためにも使用できます。 +上記の関数は、ブルームフィルター計算ツール[こちら](https://hur.st/bloomfilter)を参照しています。 -#### トークンブルームフィルタ {#token-bloom-filter} +#### トークンブルームフィルター {#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(ブルームフィルタのサイズ(バイト), ハッシュ関数の数, ランダムシード) ``` +#### スパースグラム Bloom フィルター {#sparse-grams-bloom-filter} -#### スパースグラムブルームフィルター {#sparse-grams-bloom-filter} - -スパースグラムブルームフィルターは`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)を参照してください。 +全文検索をサポートします。詳細は[こちら](invertedindexes.md)を参照してください。 -#### ベクトル類似度 {#vector-similarity} +#### ベクトル類似性 {#vector-similarity} -近似最近傍探索をサポートしています。詳細は[こちら](annindexes.md)を参照してください。 +近似最近傍検索をサポートしています。詳細は[こちら](annindexes.md)をご覧ください。 ### 関数のサポート {#functions-support} -`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) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | - - - -`ngrambf_v1` では、定数引数が ngram のサイズより小さい関数はクエリ最適化に使用できません。 - -(*) `hasTokenCaseInsensitive` および `hasTokenCaseInsensitiveOrNull` を効果的に機能させるには、`tokenbf_v1` インデックスを小文字化したデータに対して作成する必要があります。例えば `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)` のようにします。 +`WHERE` 句の条件式には、カラムを操作する関数呼び出しが含まれます。カラムがインデックスの一部である場合、ClickHouse は関数を評価する際にそのインデックスを利用しようとします。ClickHouse では、インデックスで利用できる関数のサブセットがインデックスタイプごとに異なります。 + +`set` 型のインデックスは、あらゆる関数で利用できます。その他のインデックスタイプは次のようにサポートされます。 + +| 関数(演算子)/ 索引 | 主キー | 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 サイズより小さい関数は使用できません。 + +(*) `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 であることが期待されるクエリの最適化には使用できません。 - -例えば: - -- 最適化できるもの: - - `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` - - `s != 1` - - `NOT startsWith(s, 'test')` -::: +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` + * `s != 1` + * `NOT startsWith(s, 'test')` + ::: ## プロジェクション {#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} +### プロジェクションのストレージ {#projection-storage} -プロジェクションはパートディレクトリ内に保存されます。インデックスに似ていますが、匿名の`MergeTree`テーブルのパートを保存するサブディレクトリを含みます。テーブルはプロジェクションの定義クエリによって生成されます。`GROUP BY`句がある場合、基盤となるストレージエンジンは[AggregatingMergeTree](aggregatingmergetree.md)となり、すべての集約関数は`AggregateFunction`に変換されます。`ORDER BY`句がある場合、`MergeTree`テーブルはそれをプライマリキー式として使用します。マージプロセス中、プロジェクションパートはそのストレージのマージルーチンを介してマージされます。親テーブルのパートのチェックサムはプロジェクションのパートと結合されます。その他のメンテナンス作業はスキップインデックスと同様です。 +プロジェクションはパーツディレクトリ内に保存されます。インデックスに似ていますが、匿名の `MergeTree` テーブルのパーツを保存するサブディレクトリを含みます。このテーブルは、プロジェクションの定義クエリに基づいて定義されます。`GROUP BY` 句がある場合、下層のストレージエンジンは [AggregatingMergeTree](aggregatingmergetree.md) になり、すべての集約関数は `AggregateFunction` に変換されます。`ORDER BY` 句がある場合、`MergeTree` テーブルはそれを主キー式として使用します。マージ処理中、プロジェクションのパーツは、そのストレージのマージルーチンによってマージされます。親テーブルのパーツのチェックサムは、プロジェクションのパーツと組み合わされます。その他のメンテナンス処理はスキップインデックスと同様です。 ### クエリ解析 {#projection-query-analysis} -1. プロジェクションが指定されたクエリに応答するために使用できるかどうか、つまりベーステーブルへのクエリと同じ結果を生成するかどうかを確認します。 -2. 読み取るグラニュールが最も少ない、最適な実行可能な一致を選択します。 -3. プロジェクションを使用するクエリパイプラインは、元のパートを使用するものとは異なります。一部のパートでプロジェクションが存在しない場合、その場で「プロジェクト」するパイプラインを追加できます。 - +1. プロジェクションがベーステーブルに対するクエリと同じ結果を生成し、与えられたクエリに対する回答として利用できるかを確認します。 +2. 読み取る必要があるグラニュール数が最も少ない、実行可能な最適な一致を選択します。 +3. プロジェクションを利用するクエリパイプラインは、元のパーツを利用するものとは異なります。あるパーツにプロジェクションが存在しない場合、その場で「投影」するためのパイプラインを追加できます。 ## 同時データアクセス {#concurrent-data-access} -テーブルへの同時アクセスには、マルチバージョニングを使用しています。つまり、テーブルの読み取りと更新が同時に行われる場合、データはクエリ実行時点で最新のパーツセットから読み取られます。長時間のロックは発生しません。挿入操作が読み取り操作を妨げることはありません。 +テーブルへの同時アクセスにはマルチバージョン方式を使用します。つまり、テーブルで読み取りと更新が同時に行われている場合でも、クエリ時点で有効なパーツの集合からデータが読み取られます。長時間にわたるロックは発生しません。挿入処理が読み取り操作の妨げになることもありません。 テーブルからの読み取りは自動的に並列化されます。 +## 列およびテーブルの TTL {#table_engine-mergetree-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} +### カラム TTL {#mergetree-column-ttl} -カラム内の値が期限切れになると、ClickHouseはそれらをカラムデータ型のデフォルト値で置き換えます。データパート内のすべてのカラム値が期限切れになった場合、ClickHouseはファイルシステム内のデータパートからこのカラムを削除します。 +カラム内の値の有効期限が切れると、ClickHouse はそれらをカラムのデータ型におけるデフォルト値に置き換えます。データパート内のそのカラムの値がすべて有効期限切れになった場合、ClickHouse はファイルシステム上のそのデータパートからこのカラムを削除します。 -`TTL`句はキーカラムには使用できません。 +`TTL` 句はキー列には使用できません。 **例** -#### `TTL`を使用したテーブルの作成: {#creating-a-table-with-ttl} +#### `TTL` を設定したテーブルの作成: {#creating-a-table-with-ttl} ```sql CREATE TABLE tab @@ -655,7 +638,7 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### 既存テーブルのカラムにTTLを追加する {#adding-ttl-to-a-column-of-an-existing-table} +#### 既存のテーブルの列に TTL を追加する {#adding-ttl-to-a-column-of-an-existing-table} ```sql ALTER TABLE tab @@ -663,7 +646,7 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### カラムのTTLを変更する {#altering-ttl-of-the-column} +#### 列のTTLを変更する {#altering-ttl-of-the-column} ```sql ALTER TABLE tab @@ -671,9 +654,9 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 MONTH; ``` -### テーブルTTL {#mergetree-table-ttl} +### テーブルの TTL {#mergetree-table-ttl} -テーブルには、期限切れ行を削除するための式と、[ディスクまたはボリューム](#table_engine-mergetree-multiple-volumes)間でパーツを自動的に移動するための複数の式を設定できます。テーブル内の行が期限切れになると、ClickHouseは対応するすべての行を削除します。パーツの移動または再圧縮の場合、パーツのすべての行が`TTL`式の条件を満たす必要があります。 +テーブルには、有効期限が切れた行を削除するための式と、[ディスクまたはボリューム](#table_engine-mergetree-multiple-volumes)間でパーツを自動的に移動するための複数の式を定義できます。テーブル内の行が有効期限切れになると、ClickHouse は対応する行をすべて削除します。パーツの移動または再圧縮が行われるためには、そのパーツ内のすべての行が `TTL` 式の条件を満たしている必要があります。 ```sql TTL expr @@ -682,27 +665,27 @@ 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` を指定したテーブルの作成: {#creating-a-table-with-ttl-1} ```sql CREATE TABLE tab @@ -718,15 +701,14 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### テーブルの`TTL`を変更する: {#altering-ttl-of-the-table} +#### テーブルの `TTL` を変更する: {#altering-ttl-of-the-table} ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -1ヶ月後に行の有効期限が切れるテーブルを作成します。日付が月曜日である期限切れの行は削除されます: +行が 1 か月後に期限切れとなるテーブルを作成します。期限切れとなった行のうち、日付が月曜日であるものが削除されます。 ```sql CREATE TABLE table_with_where @@ -755,7 +737,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 @@ -773,63 +755,61 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ### 期限切れデータの削除 {#mergetree-removing-expired-data} -`TTL`が期限切れとなったデータは、ClickHouseがデータパートをマージする際に削除されます。 +`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} +* [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} -`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} -- 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} +### 設定 {#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 +830,13 @@ ClickHouseがデータの期限切れを検出すると、スケジュール外 タグ: -- `` — ディスク名。すべてのディスクで名前は一意でなければなりません。 -- `path` — サーバーがデータを格納するパス(`data` および `shadow` フォルダ)、末尾に '/' を付ける必要があります。 -- `keep_free_space_bytes` — 予約する空きディスク容量の量。 +* `` — ディスク名。すべてのディスクで名前が重複しないようにする必要があります。 +* `path` — サーバーがデータ(`data` および `shadow` フォルダ)を保存するパス。末尾は '/' で終わる必要があります。 +* `keep_free_space_bytes` — 予約しておく空きディスク容量のバイト数。 -ディスクの定義順序は重要ではありません。 +ディスク定義の順序は重要ではありません。 -ストレージポリシーの設定マークアップ: +ストレージポリシー構成のマークアップ: ```xml @@ -870,17 +850,17 @@ ClickHouseがデータの期限切れを検出すると、スケジュール外 round_robin - + - + 0.2 - + - + ... @@ -888,23 +868,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 @@ -947,16 +926,15 @@ Configuration examples: ``` +この例では、`hdd_in_order` ポリシーは [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling) 方式を実装しています。そのため、このポリシーは 1 つのボリューム(`single`)のみを定義し、そのすべてのディスク上にデータパーツをラウンドロビンで保存します。RAID を構成していないものの、同種のディスクが複数台システムにマウントされている場合、このようなポリシーは非常に有用です。各ディスクドライブ単体は信頼性が高くないことに注意し、レプリケーション係数を 3 以上にして補償することを検討してください。 -この例では、`hdd_in_order` ポリシーは [ラウンドロビン](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 +948,44 @@ PARTITION BY toYYYYMM(EventDate) SETTINGS storage_policy = 'moving_from_ssd_to_hdd' ``` -`default` ストレージポリシーは、`` で指定された1つのディスクのみで構成される1つのボリュームのみを使用することを意味します。 -テーブル作成後に [ALTER TABLE ... MODIFY SETTING] クエリでストレージポリシーを変更できますが、新しいポリシーには同じ名前のすべての古いディスクとボリュームを含める必要があります。 +`default` ストレージポリシーは、`` で指定された 1 つのディスクのみから構成される 1 つのボリュームだけを使用することを意味します。 +テーブル作成後でも [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} -`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`)を持つディスクが選択されます。 +`MergeTree` テーブルの場合、データは次のようなさまざまな方法でディスクに書き込まれます。 -内部的には、ミューテーションとパーティションフリーズは [ハードリンク](https://en.wikipedia.org/wiki/Hard_link) を使用します。異なるディスク間のハードリンクはサポートされていないため、このような場合、結果のパーツは初期のパーツと同じディスクに格納されます。 +* 挿入(`INSERT` クエリ)の結果として。 +* バックグラウンドでのマージおよび[ミューテーション](/sql-reference/statements/alter#mutations)の実行中。 +* 別のレプリカからのダウンロード時。 +* パーティションのフリーズ [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-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) を使用して、パーツまたはパーティションをあるボリュームから別のボリュームに強制的に移動できます。バックグラウンド操作のすべての制限が考慮されます。このクエリは独自に移動を開始し、バックグラウンド操作の完了を待ちません。十分な空き容量がない場合、または必要な条件のいずれかが満たされていない場合、ユーザーはエラーメッセージを受け取ります。 +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)を利用します。異なるディスク間のハードリンクはサポートされないため、このような場合には結果として生成されるパーツは元のパーツと同じディスク上に保存されます。 +バックグラウンドでは、設定ファイル内で宣言されたボリュームの順序に従い、空き容量(`move_factor` パラメータ)に基づいてパーツがボリューム間で移動されます。 +最後のボリュームから他のボリュームへの移動および他のボリュームから最初のボリュームへの移動は行われません。バックグラウンドでの移動は、システムテーブル [system.part_log](/operations/system-tables/part_log)(フィールド `type = MOVE_PART`)および [system.parts](/operations/system-tables/parts.md)(フィールド `path` と `disk`)を使用して監視できます。より詳細な情報はサーバーログで確認できます。 -バックグラウンドで実行されるマージおよびミューテーションが完了した後、古いパーツは、一定時間(`old_parts_lifetime`)が経過してから削除されます。 -この間、それらは他のボリュームやディスクに移動されません。したがって、パーツが最終的に削除されるまでは、ディスク使用量の算出に引き続き含まれます。 +ユーザーは、クエリ [ALTER TABLE ... MOVE PART|PARTITION ... TO VOLUME|DISK ...](/sql-reference/statements/alter/partition) を使用して、パーツまたはパーティションをあるボリュームから別のボリュームへ強制的に移動できます。バックグラウンド操作に対するすべての制約が考慮されます。このクエリは独自に移動処理を開始し、バックグラウンド操作の完了を待ちません。必要な空き容量が不足している場合や、必要条件のいずれかが満たされていない場合、ユーザーにはエラーメッセージが返されます。 -ユーザーは、[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} +## データの保存に外部ストレージを使用する {#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 +1031,32 @@ 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` — ストレージに使用されるディスク名。 - +* `_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 +1068,68 @@ 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` - 数値カラムに対して近似パーセンタイル(例: 90パーセンタイル)を計算できる[TDigest](https://github.com/tdunning/t-digest)スケッチです。 + 数値型列に対して近似パーセンタイル(例: 第90パーセンタイル)を計算できる [TDigest](https://github.com/tdunning/t-digest) スケッチ。 構文: `tdigest` -- `Uniq` +* `Uniq` - カラムに含まれる個別値の数を推定する[HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog)スケッチです。 + 列に含まれる異なる値の個数を推定する [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) スケッチ。 構文: `uniq` -- `CountMin` +* `CountMin` - カラム内の各値の出現頻度の近似カウントを提供する[CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch)スケッチです。 + 列内の各値の出現頻度を近似的にカウントする [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) スケッチ。 構文: `countmin` -### サポートされるデータ型 {#supported-data-types} +### サポートされているデータ型 {#supported-data-types} -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String or FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String または FixedString | +|-----------|----------------------------------------------------|---------------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | ### サポートされる操作 {#supported-operations} -| | 等価フィルタ (==) | 範囲フィルタ (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | +| | 等値フィルター (==) | 範囲フィルター (`>, >=, <, <=`) | +|-----------|---------------------|------------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | +## 列レベルの設定 {#column-level-settings} -## カラムレベルの設定 {#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 +1141,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/mergetree-family/replacingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md index f99bba71216..b99d8c9080b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# ReplacingMergeTree テーブルエンジン +# ReplacingMergeTree テーブルエンジン {#replacingmergetree-table-engine} このエンジンは、[MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) とは異なり、同じ[ソートキー](../../../engines/table-engines/mergetree-family/mergetree.md)値(テーブル定義の `ORDER BY` セクションで指定されるもので、`PRIMARY KEY` ではありません)を持つ重複エントリを削除します。 @@ -24,7 +24,7 @@ doc_type: 'reference' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -47,9 +47,9 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ::: -## ReplacingMergeTree のパラメーター +## ReplacingMergeTree のパラメーター {#replacingmergetree-parameters} -### `ver` +### `ver` {#ver} `ver` — バージョン番号を保持するカラム。型は `UInt*`、`Date`、`DateTime` または `DateTime64`。省略可能なパラメーターです。 @@ -101,7 +101,7 @@ SELECT * FROM mySecondReplacingMT FINAL; └─────┴─────────┴─────────────────────┘ ``` -### `is_deleted` +### `is_deleted` {#is_deleted} `is_deleted` — マージ処理の際に、この行のデータが「状態」を表すのか、あるいは削除対象なのかを判定するために使用されるカラム名です。`1` は「削除された」行、`0` は「状態」の行を表します。 @@ -190,7 +190,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## クエリ時の重複排除と `FINAL` +## クエリ時の重複排除と `FINAL` {#query-time-de-duplication--final} マージ処理の際に、ReplacingMergeTree は `ORDER BY` 列(テーブル作成時に使用した列)の値を一意の識別子として用いて重複行を識別し、最も新しいバージョンのみを保持します。ただし、これはあくまで最終的な整合性しか提供せず、行が必ず重複排除されることを保証するものではないため、これに依存すべきではありません。その結果、更新行や削除行がクエリで考慮されることにより、クエリが誤った結果を返す可能性があります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md index 6688eef453e..3adfbb4057c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md @@ -1,5 +1,5 @@ --- -description: 'ClickHouse における Replicated* ファミリーのテーブルエンジンによるデータレプリケーションの概要' +description: 'ClickHouse における Replicated* ファミリーのテーブルエンジンを用いたデータレプリケーションの概要' sidebar_label: 'Replicated*' sidebar_position: 20 slug: /engines/table-engines/mergetree-family/replication @@ -7,12 +7,10 @@ title: 'Replicated* テーブルエンジン' doc_type: 'reference' --- - - -# Replicated* テーブルエンジン +# Replicated* table engines {#replicated-table-engines} :::note -ClickHouse Cloud ではレプリケーションは自動的に管理されます。引数を追加せずにテーブルを作成してください。たとえば、以下のテキスト中の次の部分を置き換えてください: +ClickHouse Cloud ではレプリケーションは ClickHouse Cloud が管理します。テーブルを作成する際は、引数を追加せずに作成してください。たとえば、以下のテキストでは次のように書き換えてください。 ```sql ENGINE = ReplicatedMergeTree( @@ -21,7 +19,7 @@ ENGINE = ReplicatedMergeTree( ) ``` -次の内容で: +以下のとおり: ```sql ENGINE = ReplicatedMergeTree @@ -29,7 +27,7 @@ ENGINE = ReplicatedMergeTree ::: -レプリケーションは MergeTree ファミリーのテーブルに対してのみサポートされます: +レプリケーションは、MergeTree ファミリーのテーブルに対してのみサポートされています: * ReplicatedMergeTree * ReplicatedSummingMergeTree @@ -39,24 +37,24 @@ ENGINE = ReplicatedMergeTree * ReplicatedVersionedCollapsingMergeTree * ReplicatedGraphiteMergeTree -レプリケーションはサーバー全体ではなく、個々のテーブル単位で行われます。1 つのサーバー上に、レプリケートされたテーブルとレプリケートされていないテーブルを同時に保持できます。 +レプリケーションはサーバー全体ではなく、個々のテーブル単位で動作します。1 台のサーバー上で、レプリケーション対象のテーブルと非レプリケーションテーブルを同時に保存できます。 -レプリケーションはシャーディングに依存しません。各シャードがそれぞれ独立してレプリケーションを行います。 +レプリケーションは分片に依存しません。各分片はそれぞれ独立してレプリケーションされます。 -`INSERT` および `ALTER` クエリで圧縮されたデータはレプリケートされます(詳細については、[ALTER](/sql-reference/statements/alter) のドキュメントを参照してください)。 +`INSERT` および `ALTER` クエリの圧縮データがレプリケーションされます(詳細は [ALTER](/sql-reference/statements/alter) のドキュメントを参照してください)。 -`CREATE`、`DROP`、`ATTACH`、`DETACH`、`RENAME` クエリは単一のサーバー上で実行され、レプリケートされません: +`CREATE`、`DROP`、`ATTACH`、`DETACH`、`RENAME` クエリは単一のサーバー上で実行され、レプリケーションされません: -* `CREATE TABLE` クエリは、そのクエリが実行されたサーバー上に新しいレプリケート可能なテーブルを作成します。このテーブルがすでに他のサーバー上に存在する場合は、新しいレプリカを追加します。 -* `DROP TABLE` クエリは、そのクエリが実行されたサーバー上にあるレプリカを削除します。 -* `RENAME` クエリは、レプリカの 1 つにあるテーブルの名前を変更します。言い換えると、レプリケートされたテーブルは、レプリカごとに異なる名前を持つことができます。 +* `CREATE TABLE` クエリは、クエリが実行されたサーバー上に新しいレプリケーション対応テーブルを作成します。このテーブルが他のサーバー上に既に存在する場合は、新しいレプリカを追加します。 +* `DROP TABLE` クエリは、クエリが実行されたサーバー上にあるレプリカを削除します。 +* `RENAME` クエリは、レプリカの 1 つでテーブル名を変更します。言い換えると、レプリケーションされたテーブルは、レプリカごとに異なる名前を持つことができます。 -ClickHouse はレプリカのメタ情報を保存するために [ClickHouse Keeper](/guides/sre/keeper/index.md) を使用します。ZooKeeper のバージョン 3.4.5 以降を使用することも可能ですが、ClickHouse Keeper を推奨します。 +ClickHouse は、レプリカのメタ情報を保存するために [ClickHouse Keeper](/guides/sre/keeper/index.md) を使用します。ZooKeeper バージョン 3.4.5 以降を使用することもできますが、ClickHouse Keeper を推奨します。 -レプリケーションを使用するには、[zookeeper](/operations/server-configuration-parameters/settings#zookeeper) サーバー設定セクションでパラメータを設定します。 +レプリケーションを使用するには、[zookeeper](/operations/server-configuration-parameters/settings#zookeeper) サーバー設定セクションでパラメーターを設定します。 :::note -セキュリティ設定をおろそかにしないでください。ClickHouse は ZooKeeper のセキュリティサブシステムの `digest` [ACL スキーム](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl) をサポートしています。 +セキュリティ設定を軽視しないでください。ClickHouse は ZooKeeper のセキュリティサブシステムの `digest` [ACL スキーム](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl) をサポートしています。 ::: ClickHouse Keeper クラスターのアドレスを設定する例: @@ -78,10 +76,10 @@ ClickHouse Keeper クラスターのアドレスを設定する例: ``` -ClickHouse は、補助的な ZooKeeper クラスターにレプリカのメタ情報を保存することもサポートしています。これを行うには、エンジンの引数として ZooKeeper クラスター名とパスを指定します。 -言い換えると、テーブルごとに異なる ZooKeeper クラスターにメタデータを保存することをサポートしています。 +ClickHouse は、補助 ZooKeeper クラスターにレプリカのメタデータを保存することもサポートしています。これを行うには、エンジンの引数として ZooKeeper クラスター名とパスを指定します。 +言い換えると、異なるテーブルのメタデータを異なる ZooKeeper クラスターに保存することをサポートしています。 -補助的な ZooKeeper クラスターのアドレス設定例: +補助 ZooKeeper クラスターのアドレスを設定する例: ```xml @@ -108,60 +106,58 @@ ClickHouse は、補助的な ZooKeeper クラスターにレプリカのメタ ``` -テーブルメタデータをデフォルトの ZooKeeper クラスターではなく補助的な ZooKeeper クラスターに保存するには、次のように -ReplicatedMergeTree エンジンを指定してテーブルを作成する SQL を使用します。 +テーブルメタデータをデフォルトの ZooKeeper クラスターではなく別の ZooKeeper クラスターに保存するには、次のように +ReplicatedMergeTree エンジンを使用して SQL でテーブルを作成します。 ```sql CREATE TABLE table_name ( ... ) ENGINE = ReplicatedMergeTree('zookeeper_name_configured_in_auxiliary_zookeepers:path', 'replica_name') ... ``` -任意の既存の ZooKeeper クラスターを指定でき、システムはそのクラスター上のディレクトリを自身のデータ用として使用します(このディレクトリはレプリケーテッドテーブルを作成するときに指定します)。 - -config ファイルで ZooKeeper が設定されていない場合、レプリケーテッドテーブルを作成できず、既存のレプリケーテッドテーブルは読み取り専用になります。 +既存の任意の ZooKeeper クラスターを指定でき、システムはそのクラスター上のディレクトリを自身のデータ用に使用します(どのディレクトリを使うかはレプリケーテッドテーブルを作成するときに指定します)。 +設定ファイルで ZooKeeper が設定されていない場合、レプリケーテッドテーブルを作成することはできず、既存のレプリケーテッドテーブルは読み取り専用になります。 -ZooKeeper は `SELECT` クエリでは使用されません。これは、レプリケーションが `SELECT` のパフォーマンスに影響せず、レプリケートされていないテーブルと同じ速度でクエリが実行されるためです。分散レプリケートテーブルに対してクエリを実行する場合、ClickHouse の動作は設定項目 [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) と [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries) によって制御されます。 -各 `INSERT` クエリごとに、おおよそ 10 個のエントリが複数のトランザクションを通して ZooKeeper に追加されます。(より正確には、これは挿入される各データブロックごとです。1 つの `INSERT` クエリには 1 つのブロック、もしくは `max_insert_block_size = 1048576` 行ごとに 1 ブロックが含まれます。)このため、レプリケートされていないテーブルと比較して `INSERT` のレイテンシーがわずかに長くなります。ただし、1 秒あたり 1 回以下の `INSERT` でデータをバッチ挿入するという推奨事項に従えば、問題は発生しません。1 つの ZooKeeper クラスターをコーディネーションに使用している ClickHouse クラスター全体で、1 秒あたり数百件程度の `INSERT` が発生します。データ挿入時のスループット(1 秒あたりの行数)は、レプリケートされていないデータと同程度に高いままです。 +ZooKeeper は `SELECT` クエリでは使用されません。これは、レプリケーションが `SELECT` のパフォーマンスに影響せず、非レプリケートなテーブルと同じ速度でクエリが実行されるためです。分散レプリケートテーブルに対してクエリを実行する場合、ClickHouse の動作は [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) と [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries) の設定で制御されます。 -非常に大規模なクラスターでは、シャードごとに別々の ZooKeeper クラスターを使用できます。しかし、運用クラスター(およそ 300 台のサーバー)での実運用経験からは、その必要性は確認されていません。 +各 `INSERT` クエリごとに、複数のトランザクションを通じておおよそ 10 個のエントリが ZooKeeper に追加されます。(より正確には、これは挿入される各データブロックごとであり、1 つの INSERT クエリには 1 ブロック、または `max_insert_block_size = 1048576` 行ごとに 1 ブロックが含まれます。)これにより、非レプリケートなテーブルと比べて `INSERT` のレイテンシがわずかに長くなります。ただし、1 秒あたり 1 回以下の `INSERT` でバッチ挿入するという推奨事項に従えば、問題は発生しません。1 つの ZooKeeper クラスターで調停される ClickHouse クラスター全体で、1 秒あたり数百件の `INSERTs` が行われます。データ挿入のスループット(1 秒あたりの行数)は、非レプリケートなデータの場合と同じく高いままです。 -レプリケーションは非同期かつマルチマスターです。`INSERT` クエリ(および `ALTER`)は、利用可能な任意のサーバーに送信できます。データはクエリが実行されたサーバーに挿入され、その後他のサーバーへコピーされます。非同期であるため、最近挿入されたデータは、他のレプリカには一定のレイテンシーを伴って反映されます。一部のレプリカが利用できない場合、利用可能になった時点でデータが書き込まれます。レプリカが利用可能な場合、レイテンシーは圧縮データブロックをネットワーク経由で転送する時間に相当します。レプリケートテーブルに対してバックグラウンドタスクを実行するスレッド数は、[background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size) 設定で指定できます。 +非常に大きなクラスターでは、分片ごとに異なる ZooKeeper クラスターを使用できます。しかし、実運用クラスター(約 300 台のサーバー)に基づく当社の経験では、その必要性は確認されていません。 -`ReplicatedMergeTree` エンジンは、レプリケーションのフェッチ用に専用のスレッドプールを使用します。プールのサイズは [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size) 設定によって制限されており、サーバーの再起動によって調整できます。 +レプリケーションは非同期かつマルチマスターです。`INSERT` クエリ(および `ALTER`)は、利用可能な任意のサーバーに送信できます。データはクエリが実行されたサーバーに挿入され、その後ほかのサーバーにコピーされます。非同期であるため、直近に挿入されたデータがほかのレプリカに反映されるまでにはある程度のレイテンシがあります。レプリカの一部が利用できない場合、そのレプリカが再び利用可能になった時点でデータが書き込まれます。レプリカが利用可能である場合、レイテンシは圧縮データブロックをネットワーク越しに転送するのにかかる時間となります。レプリケートテーブルのバックグラウンドタスクを実行するスレッド数は、[background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size) 設定で指定できます。 -デフォルトでは、`INSERT` クエリは 1 つのレプリカからのデータ書き込みの確認だけを待ちます。もしデータが 1 つのレプリカにしか正常に書き込まれず、そのレプリカを持つサーバーが消失した場合、そのデータは失われます。複数のレプリカからの書き込み確認を有効にするには、`insert_quorum` オプションを使用します。 +`ReplicatedMergeTree` エンジンは、レプリケートのフェッチ処理用に別のスレッドプールを使用します。プールのサイズは [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size) 設定で制限されており、この設定はサーバーの再起動によって調整できます。 -各データブロックはアトミックに書き込まれます。`INSERT` クエリは、最大 `max_insert_block_size = 1048576` 行までのブロックに分割されます。言い換えると、`INSERT` クエリの行数が 1048576 行未満であれば、そのクエリ全体がアトミックに処理されます。 +デフォルトでは、INSERT クエリは 1 つのレプリカからのみデータ書き込み完了の確認を待ちます。1 つのレプリカにしかデータが正常に書き込まれず、そのレプリカを保持しているサーバーが消失した場合、保存されたデータは失われます。複数のレプリカからデータ書き込みの確認を取得できるようにするには、`insert_quorum` オプションを使用します。 -データブロックは重複排除されます。同じデータブロック(同じサイズで、同じ行が同じ順序で含まれているデータブロック)を複数回書き込もうとした場合、そのブロックは 1 度だけ書き込まれます。これは、ネットワーク障害が発生した際に、クライアントアプリケーション側でデータが DB に書き込まれたかどうかを判断できない場合でも、`INSERT` クエリを単純に再送できるようにするためです。同一データを持つ `INSERT` がどのレプリカに送信されたかは関係ありません。`INSERTs` は冪等です。重複排除のパラメータは、[merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree) サーバー設定で制御されます。 +各データブロックはアトミックに書き込まれます。INSERT クエリは `max_insert_block_size = 1048576` 行までのブロックに分割されます。言い換えると、`INSERT` クエリの行数が 1048576 行未満であれば、そのクエリはアトミックに処理されます。 -レプリケーション時には、挿入対象の元データのみがネットワーク経由で転送されます。その後のデータ変換(マージ)は、すべてのレプリカで同じようにコーディネートされ、実行されます。これによりネットワーク使用量が最小化されるため、レプリカが異なるデータセンターに配置されている場合でもレプリケーションは良好に動作します(異なるデータセンター間でデータを複製することがレプリケーションの主な目的である点に注意してください)。 +データブロックは重複排除されます。同一のデータブロック(同じサイズで、同じ行が同じ順序で含まれるデータブロック)を複数回書き込もうとした場合、そのブロックは 1 回だけ書き込まれます。これは、ネットワーク障害が発生した場合にクライアントアプリケーションがデータが DB に書き込まれたかどうかを判断できないため、`INSERT` クエリを単純にリトライできるようにするためです。同一データの INSERT がどのレプリカに送信されたかは問題になりません。`INSERTs` は冪等です。重複排除のパラメータは、[merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree) サーバー設定で制御されます。 -同じデータに対して任意の数のレプリカを持つことができます。これまでの経験では、本番運用では二重レプリケーション(ダブルレプリケーション)を用い、各サーバーで RAID-5 または RAID-6(場合によっては RAID-10)を使用する構成が、比較的信頼性が高く扱いやすいソリューションとなり得ます。 +レプリケーション中は、挿入対象の元データのみがネットワーク経由で転送されます。その後のデータ変換(マージ処理)は、すべてのレプリカ上で同じ方法で調整・実行されます。これによりネットワーク使用量が最小化されるため、レプリカが異なるデータセンターに存在する場合でもレプリケーションは良好に動作します。(異なるデータセンター間でデータを複製することが、レプリケーションの主な目的であることに注意してください。) -システムはレプリカ上のデータの同期状態を監視し、障害発生後に復旧することができます。フェイルオーバーは自動(データ差分が小さい場合)あるいは半自動(データの差異が大きい場合。この場合は設定ミスを示している可能性があります)で行われます。 +同じデータのレプリカ数は任意の数にできます。当社の経験に基づくと、本番環境では各サーバーで RAID-5 または RAID-6(場合によっては RAID-10)を使用した二重レプリケーション構成が、比較的信頼性が高く扱いやすい解決策となりえます。 +システムはレプリカ間のデータ同期状態を監視し、障害発生後に復旧することができます。フェイルオーバーは自動(データの差分が小さい場合)または半自動(データ差分が大きく、設定ミスを示している可能性がある場合)で行われます。 - -## レプリケーテッドテーブルの作成 +## レプリケートテーブルの作成 {#creating-replicated-tables} :::note -ClickHouse Cloud では、レプリケーションは自動的に行われます。 +ClickHouse Cloud では、レプリケーションは自動的に処理されます。 レプリケーション引数を指定せずに [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) を使用してテーブルを作成します。システムは内部的に、レプリケーションとデータ分散のために [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) を [`SharedMergeTree`](/cloud/reference/shared-merge-tree) に書き換えます。 -レプリケーションはプラットフォームによって管理されるため、`ReplicatedMergeTree` を使用したり、レプリケーションパラメータを指定したりすることは避けてください。 +レプリケーションはプラットフォーム側で管理されるため、`ReplicatedMergeTree` の使用やレプリケーションパラメータの指定は避けてください。 ::: -### Replicated*MergeTree のパラメータ +### Replicated*MergeTree のパラメータ {#replicatedmergetree-parameters} -| Parameter | Description | -| ------------------ | ------------------------------------------------------------------------------- | -| `zoo_path` | ClickHouse Keeper 内のテーブルへのパス。 | -| `replica_name` | ClickHouse Keeper 内のレプリカ名。 | -| `other_parameters` | レプリケートされたバージョンを作成するために使用されるエンジンのパラメータ。たとえば、`ReplacingMergeTree` の `version` など。 | +| Parameter | Description | +| ------------------ | ----------------------------------------------------------------------------- | +| `zoo_path` | ClickHouse Keeper におけるテーブルへのパス。 | +| `replica_name` | ClickHouse Keeper におけるレプリカ名。 | +| `other_parameters` | レプリケートされたテーブルを作成する際に使用されるエンジンのパラメータ。例えば、`ReplacingMergeTree` における version など。 | 例: @@ -172,6 +168,7 @@ CREATE TABLE table_name CounterID UInt32, UserID UInt32, ver UInt16 +) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}', ver) PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) @@ -179,7 +176,7 @@ SAMPLE BY intHash32(UserID); ```
- 非推奨構文の例 + 非推奨の構文の例 ```sql CREATE TABLE table_name @@ -191,7 +188,7 @@ SAMPLE BY intHash32(UserID); ```
-この例が示すように、これらのパラメータには波括弧内に置換文字列を含めることができます。置換される値は、設定ファイルの[macros](/operations/server-configuration-parameters/settings.md/#macros)セクションから取得されます。 +この例が示すように、これらのパラメータには波括弧で囲まれた置換用プレースホルダーを含めることができます。置換される値は、設定ファイルの [macros](/operations/server-configuration-parameters/settings.md/#macros) セクションから取得されます。 例: @@ -202,33 +199,33 @@ SAMPLE BY intHash32(UserID); ``` -ClickHouse Keeper 内のテーブルへのパスは、レプリケートされた各テーブルごとに一意である必要があります。異なるシャード上のテーブルは、それぞれ異なるパスを持つ必要があります。 -この場合、パスは次の要素から構成されます。 +ClickHouse Keeper 内のテーブルへのパスは、各レプリケーテッドテーブルごとに一意である必要があります。異なる分片上のテーブルは、異なるパスを持たなければなりません。 +この場合、パスは次の要素で構成されます。 -`/clickhouse/tables/` は共通のプレフィックスです。この文字列をそのまま使用することを推奨します。 +`/clickhouse/tables/` は共通のプレフィックスです。このプレフィックスをそのまま使用することを推奨します。 -`{shard}` はシャード識別子に展開されます。 +`{shard}` は分片の識別子に展開されます。 -`table_name` は ClickHouse Keeper 内でのテーブル用ノードの名前です。テーブル名と同じにしておくと良いでしょう。テーブル名とは異なり、`RENAME` クエリを実行しても変わらないため、明示的に定義します。 -*HINT*: `table_name` の前にデータベース名を付けることもできます。例: `db_name.table_name` +`table_name` は ClickHouse Keeper 内でのテーブル用ノード名です。テーブル名と同一にしておくとよいでしょう。これは明示的に定義されます。テーブル名と異なり、RENAME クエリの後でも変更されないためです。 +*ヒント*: `table_name` の前にデータベース名を追加することもできます。例: `db_name.table_name` -2 つの組み込み置換 `{database}` と `{table}` を使用できます。これらはそれぞれテーブル名とデータベース名に展開されます(`macros` セクションでこれらのマクロが定義されていない場合)。したがって、ZooKeeper パスは `'/clickhouse/tables/{shard}/{database}/{table}'` のように指定できます。 -これらの組み込み置換を使用する場合、テーブル名の変更には注意してください。ClickHouse Keeper 内のパスは変更できず、テーブル名を変更するとマクロは別のパスに展開されます。その結果、テーブルは ClickHouse Keeper 内に存在しないパスを参照することになり、読み取り専用モードに移行します。 +2 つの組み込み置換 `{database}` と `{table}` を使用できます。これらはそれぞれテーブル名とデータベース名に展開されます(これらのマクロが `macros` セクションで定義されていない限り)。したがって、ZooKeeper のパスは `'/clickhouse/tables/{shard}/{database}/{table}'` のように指定できます。 +これらの組み込み置換を使用する場合、テーブル名の変更には注意してください。ClickHouse Keeper 内のパスは変更できず、テーブル名が変更されるとマクロは別のパスに展開されます。その結果、テーブルは ClickHouse Keeper 内に存在しないパスを参照することになり、読み取り専用モードに移行します。 -レプリカ名は同一テーブルの異なるレプリカを識別します。例にあるようにサーバー名を使用できます。名前は各シャード内で一意であれば十分です。 +レプリカ名は同一テーブルの異なるレプリカを識別します。例にあるように、サーバー名を利用できます。この名前は各分片内で一意であれば十分です。 -置換を使用せずにパラメータを明示的に定義することもできます。これはテスト時や小規模クラスタの設定には便利な場合があります。しかし、この場合は分散 DDL クエリ(`ON CLUSTER`)は使用できません。 +置換を使用せずにパラメータを明示的に定義することもできます。これはテストや小規模クラスタの構成には便利かもしれません。ただし、この場合は分散 DDL クエリ (`ON CLUSTER`) を使用することはできません。 -大規模クラスタを扱う場合は、誤りの可能性を減らすために置換を使用することを推奨します。 +大規模クラスタで作業する際には、エラー発生の可能性を低減できるため、置換を使用することを推奨します。 -サーバー設定ファイル内で `Replicated` テーブルエンジンのデフォルト引数を指定できます。例えば次のようにします: +`Replicated` テーブルエンジンのデフォルト引数は、サーバー設定ファイルで指定できます。たとえば次のようにします: ```xml /clickhouse/tables/{shard}/{database}/{table} {replica} ``` -この場合、テーブル作成時の引数は省略できます。 +この場合はテーブル作成時に引数を省略できます。 ```sql CREATE TABLE table_name ( @@ -237,8 +234,7 @@ CREATE TABLE table_name ( ORDER BY x; ``` -これは次と同等です: - +次のとおりです: ```sql CREATE TABLE table_name ( @@ -247,106 +243,102 @@ CREATE TABLE table_name ( ORDER BY x; ``` -各レプリカで `CREATE TABLE` クエリを実行します。このクエリは新しいレプリケーテッドテーブルを作成するか、既存のテーブルに新しいレプリカを追加します。 +各レプリカで `CREATE TABLE` クエリを実行します。このクエリは、新しいレプリケートされたテーブルを作成するか、既存のテーブルに新しいレプリカを追加します。 -テーブルにすでに他のレプリカ上のデータが存在する状態で新しいレプリカを追加した場合、そのクエリを実行した後に、他のレプリカから新しいレプリカへデータがコピーされます。言い換えると、新しいレプリカは自動的に他のレプリカと同期されます。 +他のレプリカ上のテーブルにすでにデータが存在している状態で新しいレプリカを追加した場合、クエリ実行後にデータは他のレプリカから新しいレプリカへコピーされます。言い換えると、新しいレプリカは他のレプリカと同期されます。 -レプリカを削除するには、`DROP TABLE` を実行します。ただし、削除されるのは 1 つのレプリカのみであり、それはクエリを実行したサーバー上に存在するレプリカです。 +レプリカを削除するには、`DROP TABLE` を実行します。ただし、削除されるレプリカは 1 つだけであり、クエリを実行したサーバー上に存在するレプリカのみが削除されます。 -## 障害発生後のリカバリ +## 障害発生後のリカバリ {#recovery-after-failures} -サーバー起動時に ClickHouse Keeper が使用できない場合、レプリケートテーブルは読み取り専用モードに切り替わります。システムは定期的に ClickHouse Keeper への接続を試行します。 +サーバー起動時に ClickHouse Keeper が使用できない場合、レプリケーテッドテーブルは読み取り専用モードに切り替わります。システムは定期的に ClickHouse Keeper への接続を試行します。 -`INSERT` の実行中に ClickHouse Keeper が使用できない場合、または ClickHouse Keeper とのやり取り時にエラーが発生した場合は、例外がスローされます。 +`INSERT` の実行中に ClickHouse Keeper が使用できない場合、または ClickHouse Keeper とのやり取り中にエラーが発生した場合、例外がスローされます。 -ClickHouse Keeper への接続後、システムはローカルファイルシステム上のデータセットが想定されているデータセット(この情報は ClickHouse Keeper が保持)と一致しているかをチェックします。軽微な不整合であれば、システムはレプリカとのデータ同期によってこれを解消します。 +ClickHouse Keeper への接続確立後、システムはローカルファイルシステム上のデータセットが、想定されるデータセット(この情報は ClickHouse Keeper が保持)と一致しているかを確認します。軽微な不整合であれば、システムはレプリカとのデータ同期によってそれらを解消します。 -システムが破損したデータパーツ(ファイルサイズが不正なもの)や、認識されないパーツ(ファイルシステムに書き込まれているが ClickHouse Keeper に記録されていないパーツ)を検出した場合、それらを `detached` サブディレクトリに移動します(削除はされません)。不足しているパーツはレプリカからコピーされます。 +システムが破損したデータパーツ(ファイルサイズが不正なもの)や、認識されないパーツ(ファイルシステムには書き込まれているが ClickHouse Keeper に記録されていないもの)を検出した場合、それらを `detached` サブディレクトリに移動します(削除はされません)。不足しているパーツはレプリカからコピーされます。 -ClickHouse は、大量のデータを自動削除するといった破壊的な操作は実行しないことに注意してください。 +ClickHouse は、大量のデータを自動的に削除するといった破壊的な操作は一切行わないことに注意してください。 -サーバー起動時(または ClickHouse Keeper との新しいセッション確立時)には、すべてのファイルの個数とサイズのみをチェックします。ファイルサイズが一致していても、途中のバイトがどこかで変更されているような場合は、すぐには検出されず、`SELECT` クエリでデータを読み取ろうとしたときに初めて検出されます。このクエリは、チェックサムの不一致または圧縮ブロックのサイズ不一致に関する例外をスローします。この場合、データパーツは検証キューに追加され、必要に応じてレプリカからコピーされます。 +サーバー起動時(または ClickHouse Keeper との新しいセッション確立時)には、すべてのファイルの個数とサイズのみがチェックされます。ファイルサイズは一致しているが途中のバイトが変更されているような場合、これは即座には検出されず、`SELECT` クエリでデータの読み取りを試みたときにのみ検出されます。このクエリは、チェックサムの不一致や圧縮ブロックのサイズ不一致に関する例外をスローします。この場合、データパーツは検証キューに追加され、必要に応じてレプリカからコピーされます。 -ローカルのデータセットが想定されているものと大きく異なる場合、安全機構がトリガーされます。サーバーはその旨をログに記録し、起動を拒否します。これは、あるシャード上のレプリカが誤って別のシャード上のレプリカと同じ構成にされてしまった、といった構成ミスを示している可能性があるためです。ただし、この機構のしきい値はかなり低く設定されており、通常の障害復旧中にもこの状況が発生することがあります。この場合、データは「ボタンを押す」ことで半自動的に復元されます。 +ローカルのデータセットが想定されるものと大きく異なる場合、安全機構が作動します。サーバーはこの事象をログに記録し、起動を拒否します。これは、分片上のレプリカが誤って別の分片上のレプリカと同様に設定されている、といった構成ミスを示している可能性があるためです。ただし、この仕組みの閾値は比較的低く設定されており、この状況は通常の障害復旧中にも発生しうるものです。この場合、データは「ボタンを押す」ことで半自動的に復旧されます。 -リカバリを開始するには、任意の内容で ClickHouse Keeper 内に `/path_to_table/replica_name/flags/force_restore_data` ノードを作成するか、すべてのレプリケートテーブルを復元するためのコマンドを実行します。 +リカバリを開始するには、任意の内容で ClickHouse Keeper にノード `/path_to_table/replica_name/flags/force_restore_data` を作成するか、すべてのレプリケーテッドテーブルを復旧するためのコマンドを実行します。 ```bash sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data ``` -その後、サーバーを再起動します。起動時にサーバーはこれらのフラグを削除し、リカバリを開始します。 +その後、サーバーを再起動します。起動時にサーバーはこれらのフラグを削除して、リカバリを開始します。 -## 完全なデータ損失後の復旧 {#recovery-after-complete-data-loss} +## 完全なデータ損失からの復旧 {#recovery-after-complete-data-loss} -あるサーバーからすべてのデータとメタデータが消失した場合は、次の手順に従って復旧します。 +あるサーバーからデータとメタデータがすべて消失した場合は、次の手順で復旧します。 -1. そのサーバーに ClickHouse をインストールします。シャード識別子およびレプリカを使用している場合は、それらを含む設定ファイル内の置換設定を正しく定義します。 -2. 各サーバーに手動で複製する必要がある非レプリケートテーブルがある場合は、レプリカ上のデータをコピーします(ディレクトリ `/var/lib/clickhouse/data/db_name/table_name/` 内)。 -3. レプリカから `/var/lib/clickhouse/metadata/` にあるテーブル定義をコピーします。テーブル定義内でシャードまたはレプリカ識別子が明示的に定義されている場合は、このレプリカに対応するように修正します。(別の方法としては、サーバーを起動し、`/var/lib/clickhouse/metadata/` 内の .sql ファイルに含まれているはずのすべての `ATTACH TABLE` クエリを実行します。) +1. サーバーに ClickHouse をインストールします。`shard` 識別子およびレプリカ(使用している場合)を含む設定ファイル内の置換変数を正しく定義します。 +2. サーバー上で手動で複製する必要がある、レプリケーションされていないテーブルがある場合は、レプリカ上のデータをコピーします(ディレクトリ `/var/lib/clickhouse/data/db_name/table_name/` 内)。 +3. `/var/lib/clickhouse/metadata/` にあるテーブル定義をレプリカからコピーします。`shard` またはレプリカ識別子がテーブル定義内で明示的に定義されている場合は、このレプリカに対応するように修正します。(別案としては、サーバーを起動し、`/var/lib/clickhouse/metadata/` 内の .sql ファイルに含まれているはずのすべての `ATTACH TABLE` クエリを実行します。) 4. 復旧を開始するには、任意の内容で ClickHouse Keeper ノード `/path_to_table/replica_name/flags/force_restore_data` を作成するか、すべてのレプリケートテーブルを復旧するために次のコマンドを実行します: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data` -その後、サーバーを起動します(すでに起動している場合は再起動します)。データはレプリカからダウンロードされます。 - -別の復旧方法としては、ClickHouse Keeper から失われたレプリカに関する情報(`/path_to_table/replica_name`)を削除し、「[レプリケートテーブルの作成](#creating-replicated-tables)」で説明されている手順に従ってレプリカを再作成する方法があります。 - -復旧時のネットワーク帯域幅には制限がありません。同時に多数のレプリカを復旧する場合は、この点に注意してください。 +その後サーバーを起動します(すでに動作している場合は再起動します)。データはレプリカからダウンロードされます。 +別の復旧オプションとして、ClickHouse Keeper から失われたレプリカに関する情報(`/path_to_table/replica_name`)を削除し、「[レプリケートテーブルの作成](#creating-replicated-tables)」で説明されているようにレプリカを再作成する方法もあります。 +復旧中のネットワーク帯域幅には制限がありません。同時に多くのレプリカを復旧する場合は、この点に注意してください。 -## MergeTree から ReplicatedMergeTree への変換 +## MergeTree から ReplicatedMergeTree への変換 {#converting-from-mergetree-to-replicatedmergetree} -`MergeTree` という用語は、`MergeTree family` に属するすべてのテーブルエンジンを指すために使用しており、`ReplicatedMergeTree` についても同様です。 +`MergeTree` という用語は、`MergeTree family` に属するすべてのテーブルエンジンを指すために使用しており、`ReplicatedMergeTree` についても同様に用います。 -手動でレプリケーションしていた `MergeTree` テーブルがある場合、それをレプリケーション対応のテーブルに変換できます。`MergeTree` テーブルにすでに大量のデータを蓄積していて、これからレプリケーションを有効化したい場合に、この操作が必要になることがあります。 +手動でレプリケーションしていた `MergeTree` テーブルがある場合、それをレプリケーション対応テーブルに変換できます。すでに `MergeTree` テーブルに大量のデータを蓄積していて、ここからレプリケーションを有効化したい場合に必要になることがあります。 -[ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) ステートメントを使用すると、デタッチされた `MergeTree` テーブルを `ReplicatedMergeTree` としてアタッチできます。 +[ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 文を使用すると、デタッチされた `MergeTree` テーブルを `ReplicatedMergeTree` としてアタッチできます。 -`convert_to_replicated` フラグがテーブルのデータディレクトリ(`Atomic` データベースの場合は `/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/`)に設定されている場合、サーバー再起動時に `MergeTree` テーブルは自動的に変換されます。 -空の `convert_to_replicated` ファイルを作成すると、次回のサーバー再起動時に、そのテーブルはレプリケーション対応テーブルとしてロードされます。 +`MergeTree` テーブルは、テーブルのデータディレクトリ(`Atomic` データベースの場合は `/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/`)に `convert_to_replicated` フラグが設定されている場合、サーバー再起動時に自動的に変換できます。 +空の `convert_to_replicated` ファイルを作成すると、次回のサーバー再起動時にテーブルはレプリケーション対応としてロードされます。 -次のクエリを使用して、テーブルのデータパスを取得できます。テーブルに複数のデータパスがある場合は、先頭のパスを使用する必要があります。 +次のクエリを使用してテーブルのデータパスを取得できます。テーブルに複数のデータパスがある場合は、先頭のものを使用する必要があります。 ```sql SELECT data_paths FROM system.tables WHERE table = 'table_name' AND database = 'database_name'; ``` -`ReplicatedMergeTree` テーブルは、`default_replica_path` および `default_replica_name` 設定の値を用いて作成される点に注意してください。 -他のレプリカ上で変換後のテーブルを作成するには、`ReplicatedMergeTree` エンジンの第 1 引数でそのパスを明示的に指定する必要があります。次のクエリでそのパスを取得できます。 +`default_replica_path` と `default_replica_name` の設定値を使って ReplicatedMergeTree テーブルが作成されることに注意してください。 +他のレプリカ上で変換済みテーブルを作成するには、`ReplicatedMergeTree` エンジンの最初の引数でそのパスを明示的に指定する必要があります。次のクエリを使用してそのパスを取得できます。 ```sql SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; ``` -これを行う別の方法として、手動で行うこともできます。 +これを手動で行う方法もあります。 -複数のレプリカ間でデータが異なっている場合は、まず同期をとるか、1つを除くすべてのレプリカからそのデータを削除します。 +複数のレプリカ間でデータが異なる場合は、まず同期するか、1 つを除くすべてのレプリカからそのデータを削除します。 -既存の MergeTree テーブルの名前を変更し、同じ古い名前で `ReplicatedMergeTree` テーブルを作成します。 +既存の MergeTree テーブルの名前を変更し、元の名前で `ReplicatedMergeTree` テーブルを作成します。 古いテーブルから、新しいテーブルデータのディレクトリ(`/var/lib/clickhouse/data/db_name/table_name/`)内にある `detached` サブディレクトリへデータを移動します。 -その後、いずれかのレプリカ上で `ALTER TABLE ATTACH PARTITION` を実行し、これらのデータパーツを稼働中のデータセットに追加します。 +その後、いずれか 1 つのレプリカで `ALTER TABLE ATTACH PARTITION` を実行して、これらのデータのパーツをワーキングセットに追加します。 ## ReplicatedMergeTree から MergeTree への変換 {#converting-from-replicatedmergetree-to-mergetree} -単一サーバー上で切り離されている `ReplicatedMergeTree` テーブルを `MergeTree` として再アタッチするには、[ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) ステートメントを使用します。 - -これを行う別の方法として、サーバーの再起動を伴う手順があります。別の名前の MergeTree テーブルを作成し、`ReplicatedMergeTree` テーブルのデータがあるディレクトリから、すべてのデータを新しいテーブルのデータディレクトリに移動します。その後、`ReplicatedMergeTree` テーブルを削除してサーバーを再起動します。 - -サーバーを起動せずに `ReplicatedMergeTree` テーブルを削除したい場合は、次の手順を実行します。 +単一サーバー上のデタッチされた `ReplicatedMergeTree` テーブルを `MergeTree` としてアタッチするには、[ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 文を使用します。 -- メタデータディレクトリ(`/var/lib/clickhouse/metadata/`)内の対応する `.sql` ファイルを削除します。 -- ClickHouse Keeper 内の対応するパス(`/path_to_table/replica_name`)を削除します。 +別の方法として、サーバーの再起動を伴う手順もあります。別名の MergeTree テーブルを CREATE します。`ReplicatedMergeTree` テーブルのデータがあるディレクトリから、すべてのデータを新しいテーブルのデータディレクトリに移動します。その後、`ReplicatedMergeTree` テーブルを削除し、サーバーを再起動します。 -これが完了したら、サーバーを起動し、`MergeTree` テーブルを作成して、そのデータディレクトリにデータを移動し、サーバーを再起動できます。 +サーバーを起動することなく `ReplicatedMergeTree` テーブルを削除したい場合は、次の手順を実行します。 +- メタデータディレクトリ (`/var/lib/clickhouse/metadata/`) 内の対応する `.sql` ファイルを削除します。 +- ClickHouse Keeper 内の対応するパス (`/path_to_table/replica_name`) を削除します。 +これらの操作の後、サーバーを起動し、`MergeTree` テーブルを CREATE してデータをそのディレクトリに移動し、サーバーを再起動できます。 ## ClickHouse Keeper クラスター内のメタデータが失われたり破損した場合の復旧 {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} -ClickHouse Keeper 内のデータが失われたり破損した場合は、上記で説明したように、データを非レプリケートテーブルへ移動することで保持できます。 +ClickHouse Keeper 内のデータが失われたり破損した場合は、上記で説明したように、データを非レプリケートテーブルに移動することで保全できます。 **関連項目** @@ -354,4 +346,4 @@ ClickHouse Keeper 内のデータが失われたり破損した場合は、上 - [background_fetches_pool_size](/operations/server-configuration-parameters/settings.md/#background_fetches_pool_size) - [execute_merges_on_single_replica_time_threshold](/operations/settings/merge-tree-settings#execute_merges_on_single_replica_time_threshold) - [max_replicated_fetches_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_fetches_network_bandwidth) -- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) +- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md index bdf14e7f005..721ae5661cc 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# SummingMergeTree テーブルエンジン +# SummingMergeTree テーブルエンジン {#summingmergetree-table-engine} このエンジンは [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) を継承しています。違いは、`SummingMergeTree` テーブルでデータパーツをマージする際に、ClickHouse が同じ主キー(より正確には同じ [ソートキー](../../../engines/table-engines/mergetree-family/mergetree.md))を持つすべての行を、数値データ型のカラムの値を合計した 1 行に置き換える点です。ソートキーの構成によって、1 つのキー値に多数の行が対応する場合、これにより必要なストレージ容量を大幅に削減し、データ取得の高速化を実現できます。 @@ -17,7 +17,7 @@ doc_type: 'reference' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -34,16 +34,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] リクエストパラメータの説明については、[リクエストの説明](../../../sql-reference/statements/create/table.md)を参照してください。 -### SummingMergeTree のパラメータ +### SummingMergeTree のパラメータ {#parameters-of-summingmergetree} -#### カラム +#### カラム {#columns} `columns` - 値を集計(合計)するカラム名を含むタプルです。省略可能なパラメータです。 カラムは数値型である必要があり、パーティションキーまたはソートキーに含めることはできません。 `columns` が指定されていない場合、ClickHouse はソートキーに含まれていない数値データ型のすべてのカラムの値を集計します。 -### クエリ句 +### クエリ句 {#query-clauses} `SummingMergeTree` テーブルを作成する際には、`MergeTree` テーブルを作成する場合と同じ [句](../../../engines/table-engines/mergetree-family/mergetree.md) を指定する必要があります。 @@ -69,7 +69,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用例 +## 使用例 {#usage-example} 次のテーブルを例にします。 @@ -103,13 +103,13 @@ SELECT key, sum(value) FROM summtt GROUP BY key ``` -## データ処理 +## データ処理 {#data-processing} データがテーブルに挿入されると、そのままの形で保存されます。ClickHouse は挿入されたデータパートを定期的にマージし、その際に同じ主キーを持つ行が合計され、各結果データパートごとに 1 行に置き換えられます。 ClickHouse はデータパートをマージする際、マージの結果として異なるデータパート同士に同じ主キーを持つ行が分かれて存在する場合があります。つまり、合計処理が不完全になる可能性があります。そのため、上記の例で説明したように、クエリでは集約関数 [`sum()`](/sql-reference/aggregate-functions/reference/sum) と `GROUP BY` 句を組み合わせて使用する必要があります。 -### 集計に関する共通ルール +### 集計に関する共通ルール {#common-rules-for-summation} 数値データ型の列に含まれる値は合計されます。対象となる列の集合はパラメータ `columns` で定義されます。 @@ -119,11 +119,11 @@ ClickHouse はデータパートをマージする際、マージの結果とし 主キーに含まれる列の値は合計されません。 -### AggregateFunction 列における集計 +### AggregateFunction 列における集計 {#the-summation-in-the-aggregatefunction-columns} [AggregateFunction 型](../../../sql-reference/data-types/aggregatefunction.md)の列に対しては、ClickHouse は [AggregatingMergeTree](../../../engines/table-engines/mergetree-family/aggregatingmergetree.md) エンジンと同様に、関数に従って集約処理を行います。 -### ネストした構造 +### ネストした構造 {#nested-structures} テーブルには特別な方法で処理されるネストしたデータ構造を含めることができます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md index a2343e1536d..e993a76f5d0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# VersionedCollapsingMergeTree テーブルエンジン +# VersionedCollapsingMergeTree テーブルエンジン {#versionedcollapsingmergetree-table-engine} このエンジンは次のことができます: @@ -22,7 +22,7 @@ doc_type: 'reference' -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -39,7 +39,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] クエリパラメータの説明は、[クエリの説明](../../../sql-reference/statements/create/table.md)を参照してください。 -### エンジンのパラメータ +### エンジンのパラメータ {#engine-parameters} ```sql VersionedCollapsingMergeTree(サイン, バージョン) @@ -50,7 +50,7 @@ VersionedCollapsingMergeTree(サイン, バージョン) | `sign` | 行の種類を示す列の名前。`1` は「state」行、`-1` は「cancel」行を表します。 | [`Int8`](/sql-reference/data-types/int-uint) | | `version` | オブジェクト状態のバージョンを表す列の名前。 | [`Int*`](/sql-reference/data-types/int-uint), [`UInt*`](/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) | -### クエリ句 +### クエリ句 {#query-clauses} `VersionedCollapsingMergeTree` テーブルを作成する際は、`MergeTree` テーブルを作成する場合と同じ [句](../../../engines/table-engines/mergetree-family/mergetree.md) が必要です。 @@ -82,9 +82,9 @@ VersionedCollapsingMergeTree(サイン, バージョン) -## 折りたたみ(Collapsing) +## 折りたたみ(Collapsing) {#table_engines_versionedcollapsingmergetree} -### データ +### データ {#data} あるオブジェクトについて、継続的に変化するデータを保存する必要がある状況を考えます。オブジェクトごとに 1 行を持ち、変更があるたびにその行を更新するのは合理的に思えます。しかし、更新操作はストレージ上のデータを書き換える必要があるため、DBMS にとっては高コストかつ低速です。データを高速に書き込む必要がある場合、更新は適していませんが、その代わりにオブジェクトに対する変更を次のように逐次書き込むことができます。 @@ -130,7 +130,7 @@ VersionedCollapsingMergeTree(サイン, バージョン) 2. 列内で長く伸び続ける配列は、書き込み時の負荷によりエンジンの効率を低下させます。データが単純であればあるほど効率は高くなります。 3. `SELECT` の結果は、オブジェクト変更履歴の一貫性に大きく依存します。挿入するデータを準備する際は注意してください。セッション深度のような本来非負であるメトリクスに対して負の値が得られるなど、不整合なデータでは予測不能な結果になる可能性があります。 -### Algorithm +### Algorithm {#table_engines-versionedcollapsingmergetree-algorithm} ClickHouse がデータパートをマージする際、同じ主キーとバージョンを持ち、`Sign` が異なる行のペアを削除します。行の順序は関係ありません。 @@ -149,7 +149,7 @@ ClickHouse は、同じプライマリキーを持つすべての行が、同じ -## 使用例 +## 使用例 {#example-of-use} サンプルデータ: 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..e3f964afeaa 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-table-engine} -`Alias` エンジンは、別のテーブルへのプロキシを作成するテーブルエンジンです。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 + +`Alias` エンジンは、別のテーブルへのプロキシを作成します。すべての読み取りおよび書き込み操作は対象テーブルに転送され、エイリアス自体はデータを保持せず、対象テーブルへの参照のみを保持します。 +:::info +これは実験的な機能であり、将来のリリースで後方互換性を損なう形で変更される可能性があります。 +`Alias` テーブルエンジンを使用するには、 +[allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine) 設定を有効にしてください。 +次のコマンドを実行します: `set allow_experimental_alias_table_engine = 1`。 +::: -## テーブルを作成する +## テーブルの作成 {#creating-a-table} ```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} -### 基本的なエイリアスの作成 +### 基本的なエイリアスの作成 {#basic-alias-creation} -同じデータベース内にシンプルなエイリアスを作成します。 +同一データベース内で簡単なエイリアスを作成します。 ```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; └────┴──────┴───────┘ ``` -### データベース間エイリアス -別のデータベース内のテーブルを指すエイリアスを作成します: +### データベース間エイリアス {#cross-database-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; ``` -### エイリアス経由の書き込み操作 -すべての書き込み操作はターゲットテーブルに転送されます。 +### エイリアス経由での書き込み操作 {#write-operations} + +すべての書き込みはターゲットテーブルに転送されます。 ```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` 操作は対象テーブルのスキーマを変更します。 +### スキーマの変更 {#schema-modification} + +ALTER 操作は対象テーブルのスキーマを変更します。 ```sql CREATE TABLE users ( @@ -190,9 +198,10 @@ DESCRIBE users; └───────┴────────┴──────────────┴────────────────────┘ ``` -### データの変更 -`UPDATE` および `DELETE` 操作がサポートされています。 +### データの変更 {#data-mutations} + +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; └────┴──────────┴───────┴────────┘ ``` -### パーティション操作 -パーティション化されたテーブルでは、パーティション操作はフォワードされます。 +### パーティション操作 {#partition-operations} +パーティション化されたテーブルでは、パーティション操作はそのまま伝播されます。 ```sql CREATE TABLE logs ( @@ -259,9 +268,10 @@ ALTER TABLE logs_alias ATTACH PARTITION '202402'; SELECT count() FROM logs_alias; -- 3を返す ``` -### テーブルの最適化 -ターゲットテーブルに対するパーツのマージ処理を最適化します。 +### テーブル最適化 {#table-optimization} + +ターゲットテーブル内のパーツをマージする処理を最適化します。 ```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 を返す ``` -### エイリアスの管理 -エイリアスは個別に名前を変更したり削除したりできます。 +### エイリアスの管理 {#alias-management} + +エイリアスはそれぞれ独立して名前を変更したり削除したりできます。 ```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/buffer.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md index adf2f7643f6..4a68e468807 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md @@ -7,9 +7,7 @@ title: 'Buffer テーブルエンジン' doc_type: 'reference' --- - - -# Buffer テーブルエンジン +# Buffer テーブルエンジン {#buffer-table-engine} 書き込み対象のデータを RAM 上でバッファリングし、定期的に別のテーブルへフラッシュします。読み取り時には、バッファとその別のテーブルの両方から同時にデータを読み取ります。 @@ -21,27 +19,27 @@ Buffer テーブルエンジンの代替として推奨されるのは、[非同 Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes [,flush_time [,flush_rows [,flush_bytes]]]) ``` -### エンジンパラメータ +### エンジンパラメータ {#engine-parameters} -#### `database` +#### `database` {#database} `database` – データベース名。`currentDatabase()` もしくは文字列を返す他の定数式を使用できます。 -#### `table` +#### `table` {#table} `table` – データをフラッシュする対象のテーブル。 -#### `num_layers` +#### `num_layers` {#num_layers} `num_layers` – 並列レイヤー数。物理的には、テーブルは互いに独立したバッファが `num_layers` 個ある形で表現されます。 -#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, および `max_bytes` +#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, および `max_bytes` {#min_time-max_time-min_rows-max_rows-min_bytes-and-max_bytes} バッファからデータをフラッシュするための条件。 -### オプションのエンジンパラメータ +### オプションのエンジンパラメータ {#optional-engine-parameters} -#### `flush_time`, `flush_rows`, および `flush_bytes` +#### `flush_time`, `flush_rows`, および `flush_bytes` {#flush_time-flush_rows-and-flush_bytes} バックグラウンドでバッファからデータをフラッシュするための条件(省略または 0 の場合は、`flush*` パラメータは存在しないものとして扱われます)。 @@ -49,15 +47,15 @@ Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_ また、少なくとも 1 つの `flush*` 条件が満たされると、バックグラウンドでフラッシュが開始されます。これは `max*` とは異なり、`flush*` によって、Buffer テーブルへの `INSERT` クエリにレイテンシを追加しないように、バックグラウンドフラッシュを個別に構成できます。 -#### `min_time`, `max_time`, および `flush_time` +#### `min_time`, `max_time`, および `flush_time` {#min_time-max_time-and-flush_time} 最初の書き込み時点からの経過時間(秒)に関する条件。 -#### `min_rows`, `max_rows`, および `flush_rows` +#### `min_rows`, `max_rows`, および `flush_rows` {#min_rows-max_rows-and-flush_rows} バッファ内の行数に関する条件。 -#### `min_bytes`, `max_bytes`, および `flush_bytes` +#### `min_bytes`, `max_bytes`, および `flush_bytes` {#min_bytes-max_bytes-and-flush_bytes} バッファ内のバイト数に関する条件。 @@ -84,7 +82,6 @@ CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 1, 10, データベース名およびテーブル名には、シングルクォートで囲んだ空文字列を設定できます。これは、宛先テーブルが存在しないことを示します。この場合、データのフラッシュ条件に達すると、バッファは単にクリアされます。これは、メモリ上に一定期間分のデータだけを保持しておきたい場合に有用です。 - Buffer テーブルから読み取る場合、データはバッファと宛先テーブル(存在する場合)の両方から処理されます。 なお、Buffer テーブルはインデックスをサポートしません。つまり、バッファ内のデータはフルスキャンされるため、大きなバッファでは低速になる可能性があります(下位テーブル内のデータについては、そのテーブルがサポートするインデックスが使用されます)。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md index 6281e3f7900..82534891b7d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md @@ -7,15 +7,11 @@ title: 'Dictionary テーブルエンジン' doc_type: 'リファレンス' --- - - -# Dictionary テーブルエンジン +# Dictionary テーブルエンジン {#dictionary-table-engine} `Dictionary` エンジンは、[dictionary](../../../sql-reference/dictionaries/index.md) のデータを ClickHouse のテーブルとして扱います。 - - -## 例 +## 例 {#example} 例として、次のように構成された `products` 辞書を考えます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md index 52070299b6c..847d7b76a0e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Distributed テーブルエンジン +# Distributed テーブルエンジン {#distributed-table-engine} :::warning ClickHouse Cloud における Distributed エンジン ClickHouse Cloud で Distributed テーブルエンジンを作成するには、[`remote` および `remoteSecure`](../../../sql-reference/table-functions/remote) テーブル関数を使用します。 @@ -21,7 +21,7 @@ Distributed エンジンを持つテーブル自体はデータを一切保存 -## テーブルの作成 +## テーブルの作成 {#distributed-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] [SETTINGS name=value, ...] ``` -### テーブルから +### テーブルから {#distributed-from-a-table} `Distributed` テーブルが現在のサーバー上のテーブルを参照している場合、そのテーブルのスキーマを利用できます。 @@ -41,7 +41,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 ENGINE = Distributed(cluster, database, table[, sharding_key[, policy_name]]) [SETTINGS name=value, ...] ``` -### Distributed パラメータ +### Distributed パラメータ {#distributed-parameters} | Parameter | Description | | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -56,7 +56,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 * [distributed_foreground_insert](../../../operations/settings/settings.md#distributed_foreground_insert) 設定 * 例については [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes) を参照 -### Distributed 設定 +### Distributed 設定 {#distributed-settings} | Setting | Description | Default value | @@ -102,7 +102,7 @@ SETTINGS データベース名の代わりに、文字列を返す定数式を使用できます。例えば、`currentDatabase()` です。 -## クラスター +## クラスター {#distributed-clusters} クラスターは[サーバー設定ファイル](../../../operations/configuration-files.md)で構成されます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md index 666d7949b08..e44d4b1d19a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md @@ -7,20 +7,16 @@ title: '`Executable` および `ExecutablePool` テーブルエンジン' doc_type: 'reference' --- - - -# Executable および ExecutablePool テーブルエンジン +# Executable および ExecutablePool テーブルエンジン {#executable-and-executablepool-table-engines} `Executable` および `ExecutablePool` テーブルエンジンを使用すると、(行を **stdout** に書き出すことで)ユーザー定義のスクリプトによって行が生成されるテーブルを定義できます。実行可能スクリプトは `users_scripts` ディレクトリに保存され、任意のソースからデータを読み取ることができます。 -- `Executable` テーブル: クエリごとにスクリプトが実行されます -- `ExecutablePool` テーブル: 永続プロセスのプールを維持し、読み取り時にそのプールからプロセスを取得します +* `Executable` テーブル: クエリごとにスクリプトが実行されます +* `ExecutablePool` テーブル: 永続プロセスのプールを維持し、読み取り時にそのプールからプロセスを取得します オプションとして、1 つ以上の入力用クエリを含めることができ、その結果を **stdin** にストリームしてスクリプトが読み取れるようにできます。 - - -## `Executable` テーブルの作成 +## `Executable` テーブルの作成 {#creating-an-executable-table} `Executable` テーブルエンジンには、スクリプト名と入力データの形式という 2 つのパラメータを指定する必要があります。必要に応じて、1 つ以上の入力クエリを渡すこともできます。 @@ -102,8 +98,7 @@ SELECT * FROM my_executable_table └───┴────────────┘ ``` - -## クエリ結果をスクリプトに渡す +## クエリ結果をスクリプトに渡す {#passing-query-results-to-a-script} Hacker News サイトのユーザーはコメントを投稿します。Python には自然言語処理ツールキット (`nltk`) があり、その中の `SentimentIntensityAnalyzer` を使うと、コメントがポジティブかネガティブかニュートラルかを判定し、-1(非常にネガティブなコメント)から 1(非常にポジティブなコメント)の値を割り当てることができます。`nltk` を使って Hacker News のコメントのセンチメント(感情)を計算する `Executable` テーブルを作成してみましょう。 @@ -177,7 +172,6 @@ FROM sentiment レスポンスは次のとおりです。 - ```response ┌───────id─┬─sentiment─┐ │ 7398199 │ 0.4404 │ @@ -203,8 +197,7 @@ FROM sentiment └──────────┴───────────┘ ``` - -## `ExecutablePool` テーブルの作成 +## `ExecutablePool` テーブルの作成 {#creating-an-executablepool-table} `ExecutablePool` の構文は `Executable` と似ていますが、`ExecutablePool` テーブルに固有の重要な設定がいくつかあります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md index db6c663ecc1..a7bba2403f7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md @@ -7,7 +7,7 @@ title: 'クエリ処理のための外部データ' doc_type: 'reference' --- -# クエリ処理のための外部データ +# クエリ処理のための外部データ {#external-data-for-query-processing} ClickHouse では、`SELECT` クエリと一緒に、そのクエリの処理に必要なデータをサーバーに送信できます。これらのデータは一時テーブル(「Temporary tables」のセクションを参照)に格納され、クエリ内(たとえば `IN` 演算子)で利用できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md index 2e9784010ee..3f2683934f5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# File テーブルエンジン +# File テーブルエンジン {#file-table-engine} File テーブルエンジンは、サポートされている[ファイルフォーマット](/interfaces/formats#formats-overview)(`TabSeparated`、`Native` など)のいずれかでデータをファイルに保存します。 @@ -25,7 +25,7 @@ File テーブルエンジンは、サポートされている[ファイルフ -## ClickHouse サーバーでの利用方法 +## ClickHouse サーバーでの利用方法 {#usage-in-clickhouse-server} ```sql File(Format) @@ -44,7 +44,7 @@ ClickHouse では、`File` に対してファイルシステムのパスを指 ::: -## 例 +## 例 {#example} **1.** `file_engine_table` テーブルを作成します。 @@ -76,7 +76,7 @@ SELECT * FROM file_engine_table ``` -## ClickHouse-local での使用方法 +## ClickHouse-local での使用方法 {#usage-in-clickhouse-local} [clickhouse-local](../../../operations/utilities/clickhouse-local.md) では、File エンジンは `Format` に加えてファイルパスも指定できます。デフォルトの入出力ストリームは、`0` や `stdin`、`1` や `stdout` のような数値または人間が読める名前で指定できます。追加のエンジンパラメータまたはファイル拡張子(`gz`、`br`、`xz`)に基づいて、圧縮ファイルの読み書きを行えます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md index 0870bcf5825..f7d49039b45 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md @@ -20,7 +20,7 @@ doc_type: 'reference' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -56,7 +56,7 @@ Engine 引数: * `handle_error_mode` — FileLog エンジンでエラーをどのように処理するか。指定可能な値: `default`(メッセージのパースに失敗した場合に例外をスロー)、`stream`(例外メッセージと元のメッセージを仮想カラム `_error` と `_raw_message` に保存)。 -## 説明 +## 説明 {#description} 取り込まれたレコードは自動的に追跡されるため、ログファイル内の各レコードは一度だけカウントされます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md index 0e22ebc3efe..80617691ca0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# GenerateRandom テーブルエンジン +# GenerateRandom テーブルエンジン {#generaterandom-table-engine} GenerateRandom テーブルエンジンは、指定されたテーブルスキーマに基づいてランダムなデータを生成します。 @@ -20,7 +20,7 @@ GenerateRandom テーブルエンジンは、指定されたテーブルスキ -## ClickHouse サーバーでの利用方法 +## ClickHouse サーバーでの利用方法 {#usage-in-clickhouse-server} ```sql ENGINE = GenerateRandom([random_seed [,max_string_length [,max_array_length]]]) @@ -33,7 +33,7 @@ Generate テーブルエンジンは `SELECT` クエリのみをサポートし テーブルに保存可能な [DataTypes](../../../sql-reference/data-types/index.md) のうち、`AggregateFunction` を除くすべてをサポートします。 -## 例 +## 例 {#example} **1.** `generate_engine_table` テーブルを作成します。 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..ff1b2715358 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 @@ -7,9 +7,7 @@ title: '特殊テーブルエンジン' doc_type: 'reference' --- - - -# 特殊なテーブルエンジン +# 特殊なテーブルエンジン {#special-table-engines} テーブルエンジンには、主に次の 3 つのカテゴリがあります。 @@ -26,7 +24,6 @@ doc_type: 'reference' 誤りに気付いた場合は、該当ページの YML フロントマターを編集してください。 */ } - {/*AUTOGENERATED_START*/ } | Page | 説明 | diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md index 4cba07ffe27..9b083a61439 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Join テーブルエンジン +# Join テーブルエンジン {#join-table-engine} [JOIN](/sql-reference/statements/select/join) 演算で使用するための、オプションの事前構築済みデータ構造です。 @@ -19,7 +19,7 @@ ClickHouse Cloud で、サービスがバージョン 25.4 より前に作成さ -## テーブルの作成 +## テーブルの作成 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -115,7 +115,7 @@ I/O オーバーヘッドを削減します。性能を重視し、永続化を -## 使用例 +## 使用例 {#example} 左側テーブルの作成: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md index 60922cac90f..3c04723fc6c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# KeeperMap テーブルエンジン +# KeeperMap テーブルエンジン {#keepermap-table-engine} このエンジンを使用すると、Keeper/ZooKeeper クラスターを、線形化可能な書き込みと逐次一貫な読み取りを備えた一貫性のあるキー・バリュー ストアとして利用できます。 @@ -26,7 +26,7 @@ KeeperMap ストレージエンジンを有効化するには、テーブルを ここで path には任意の有効な ZooKeeper パスを指定できます。 -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -80,9 +80,9 @@ PRIMARY KEY key もちろん、関連しない ClickHouse インスタンス間であっても、同じパスを指定して手動で `CREATE TABLE` を実行することで、同様のデータ共有効果を得ることができます。 -## サポートされている操作 +## サポートされている操作 {#supported-operations} -### 挿入 +### 挿入 {#inserts} 新しい行が `KeeperMap` に挿入されるとき、キーが存在しない場合は、そのキー用の新しいエントリが作成されます。 キーが存在し、かつ `keeper_map_strict_mode` が `true` に設定されている場合は、例外がスローされます。そうでない場合、そのキーに対する値は上書きされます。 @@ -93,7 +93,7 @@ PRIMARY KEY key INSERT INTO keeper_map_table VALUES ('some key', 1, 'value', 3.2); ``` -### 削除 +### 削除 {#deletes} 行は `DELETE` クエリまたは `TRUNCATE` を使用して削除できます。 キーが存在しており、設定 `keeper_map_strict_mode` が `true` の場合、データの取得および削除は、それらをアトミックに実行できる場合にのみ成功します。 @@ -110,7 +110,7 @@ ALTER TABLE keeper_map_table DELETE WHERE key LIKE 'some%' AND v1 > 1; TRUNCATE TABLE keeper_map_table; ``` -### 更新 +### 更新 {#updates} 値は `ALTER TABLE` クエリを使用して更新できます。プライマリキーは更新できません。 `keeper_map_strict_mode` を `true` に設定すると、データの取得および更新は、アトミックに実行された場合にのみ成功します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md index 2eb34ab15af..ad156123378 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Memory テーブルエンジン +# Memory テーブルエンジン {#memory-table-engine} :::note ClickHouse Cloud 上で Memory テーブルエンジンを使用する場合、データは(設計上)すべてのノード間でレプリケートされません。すべてのクエリが同じノードにルーティングされ、Memory テーブルエンジンが期待どおりに動作することを保証するには、次のいずれかを行ってください: @@ -48,7 +48,7 @@ Memory エンジンのテーブルサイズを制限するために上限およ -## 使用方法 +## 使用方法 {#usage} **設定を初期化する** @@ -65,7 +65,7 @@ ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 100 **注意:** `bytes` と `rows` の両方の上限パラメータは同時に設定できますが、`max` と `min` のうち小さい方の値が優先されます。 -## 例 +## 例 {#examples} ```sql CREATE TABLE memory (i UInt32) ENGINE = Memory SETTINGS min_bytes_to_keep = 4096, max_bytes_to_keep = 16384; diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md index 90a696086c3..90e44282d19 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Merge テーブルエンジン +# Merge テーブルエンジン {#merge-table-engine} `Merge` エンジン(`MergeTree` と混同しないでください)は、自身ではデータを保存せず、任意の数の他のテーブルから同時に読み取ることができます。 @@ -17,7 +17,7 @@ doc_type: 'reference' -## テーブルを作成する +## テーブルを作成する {#creating-a-table} ```sql CREATE TABLE ... Engine=Merge(db_name, tables_regexp) @@ -51,7 +51,7 @@ CREATE TABLE ... Engine=Merge(db_name, tables_regexp) -## 例 +## 例 {#examples} **例 1** diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md index 15c23ae1b61..8a3d9a0cfdd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md @@ -7,7 +7,7 @@ title: 'Null テーブルエンジン' doc_type: 'reference' --- -# Null テーブルエンジン +# Null テーブルエンジン {#null-table-engine} `Null` テーブルにデータを書き込むと、そのデータは無視されます。 `Null` テーブルから読み出すと、レスポンスは空になります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md index 986c831b63b..0cb957d8913 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Set テーブルエンジン +# Set テーブルエンジン {#set-table-engine} :::note ClickHouse Cloud では、サービスが 25.4 より前のバージョンで作成されている場合、`SET compatibility=25.4` を使って互換性を少なくとも 25.4 に設定する必要があります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md index 9b7c997f90c..013a4ca2277 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# URL テーブルエンジン +# URL テーブルエンジン {#url-table-engine} リモートの HTTP/HTTPS サーバーとの間でデータをクエリします。このエンジンは [File](../../../engines/table-engines/special/file.md) エンジンに類似しています。 @@ -51,7 +51,7 @@ doc_type: 'reference' -## 例 +## 例 {#example} **1.** サーバー上に `url_engine_table` テーブルを作成します: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md index 0616c593050..16757bf68e1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md @@ -7,6 +7,6 @@ title: 'View テーブルエンジン' doc_type: 'reference' --- -# View テーブルエンジン +# View テーブルエンジン {#view-table-engine} ビューを実装するために使用されます(詳細は `CREATE VIEW query` を参照してください)。データ自体は保存せず、指定された `SELECT` クエリだけを保持します。テーブルから読み取る際には、このクエリを実行し(不要なカラムはクエリからすべて削除され)、結果を返します。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/concurrency.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/concurrency.md index f5e674b2725..c0ea1fbb6b3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/concurrency.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/concurrency.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['concurrency', 'QPS'] --- -# ClickHouse は高頻度かつ同時実行されるクエリをサポートしていますか? +# ClickHouse は高頻度かつ同時実行されるクエリをサポートしていますか? {#does-clickhouse-support-frequent-concurrent-queries} ClickHouse は、外部ユーザーに直接応答するリアルタイム分析アプリケーション向けに設計されています。ペタバイト規模のデータベースに対して、履歴データとリアルタイム挿入データを組み合わせつつ、低レイテンシ(10 ミリ秒未満)かつ高い同時実行性(1 秒あたり 10,000 クエリ超)で分析クエリを処理できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/cost-based.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/cost-based.md index eaec07b2442..47a30fb7c0a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/cost-based.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/cost-based.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['CBE', 'optimizer'] --- -# ClickHouse はコストベースオプティマイザを持っていますか? +# ClickHouse はコストベースオプティマイザを持っていますか? {#does-clickhouse-have-a-cost-based-optimizer} ClickHouse には、いくつかの限定的な形でコストベース最適化の仕組みがあります。たとえば、カラムの読み取り順序は、ディスクから圧縮されたデータ範囲を読み取るコストによって決定されます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/datalake.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/datalake.md index 537a73c76f4..4a1f70b3b9d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/datalake.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['データレイク', 'レイクハウス'] --- -# ClickHouse はデータレイクをサポートしていますか? +# ClickHouse はデータレイクをサポートしていますか? {#does-clickhouse-support-data-lakes} ClickHouse は Iceberg、Delta Lake、Apache Hudi、Apache Paimon、Hive を含むデータレイクをサポートしています。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/dependencies.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/dependencies.md index d38c9d0558f..bd63aae30c8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/dependencies.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/dependencies.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['dependencies', '3rd-party'] --- -# ClickHouse を実行する際に必要なサードパーティ製の依存関係はありますか? +# ClickHouse を実行する際に必要なサードパーティ製の依存関係はありますか? {#what-are-the-3rd-party-dependencies-for-running-clickhouse} ClickHouse には実行時の依存関係は一切ありません。完全に自己完結した単一バイナリアプリケーションとして配布されており、このアプリケーションだけでクラスタのすべての機能を提供します。クエリの処理に加え、クラスタ内のワーカーノードとして、RAFT コンセンサスアルゴリズムを提供する調整システムとして、さらにはクライアントやローカルクエリエンジンとして動作します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md index 2453ad2a5a9..80ea9d9a9f6 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['distributed', 'join'] --- -# ClickHouse は分散 JOIN をサポートしていますか? +# ClickHouse は分散 JOIN をサポートしていますか? {#does-clickhouse-support-distributed-join} ClickHouse はクラスタ上での分散 JOIN をサポートしています。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/federated.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/federated.md index 342fad39fe3..06c4db0bb3a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/federated.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/federated.md @@ -8,22 +8,22 @@ doc_type: 'reference' keywords: ['federated', 'hybrid', 'postgres', 'mysql', 'sqlite', 'odbc', 'jdbc'] --- -# ClickHouse はフェデレーテッドクエリをサポートしていますか? +# ClickHouse はフェデレーテッドクエリをサポートしていますか? {#does-clickhouse-support-federated-queries} ClickHouse は、分析用データベースの中でもフェデレーテッドクエリおよびハイブリッドクエリ実行について、最も包括的なサポートを提供します。 ClickHouse は外部データベースに対するクエリをサポートしています: -- PostgreSQL -- MySQL -- MongoDB -- Redis -- 任意の ODBC データソース -- 任意の JDBC データソース -- 任意の Arrow Flight データソース -- Kafka や RabbitMQ などのストリーミングデータソース -- Iceberg、Delta Lake、Apache Hudi、Apache Paimon などの Data Lake -- AWS S3、GCS、Minio、Cloudflare R2、Azure Blob Storage、Alicloud OSS、Tencent COS などの共有ストレージ上にある外部ファイル、ならびにローカルストレージ上の外部ファイル(幅広いデータフォーマットに対応) +* PostgreSQL +* MySQL +* MongoDB +* Redis +* 任意の ODBC データソース +* 任意の JDBC データソース +* 任意の Arrow Flight データソース +* Kafka や RabbitMQ などのストリーミングデータソース +* Iceberg、Delta Lake、Apache Hudi、Apache Paimon などの Data Lake +* AWS S3、GCS、Minio、Cloudflare R2、Azure Blob Storage、Alicloud OSS、Tencent COS などの共有ストレージ上にある外部ファイル、ならびにローカルストレージ上の外部ファイル(幅広いデータフォーマットに対応) ClickHouse は、1 つのクエリ内で複数の異なるデータソースを結合できます。また、ローカルリソースを活用しつつ、クエリの一部をリモートマシンにオフロードするハイブリッドクエリ実行オプションも提供します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/index.md index 0f5aba06085..0fc115e1aa0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/index.md @@ -8,18 +8,18 @@ description: 'ClickHouse に関する一般的な質問をまとめたインデ doc_type: 'landing-page' --- -# ClickHouse に関する一般的な質問 +# ClickHouse に関する一般的な質問 {#general-questions-about-clickhouse} -- [ClickHouse とは何ですか?](../../intro.md) -- [なぜ ClickHouse はそんなに高速なのですか?](../../concepts/why-clickhouse-is-so-fast.mdx) -- [誰が ClickHouse を使っていますか?](../../faq/general/who-is-using-clickhouse.md) -- 「[ClickHouse」はどういう意味ですか?](../../faq/general/dbms-naming.md) -- 「[Не тормозит」はどういう意味ですか?](../../faq/general/ne-tormozit.md) -- [OLAP とは何ですか?](../../faq/general/olap.md) -- [カラム型データベースとは何ですか?](../../faq/general/columnar-database.md) -- [プライマリキーはどのように選べばよいですか?](../../guides/best-practices/sparse-primary-indexes.md) -- [なぜ MapReduce のようなものを使わないのですか?](../../faq/general/mapreduce.md) -- [ClickHouse にコードをコントリビュートするにはどうすればよいですか?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) +* [ClickHouse とは何ですか?](../../intro.md) +* [なぜ ClickHouse はそんなに高速なのですか?](../../concepts/why-clickhouse-is-so-fast.mdx) +* [誰が ClickHouse を使っていますか?](../../faq/general/who-is-using-clickhouse.md) +* 「[ClickHouse」はどういう意味ですか?](../../faq/general/dbms-naming.md) +* 「[Не тормозит」はどういう意味ですか?](../../faq/general/ne-tormozit.md) +* [OLAP とは何ですか?](../../faq/general/olap.md) +* [カラム型データベースとは何ですか?](../../faq/general/columnar-database.md) +* [プライマリキーはどのように選べばよいですか?](../../guides/best-practices/sparse-primary-indexes.md) +* [なぜ MapReduce のようなものを使わないのですか?](../../faq/general/mapreduce.md) +* [ClickHouse にコードをコントリビュートするにはどうすればよいですか?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) :::info お探しの内容が見つかりませんか? [Knowledge Base](/knowledgebase/) を確認し、本ドキュメント内にある多数の有用な記事も参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/sql.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/sql.md index 9bbe1b382ae..c7754898585 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/sql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/sql.md @@ -8,46 +8,46 @@ doc_type: 'reference' keywords: ['SQL 構文', 'ANSI SQL'] --- -# ClickHouse はどのような SQL 構文をサポートしていますか? +# ClickHouse はどのような SQL 構文をサポートしていますか? {#what-sql-syntax-does-clickhouse-support} ClickHouse は SQL 構文を完全にサポートしており、次のような機能が含まれます。 -- SQL/JSON と JSON データ型 (SQL-2023) -- ウィンドウ関数 (SQL-2003) -- 共通テーブル式 (CTE) と再帰クエリ (SQL-1999) -- ROLLUP、CUBE、GROUPING SETS (SQL-1999) -- RBAC の完全サポート (SQL-1999) -- 相関サブクエリ (SQL-1992) +* SQL/JSON と JSON データ型 (SQL-2023) +* ウィンドウ関数 (SQL-2003) +* 共通テーブル式 (CTE) と再帰クエリ (SQL-1999) +* ROLLUP、CUBE、GROUPING SETS (SQL-1999) +* RBAC の完全サポート (SQL-1999) +* 相関サブクエリ (SQL-1992) このサポートは、TPC-H および TPC-DS ベンチマーク、ならびに SQLTest によって検証されています。 ClickHouse は、ISO/IEC によって標準化される以前から、次のような多くの機能を導入してきました。 -- 条件付き集約関数 -- `any` 集約関数 -- `least` と `greatest` -- `GROUP BY ALL` -- エイリアスの拡張的な利用 -- 数値リテラル内でのアンダースコア +* 条件付き集約関数 +* `any` 集約関数 +* `least` と `greatest` +* `GROUP BY ALL` +* エイリアスの拡張的な利用 +* 数値リテラル内でのアンダースコア ClickHouse は、次のような大きな利便性向上機能を導入することで、SQL を拡張しています。 -- エイリアスの自由な利用 -- WITH 句内でのエイリアス -- 集約関数コンビネータ -- パラメータ化された集約関数 -- 近似集約関数 -- ネイティブおよびビッグ整数の数値データ型、拡張精度の decimal -- 配列操作のための高階関数 -- ARRAY JOIN 句および arrayJoin 関数 -- 配列集約 -- LIMIT BY 句 -- GROUP BY WITH TOTALS -- AS OF JOIN -- ANY/ALL JOIN -- JSON の自然な構文 -- カラムリスト末尾のカンマ -- FROM ... SELECT の句順 -- 型安全なクエリパラメータおよびパラメータ化ビュー +* エイリアスの自由な利用 +* WITH 句内でのエイリアス +* 集約関数コンビネータ +* パラメータ化された集約関数 +* 近似集約関数 +* ネイティブおよびビッグ整数の数値データ型、拡張精度の decimal +* 配列操作のための高階関数 +* ARRAY JOIN 句および arrayJoin 関数 +* 配列集約 +* LIMIT BY 句 +* GROUP BY WITH TOTALS +* AS OF JOIN +* ANY/ALL JOIN +* JSON の自然な構文 +* カラムリスト末尾のカンマ +* FROM ... SELECT の句順 +* 型安全なクエリパラメータおよびパラメータ化ビュー これらの一部は、今後の SQL 標準に取り込まれる可能性がありますが、ClickHouse ではすでに利用可能です。 \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/updates.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/updates.md index d9d508763d6..b0fb47739e4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/updates.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/general/updates.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['更新', 'リアルタイム'] --- -# ClickHouse はリアルタイム更新をサポートしていますか? +# ClickHouse はリアルタイム更新をサポートしていますか? {#does-clickhouse-support-real-time-updates} ClickHouse は `UPDATE` 文をサポートしており、`INSERT` と同等の速度でリアルタイムに更新を実行できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/index.md index 630c608140d..b7781104e85 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/index.md @@ -8,15 +8,15 @@ description: 'ClickHouse を他のシステムと連携する際の質問を一 doc_type: 'landing-page' --- -# ClickHouse と他のシステムの連携に関する質問 +# ClickHouse と他のシステムの連携に関する質問 {#questions-about-integrating-clickhouse-and-other-systems} -- [ClickHouse からファイルへデータをエクスポートするにはどうすればよいですか?](https://clickhouse.com/docs/knowledgebase/file-export) -- [JSON を ClickHouse にインポートするにはどうすればよいですか?](/integrations/data-ingestion/data-formats/json/intro.md) -- [Kafka を ClickHouse に接続するにはどうすればよいですか?](/integrations/data-ingestion/kafka/index.md) -- [Java アプリケーションを ClickHouse に接続できますか?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) -- [ClickHouse は MySQL のテーブルを読み込むことができますか?](/integrations/mysql) -- [ClickHouse は PostgreSQL のテーブルを読み込むことができますか?](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) -- [ODBC 経由で Oracle に接続するときにエンコーディングの問題が発生する場合はどうすればよいですか?](/faq/integration/oracle-odbc.md) +* [ClickHouse からファイルへデータをエクスポートするにはどうすればよいですか?](https://clickhouse.com/docs/knowledgebase/file-export) +* [JSON を ClickHouse にインポートするにはどうすればよいですか?](/integrations/data-ingestion/data-formats/json/intro.md) +* [Kafka を ClickHouse に接続するにはどうすればよいですか?](/integrations/data-ingestion/kafka/index.md) +* [Java アプリケーションを ClickHouse に接続できますか?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) +* [ClickHouse は MySQL のテーブルを読み込むことができますか?](/integrations/mysql) +* [ClickHouse は PostgreSQL のテーブルを読み込むことができますか?](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) +* [ODBC 経由で Oracle に接続するときにエンコーディングの問題が発生する場合はどうすればよいですか?](/faq/integration/oracle-odbc.md) :::info お探しの情報が見つかりませんか? [Knowledge Base](/knowledgebase/) を確認し、あわせて本ドキュメント内の多数の有用な記事も参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/json-import.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/json-import.md index 8032ffda69c..e72f8bbac96 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/json-import.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/json-import.md @@ -16,7 +16,7 @@ ClickHouse は、[入出力用のさまざまなデータ形式](/interfaces/for -## 例 +## 例 {#examples} [HTTP インターフェース](../../interfaces/http.md)を使用する場合: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md index b89e7ca3b9c..58cffcbf35b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md @@ -8,9 +8,7 @@ doc_type: 'guide' keywords: ['oracle', 'odbc', 'encoding', 'integration', 'external dictionary'] --- - - -# ODBC 経由で Oracle を使用する際に文字コードの問題が発生した場合はどうすればよいですか? +# ODBC 経由で Oracle を使用する際に文字コードの問題が発生した場合はどうすればよいですか? {#oracle-odbc-encodings} Oracle ODBC ドライバを介して ClickHouse の外部ディクショナリのソースとして Oracle を使用する場合は、`/etc/default/clickhouse` 内の `NLS_LANG` 環境変数に正しい値を設定する必要があります。詳細については、[Oracle NLS_LANG FAQ](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html) を参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md index 56b805d23d6..4aaf57e72f4 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md @@ -30,7 +30,7 @@ TTL は、データを [/dev/null](https://en.wikipedia.org/wiki/Null_device) -## DELETE FROM +## DELETE FROM {#delete-from} [DELETE FROM](/sql-reference/statements/delete.md) を使用すると、ClickHouse で標準的な DELETE クエリを実行できます。フィルター句で対象となった行は削除済みとしてマークされ、今後の結果セットには含まれません。行のクリーンアップは非同期に行われます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/index.md index ea1ddd01eed..577fb6d3ca3 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/operations/index.md @@ -8,16 +8,16 @@ doc_type: 'landing-page' keywords: ['運用', '管理', 'デプロイメント', 'クラスター管理', 'FAQ'] --- -# ClickHouse サーバーおよびクラスターの運用に関する質問 +# ClickHouse サーバーおよびクラスターの運用に関する質問 {#question-about-operating-clickhouse-servers-and-clusters} -- [本番環境ではどの ClickHouse バージョンを使用すべきですか?](/faq/operations/production.md) -- [ストレージとコンピュートを分離した構成で ClickHouse をデプロイできますか?](/faq/operations/separate_storage.md) -- [ClickHouse テーブルから古いレコードを削除できますか?](/faq/operations/delete-old-data.md) -- [ClickHouse Keeper はどのように構成すればよいですか?](/guides/sre/keeper/index.md) -- [ClickHouse を LDAP と連携できますか?](/guides/sre/user-management/configuring-ldap.md) -- [ClickHouse でユーザー、ロール、権限をどのように設定すればよいですか?](/guides/sre/user-management/index.md) -- [ClickHouse で行の更新や削除はできますか?](/guides/starter_guides/mutations.md) -- [ClickHouse はマルチリージョンレプリケーションをサポートしていますか?](/faq/operations/multi-region-replication.md) +* [本番環境ではどの ClickHouse バージョンを使用すべきですか?](/faq/operations/production.md) +* [ストレージとコンピュートを分離した構成で ClickHouse をデプロイできますか?](/faq/operations/separate_storage.md) +* [ClickHouse テーブルから古いレコードを削除できますか?](/faq/operations/delete-old-data.md) +* [ClickHouse Keeper はどのように構成すればよいですか?](/guides/sre/keeper/index.md) +* [ClickHouse を LDAP と連携できますか?](/guides/sre/user-management/configuring-ldap.md) +* [ClickHouse でユーザー、ロール、権限をどのように設定すればよいですか?](/guides/sre/user-management/index.md) +* [ClickHouse で行の更新や削除はできますか?](/guides/starter_guides/mutations.md) +* [ClickHouse はマルチリージョンレプリケーションをサポートしていますか?](/faq/operations/multi-region-replication.md) :::info お探しの内容が見つかりませんか? [Knowledge Base](/knowledgebase/) をご覧いただき、このドキュメント内にある多数の有用な記事もあわせて参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/faq/use-cases/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/faq/use-cases/index.md index f87d9568bb3..d3df69feefd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/faq/use-cases/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/faq/use-cases/index.md @@ -8,10 +8,10 @@ keywords: ['ClickHouse use cases', '時系列データベース', 'キーバリ doc_type: 'landing-page' --- -# ClickHouse のユースケースに関する質問 +# ClickHouse のユースケースに関する質問 {#questions-about-clickhouse-use-cases} -- [ClickHouse を時系列データベースとして利用できますか?](/knowledgebase/time-series) -- [ClickHouse をキーバリューストレージとして利用できますか?](/knowledgebase/key-value) +* [ClickHouse を時系列データベースとして利用できますか?](/knowledgebase/time-series) +* [ClickHouse をキーバリューストレージとして利用できますか?](/knowledgebase/key-value) :::info お探しの情報が見つかりませんか? [Knowledge Base](/knowledgebase/) を確認し、本ドキュメント内にある多数の役立つ記事も参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md index 538ef960540..6a3e3d66220 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md @@ -11,11 +11,11 @@ keywords: ['Amazon レビュー', 'カスタマーレビュー データセッ :::note 以下のクエリは、**Production** 環境の ClickHouse Cloud インスタンス上で実行されています。詳細については -["Playground specifications"](/getting-started/playground#specifications) +["Playground specifications"](/getting-started/playground#specifications) を参照してください。 ::: -## データセットの読み込み +## データセットの読み込み {#loading-the-dataset} 1. データを ClickHouse に挿入しなくても、元の場所に対して直接クエリを実行できます。どのようなデータか確認するために、いくつか行を取得してみましょう。 @@ -123,7 +123,6 @@ FROM s3Cluster('default', 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_*.snappy.parquet') ``` - :::tip ClickHouse Cloud では、クラスター名は `default` です。`default` を環境のクラスター名に置き換えてください。クラスターがない場合は、`s3Cluster` の代わりに `s3` テーブル関数を使用してください。 ::: @@ -153,8 +152,7 @@ ORDER BY size DESC 元のデータは約 70G ありましたが、ClickHouse で圧縮されると約 30G に収まります。 - -## クエリ例 +## クエリ例 {#example-queries} 7. クエリをいくつか実行してみましょう。こちらは、このデータセットで最も役に立ったレビューの上位 10 件です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md index eb779872fed..d023dd1cafe 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md @@ -7,7 +7,7 @@ title: '匿名化されたウェブアナリティクス' doc_type: 'guide' --- -# 匿名化されたウェブ解析データ +# 匿名化されたウェブ解析データ {#anonymized-web-analytics-data} このデータセットは、匿名化されたウェブ解析データを含む 2 つのテーブルで構成されており、ヒット(`hits_v1`)と訪問(`visits_v1`)のデータが含まれています。 @@ -15,17 +15,17 @@ doc_type: 'guide' ## データをダウンロードして取り込む {#download-and-ingest-the-data} -### hits の圧縮 TSV ファイルをダウンロードする +### hits の圧縮 TSV ファイルをダウンロードする {#download-the-hits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv -# チェックサムを検証する +# チェックサムを検証する {#validate-the-checksum} md5sum hits_v1.tsv -# チェックサムは次の値と一致する必要があります: f3631b6295bf06989c1437491f7592cb +# チェックサムは次の値と一致する必要があります: f3631b6295bf06989c1437491f7592cb {#checksum-should-be-equal-to-f3631b6295bf06989c1437491f7592cb} ``` -### データベースとテーブルを作成 +### データベースとテーブルを作成 {#create-the-database-and-table} ```bash clickhouse-client --query "CREATE DATABASE IF NOT EXISTS datasets" @@ -45,7 +45,7 @@ clickhouse-client --query="CREATE TABLE default.hits_100m_obfuscated (WatchID UI ``` -### hits データをインポートする +### hits データをインポートする {#import-the-hits-data} ```bash cat hits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.hits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -62,13 +62,13 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1" ``` -### 「visits」の圧縮 TSV ファイルをダウンロード +### 「visits」の圧縮 TSV ファイルをダウンロード {#download-the-visits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv -# チェックサムを検証する +# チェックサムを検証する {#validate-the-checksum} md5sum visits_v1.tsv -# チェックサムは次の値と一致する必要があります: 6dafe1a0f24e59e3fc2d0fed85601de6 +# チェックサムは次の値と一致する必要があります: 6dafe1a0f24e59e3fc2d0fed85601de6 {#checksum-should-be-equal-to-6dafe1a0f24e59e3fc2d0fed85601de6} ``` @@ -78,7 +78,7 @@ md5sum visits_v1.tsv clickhouse-client --query "CREATE TABLE datasets.visits_v1 ( 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 Nested(ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID 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 Nested(ID Int8, SearchEngineID UInt16, AdvEngineID UInt8, PlaceID UInt16, SocialSourceNetworkID UInt8, Domain String, SearchPhrase String, SocialSourcePage 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 Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), Market Nested(Type UInt8, GoalID UInt32, OrderID String, OrderPrice Int64, PP UInt32, DirectPlaceID UInt32, DirectOrderID UInt32, DirectBannerID UInt32, GoodID String, GoodName String, GoodQuantity Int32, GoodPrice Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192" ``` -### visits データを取り込む +### visits データを取り込む {#import-the-visits-data} ```bash cat visits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.visits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -95,7 +95,7 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1" ``` -## JOIN の例 +## JOIN の例 {#an-example-join} hits と visits のデータセットは ClickHouse のテストルーチンで使用されており、これはテストスイートに含まれるクエリの 1 つです。残りのテストは、このページの最後にある *次のステップ* セクションを参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md index 255aca035a4..801f78df415 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md @@ -94,8 +94,7 @@ clickhouse-client --query "INSERT INTO mgbench.logs2 FORMAT CSVWithNames" < mgbe clickhouse-client --query "INSERT INTO mgbench.logs3 FORMAT CSVWithNames" < mgbench3.csv ``` - -## ベンチマーク用クエリを実行する +## ベンチマーク用クエリを実行する {#run-benchmark-queries} ```sql USE mgbench; @@ -238,7 +237,6 @@ ORDER BY machine_name, dt; ``` - ```sql -- Q1.6: すべてのファイルサーバーにおける1時間あたりの総ネットワークトラフィック量は? diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md index b9cfb96e712..edbab07a3a5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md @@ -7,15 +7,15 @@ keywords: ['基地局データ', 'ジオデータ', 'OpenCelliD', '地理空間 doc_type: 'guide' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import ActionsMenu from '@site/docs/_snippets/_service_actions_menu.md'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; -import SupersetDocker from '@site/docs/_snippets/_add_superset_detail.md'; +import ActionsMenu from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_service_actions_menu.md'; +import SQLConsoleDetail from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; +import SupersetDocker from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_add_superset_detail.md'; import cloud_load_data_sample from '@site/static/images/_snippets/cloud-load-data-sample.png'; import cell_towers_1 from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' import add_a_database from '@site/static/images/getting-started/example-datasets/superset-add.png' @@ -29,7 +29,6 @@ import superset_radio_umts from '@site/static/images/getting-started/example-dat import superset_umts_netherlands from '@site/static/images/getting-started/example-datasets/superset-umts-netherlands.png' import superset_cell_tower_dashboard from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' - ## 目標 {#goal} このガイドでは次のことを学びます。 @@ -124,7 +123,7 @@ INSERT INTO cell_towers SELECT * FROM s3('https://datasets-documentation.s3.amaz -## サンプルクエリをいくつか実行する +## サンプルクエリをいくつか実行する {#examples} 1. 種類別のセルタワー数: @@ -171,7 +170,6 @@ SELECT mcc, count() FROM cell_towers GROUP BY mcc ORDER BY count() DESC LIMIT 10 これらの値をデコードするために、ClickHouse で [Dictionary](../../sql-reference/dictionaries/index.md) を作成することを検討してもよいでしょう。 - ## ユースケース:地理データの活用 {#use-case} [`pointInPolygon`](/sql-reference/functions/geo/coordinates.md/#pointinpolygon) 関数を使用します。 @@ -266,7 +264,6 @@ WHERE pointInPolygon((lon, lat), (SELECT * FROM moscow)) 1 rows in set. Elapsed: 0.067 sec. Processed 43.28 million rows, 692.42 MB (645.83 million rows/s., 10.33 GB/s.) ``` - ## スキーマの確認 {#review-of-the-schema} Superset で可視化を作成する前に、使用するカラムを確認しておきましょう。このデータセットは主に、世界中の携帯電話基地局の位置情報(経度と緯度)と無線方式(radio types)の種類を提供します。カラムの説明は [community forum](https://community.opencellid.org/t/documenting-the-columns-in-the-downloadable-cells-database-csv/186) にあります。これから作成する可視化で使用するカラムについては、以下で説明します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md index 6003bffc61f..a7459c0d78d 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md @@ -15,7 +15,7 @@ doc_type: 'guide' このデータセットには、[huggingface.co](https://huggingface.co/api/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M/parquet/default/train/) 上にある 26 個の `Parquet` ファイルが含まれています。ファイル名は `0.parquet`、`1.parquet`、…、`25.parquet` です。データセットのサンプル行を確認するには、この [Hugging Face ページ](https://huggingface.co/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M) を参照してください。 -## テーブルを作成する +## テーブルを作成する {#create-table} 記事 ID、タイトル、テキスト、および埋め込みベクトルを格納する `dbpedia` テーブルを作成します: @@ -31,7 +31,7 @@ CREATE TABLE dbpedia ``` -## テーブルの読み込み +## テーブルの読み込み {#load-table} すべての Parquet ファイルからデータセットを読み込むには、次のシェルコマンドを実行します。 @@ -74,7 +74,7 @@ FROM dbpedia _最近傍(nearest neighbours)_ とは、ユーザーのクエリに関連する結果となる文書、画像、その他のコンテンツを指します。 取得された結果は、生成 AI アプリケーションにおける検索拡張生成(Retrieval Augmented Generation, RAG)の重要な入力となります。 -## 総当たり方式でベクトル類似度検索を実行する +## 総当たり方式でベクトル類似度検索を実行する {#run-a-brute-force-vector-similarity-search} KNN(k-Nearest Neighbours)検索、または総当たり(ブルートフォース)検索では、データセット内の各ベクトルと 検索用埋め込みベクトルとの距離を計算し、その距離を並べ替えて最も近いベクトル(近傍)を取得します。`dbpedia` データセットでは、 @@ -119,7 +119,7 @@ LIMIT 20 また、実際の計算リソース使用量とストレージ帯域幅使用量を把握するため、OS ファイルキャッシュがコールドな状態および `max_threads=1` の条件でのクエリレイテンシも記録してください(それを基に、数百万ベクトル規模の本番データセットでの値を外挿します)。 -## ベクトル類似度インデックスを作成する +## ベクトル類似度インデックスを作成する {#build-vector-similarity-index} `vector` 列にベクトル類似度インデックスを定義・作成するには、次の SQL を実行します。 @@ -134,7 +134,7 @@ ALTER TABLE dbpedia MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2; インデックスの構築および保存処理には、利用可能な CPU コア数やストレージ帯域幅によっては数分かかる場合があります。 -## ANN 検索を実行する +## ANN 検索を実行する {#perform-ann-search} *Approximate Nearest Neighbours*(ANN、近似最近傍)とは、正確なベクトル検索よりもはるかに高速に結果を取得できる一群の手法(たとえば、グラフやランダムフォレストのような専用データ構造)を指します。結果の精度は、実用上はたいてい「十分よい」レベルです。多くの近似手法では、結果精度と検索時間のトレードオフを調整するためのパラメータが提供されています。 @@ -181,7 +181,7 @@ LIMIT 20 ``` -## 検索クエリ用の埋め込みベクトルの生成 +## 検索クエリ用の埋め込みベクトルの生成 {#generating-embeddings-for-search-query} これまでに見てきた類似度検索クエリでは、`dbpedia` テーブル内に既に存在するベクトルの1つを検索ベクトルとして使用していました。実際のアプリケーションでは、検索ベクトルは、自然言語で記述されたものを含むユーザーの入力クエリに対して生成する必要があります。検索ベクトルは、データセット用の埋め込みベクトルを生成する際に使用したものと同じ LLM モデルを使って生成しなければなりません。 @@ -223,7 +223,7 @@ while True: ``` -## Q&A デモアプリケーション +## Q&A デモアプリケーション {#q-and-a-demo-application} 上記の例では、ClickHouse を用いたセマンティック検索とドキュメント検索を示しました。次に紹介するのは、非常にシンプルでありながら高い可能性を持つ生成 AI のサンプルアプリケーションです。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md index 6fb55bd0f42..2868e4a99aa 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md @@ -23,7 +23,7 @@ Foursquare によるこのデータセットは、[ダウンロード](https://d 1 億件以上のレコードが含まれています。さらに、それらの場所に関するカテゴリやソーシャルメディア情報といった 追加のメタデータも含まれています。 -## データ探索 +## データ探索 {#data-exploration} データ探索には、[`clickhouse-local`](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local) を使用します。これはフル機能の ClickHouse エンジンを提供する軽量なコマンドラインツールですが、代わりに ClickHouse Cloud や `clickhouse-client`、あるいは `chDB` を使用することもできます。 @@ -147,7 +147,7 @@ DESCRIBE s3('s3://fsq-os-places-us-east-1/release/dt=2025-04-08/places/parquet/* ``` -## データを ClickHouse に取り込む +## データを ClickHouse に取り込む {#loading-the-data} データをディスクに永続化したい場合は、`clickhouse-server` または ClickHouse Cloud を使用できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md index e97039f9309..ae76e5c4ebf 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md @@ -29,7 +29,7 @@ import superset_authors_matrix_v2 from '@site/static/images/getting-started/exam * `line_changes` - 2.7G - 7,535,157 行 -## データの生成 +## データの生成 {#generating-the-data} この手順は任意です。データは無償で配布しています。「[データのダウンロードと挿入](#downloading-and-inserting-the-data)」を参照してください。 @@ -73,7 +73,7 @@ CREATE TABLE git.commits * Linux - `~/clickhouse git-import` - 160分 -## データのダウンロードと挿入 +## データのダウンロードと挿入 {#downloading-and-inserting-the-data} 以下のデータを使用すると、動作環境を再現できます。また、このデータセットは play.clickhouse.com からも利用できます。詳しくは [Queries](#queries) を参照してください。 @@ -220,7 +220,7 @@ FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/clickhou このデータセットは、`git_clickhouse` データベース内にある [play.clickhouse.com](https://sql.clickhouse.com?query_id=DCQPNPAIMAQXRLHYURLKVJ) で利用できます。すべてのクエリについて、この環境へのリンクを、必要に応じてデータベース名を調整したうえで提供します。なお、データ収集時期の違いにより、play.clickhouse.com 上での結果は、ここで示すものと異なる場合があります。 -### 単一ファイルの履歴 +### 単一ファイルの履歴 {#history-of-a-single-file} 最も単純なクエリです。ここでは `StorageReplicatedMergeTree.cpp` のすべてのコミットメッセージを確認します。これらのほうが興味深いと考えられるため、最新のメッセージが先頭に来るように並べ替えます。 @@ -296,7 +296,7 @@ LIMIT 10 ファイル名の変更も考慮して、[ファイルの行ごとのコミット履歴](#line-by-line-commit-history-of-a-file)を取得する、より複雑な形のクエリも存在します。 -### 現在アクティブなファイルを特定する +### 現在アクティブなファイルを特定する {#find-the-current-active-files} これは、リポジトリ内の現在のファイルだけを対象に分析したい後続の処理において重要です。ここでは、「名前変更も削除もされておらず(その後に再追加/再リネームされていない)ファイル」の集合として推定します。 @@ -428,7 +428,7 @@ git ls-files | grep -v -E 'generated\.cpp|^(contrib|docs?|website|libs/(libcityh これらの差分は、私たちの分析に本質的な影響を与えることはないはずです。**このクエリの改善版をぜひお寄せください**。 -### 変更数が最も多いファイルを一覧表示する +### 変更数が最も多いファイルを一覧表示する {#list-files-with-most-modifications} 現在のファイルに限定すると、変更数は削除数と追加数の合計とみなします。 @@ -484,7 +484,7 @@ LIMIT 10 ``` -### コミットは通常、週のどの曜日に行われることが多いですか? +### コミットは通常、週のどの曜日に行われることが多いですか? {#what-day-of-the-week-do-commits-usually-occur} [play](https://sql.clickhouse.com?query_id=GED2STFSYJDRAA59H8RLIV) @@ -510,7 +510,7 @@ GROUP BY dayOfWeek(time) AS day_of_week 金曜日には生産性が少し落ちることを考えると、これは納得のいく結果です。週末にもコードをコミットしてくれている人がいるのは素晴らしいですね。貢献してくださっている皆さん、本当にありがとうございます! -### サブディレクトリ/ファイルの履歴 - 行数、コミット数、コントリビューター数の推移 +### サブディレクトリ/ファイルの履歴 - 行数、コミット数、コントリビューター数の推移 {#history-of-subdirectoryfile---number-of-lines-commits-and-contributors-over-time} このクエリは、フィルタしない場合、非常に大きな結果セットとなり、現実的には表示や可視化が困難です。そこで、次の例ではファイルまたはサブディレクトリでフィルタリングできるようにしています。ここでは `toStartOfWeek` 関数を使って週ごとにグルーピングしていますが、必要に応じて調整してください。 @@ -555,7 +555,7 @@ LIMIT 10 コミットおよび作者 -### 著者数が最も多いファイルを一覧表示する +### 著者数が最も多いファイルを一覧表示する {#list-files-with-maximum-number-of-authors} 現在のファイルのみを対象とします。 @@ -611,7 +611,7 @@ LIMIT 10 ``` -### リポジトリ内で最も古いコード行 +### リポジトリ内で最も古いコード行 {#oldest-lines-of-code-in-the-repository} 現在存在するファイルのみが対象です。 @@ -669,7 +669,7 @@ LIMIT 10 ``` -### 履歴が最も長いファイル +### 履歴が最も長いファイル {#files-with-longest-history} 現在存在するファイルのみを対象とします。 @@ -728,7 +728,7 @@ LIMIT 10 コアとなるデータ構造である MergeTree は、言うまでもなく、長年にわたる数多くの改良を経て、今もなお進化し続けています。 -### 月内におけるドキュメントとコード別のコントリビューター分布 +### 月内におけるドキュメントとコード別のコントリビューター分布 {#distribution-of-contributors-with-respect-to-docs-and-code-over-the-month} **データ取得時には、コミット履歴が非常に入り組んでいたため `docs/` フォルダに対する変更を除外しています。そのため、このクエリから得られる結果は正確ではありません。** @@ -792,7 +792,7 @@ FROM 月末にかけてやや多くなるかもしれませんが、全体としては概ね均等に分布しています。とはいえ、データ挿入時に `docs` フィルタで絞り込んでいるため、この結果の信頼性は高くありません。 -### 最も多様な貢献をしている著者 +### 最も多様な貢献をしている著者 {#authors-with-the-most-diverse-impact} ここでいう「多様性」とは、ある著者が貢献したユニークなファイル数を指します。 @@ -870,7 +870,7 @@ LIMIT 10 ``` -### 著者のお気に入りファイル +### 著者のお気に入りファイル {#favorite-files-for-an-author} ここでは創業者の [Alexey Milovidov](https://github.com/alexey-milovidov) を選択し、分析対象を現行のファイルに限定します。 @@ -957,7 +957,7 @@ LIMIT 10 こちらの方が、彼の関心のある分野をより適切に反映しているかもしれません。 -### 著者数が最も少ない巨大ファイル +### 著者数が最も少ない巨大ファイル {#largest-files-with-lowest-number-of-authors} このためには、まず最大サイズのファイルを特定する必要があります。コミット履歴からすべてのファイルについて完全なファイル再構成を行ってサイズを見積もるのは、非常に高コストです。 @@ -1130,7 +1130,7 @@ LIMIT 10 ``` -### 時間帯別、曜日別、作者別、特定サブディレクトリ別のコミット数とコード行数の分布 +### 時間帯別、曜日別、作者別、特定サブディレクトリ別のコミット数とコード行数の分布 {#commits-and-lines-of-code-distribution-by-time-by-weekday-by-author-for-specific-subdirectories} ここでは、これを曜日ごとの追加行数と削除行数として解釈します。この例では、[Functions ディレクトリ](https://github.com/ClickHouse/ClickHouse/tree/master/src/Functions)に注目します。 @@ -1258,7 +1258,7 @@ FROM ``` -### 著者同士が互いのコードを書き換える傾向を示すマトリクス +### 著者同士が互いのコードを書き換える傾向を示すマトリクス {#matrix-of-authors-that-shows-what-authors-tends-to-rewrite-another-authors-code} `sign = -1` はコードの削除を示します。句読点や空行の挿入は除外しています。 @@ -1313,7 +1313,7 @@ Alexey は明らかに他人のコードを削除するのが好きなようで Superset authors matrix v2 -### 曜日ごとに最も高い割合でコミットしているのは誰か? +### 曜日ごとに最も高い割合でコミットしているのは誰か? {#who-is-the-highest-percentage-contributor-per-day-of-week} コミット数だけで見ると: @@ -1514,7 +1514,7 @@ LIMIT 5 BY root ``` -### ある著者のコードのうち、どれだけの割合が他の著者によって削除されたか? +### ある著者のコードのうち、どれだけの割合が他の著者によって削除されたか? {#what-percentage-of-code-for-an-author-has-been-removed-by-other-authors} このクエリでは、特定の著者が作成した行数を、その著者のコードのうち他のコントリビューターによって削除された行数の合計で割った値が必要です。 @@ -1565,7 +1565,7 @@ LIMIT 10 ``` -### 最も多く書き換えられたファイルを一覧表示するには? +### 最も多く書き換えられたファイルを一覧表示するには? {#list-files-that-were-rewritten-most-number-of-times} この問いに対する最も単純なアプローチは、(現在存在するファイルに限定して)パスごとの行の変更回数を数えることです。例: @@ -1708,7 +1708,7 @@ LIMIT 10 ``` -### どの曜日に追加されたコードが最もリポジトリ内に残りやすいか? +### どの曜日に追加されたコードが最もリポジトリ内に残りやすいか? {#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository} このためには、コードの各行を一意に識別する必要があります。同じ行がファイル内に複数回現れる可能性があるため、パスと行内容の組み合わせで推定します。 @@ -1771,7 +1771,7 @@ GROUP BY dayOfWeek(added_day) AS day_of_week_added ``` -### 平均コード年齢でソートされたファイル +### 平均コード年齢でソートされたファイル {#files-sorted-by-average-code-age} このクエリは、[リポジトリに最も長く残りやすい曜日はいつか](#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository) と同じ原理を用い、パスと行の内容によってコード行を一意に識別することを目指します。 これにより、あるコード行が追加されてから削除されるまでの時間を特定できます。ただし対象は現在存在するファイルおよびコードのみに絞り込み、各ファイルについて行ごとの時間を平均します。 @@ -1862,7 +1862,7 @@ LIMIT 10 ``` -### 誰がより多くのテスト / C++ コード / コメントを書く傾向があるのか? +### 誰がより多くのテスト / C++ コード / コメントを書く傾向があるのか? {#who-tends-to-write-more-tests--cpp-code--comments} この問いにはいくつかのアプローチがあります。コードとテストの比率に着目すると、このクエリは比較的単純で、`tests` を含むフォルダへのコントリビューション数を数え、それを全コントリビューション数で割って比率を算出します。 @@ -1996,7 +1996,7 @@ LIMIT 10 コードへの貢献数でソートしている点に注意してください。上位の主要なコントリビューターはいずれも、驚くほど高い割合を占めており、これがコードの可読性の高さにもつながっています。 -### コードとコメントの割合という観点で、ある作者のコミットは時間とともにどのように変化するでしょうか? +### コードとコメントの割合という観点で、ある作者のコミットは時間とともにどのように変化するでしょうか? {#how-does-an-authors-commits-change-over-time-with-respect-to-codecomments-percentage} 作者ごとにこの値を計算するのは容易です。 @@ -2114,7 +2114,7 @@ LIMIT 20 励みになることに、コメント率はほぼ一定で、著者が長期間にわたって貢献しても低下していません。 -### コードが書き換えられるまでの平均時間と中央値(コード劣化の半減期)はどのくらいか? +### コードが書き換えられるまでの平均時間と中央値(コード劣化の半減期)はどのくらいか? {#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay} [最も多く書き換えられた、あるいは最も多くの著者によって編集されたファイルを一覧表示する](#list-files-that-were-rewritten-most-number-of-times)ときと同じ原理を、すべてのファイルを対象にして書き換えを特定するために使うことができます。各ファイルについて、書き換えの間隔を算出するためにウィンドウ関数を使用します。そこから、すべてのファイルにわたる平均値と中央値を算出できます。 @@ -2175,7 +2175,7 @@ FROM rewrites ``` -### 将来書き直される可能性が最も高いという観点で、コードを書くのに最悪なタイミングはいつでしょうか? +### 将来書き直される可能性が最も高いという観点で、コードを書くのに最悪なタイミングはいつでしょうか? {#what-is-the-worst-time-to-write-code-in-sense-that-the-code-has-highest-chance-to-be-re-written} [What is the average time before code will be rewritten and the median (half-life of code decay)?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) および [List files that were rewritten most number of time or by most of authors](#list-files-that-were-rewritten-most-number-of-times) と同様ですが、ここでは集計単位を曜日としています。必要に応じて、たとえば月ごとなどに調整してください。 @@ -2240,7 +2240,7 @@ GROUP BY dayOfWeek ``` -### どの著者のコードが最も「定着」しているか? +### どの著者のコードが最も「定着」しているか? {#which-authors-code-is-the-most-sticky} ここでは「sticky(定着度)」を、「著者のコードが書き換えられるまでどれくらいの期間残り続けるか」という意味で定義します。前の質問 [コードが書き換えられるまでの平均時間と中央値(コード崩壊の半減期)は?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) と同様に、書き換えの指標として、ファイルに対する 50% の追加と 50% の削除を用います。著者ごとに平均書き換え時間を算出し、2 ファイルより多くのファイルに貢献しているコントリビューターのみを対象とします。 @@ -2318,7 +2318,7 @@ LIMIT 10 ``` -### 著者ごとの連続コミット日数の最大値 +### 著者ごとの連続コミット日数の最大値 {#most-consecutive-days-of-commits-by-an-author} このクエリではまず、著者がコミットを行った日付を算出する必要があります。ウィンドウ関数を使用し、著者ごとにパーティション分割することで、コミット間の日数を計算します。各コミットについて、前回のコミットからの経過日数が1日であれば連続 (1)、それ以外は0としてマークし、その結果を `consecutive_day` に保存します。 @@ -2374,7 +2374,7 @@ LIMIT 10 ``` -### ファイルの行ごとのコミット履歴 +### ファイルの行ごとのコミット履歴 {#line-by-line-commit-history-of-a-file} ファイルはリネームされることがあります。この場合、リネームイベントが発生し、その際に `path` カラムにはファイルの新しいパスが、`old_path` には以前の場所が設定されます。例えば次のとおりです。 @@ -2455,7 +2455,7 @@ FORMAT PrettyCompactMonoBlock ## 未解決の問題 {#unsolved-questions} -### Git blame +### Git blame {#git-blame} これは、配列関数内で現在は状態を保持できないため、厳密な結果を得るのが特に難しいケースです。各イテレーションで状態を保持できるようにする `arrayFold` や `arrayReduce` が利用可能になれば、これが実現できるようになります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md index 73915053ac5..da1fba68b4b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['サンプルデータセット', 'Hacker News', 'サンプルデータ', 'テキスト分析', 'ベクトル検索'] --- -# Hacker News データセット +# Hacker News データセット {#hacker-news-dataset} > このチュートリアルでは、Hacker News のデータ 2,800 万行を、CSV および Parquet 形式から ClickHouse > のテーブルに挿入し、そのデータを探索するための簡単なクエリを実行します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md index 2dd6fb3a6b3..73b90f05945 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md @@ -11,7 +11,7 @@ keywords: ['サンプルデータセット', 'laion', '画像埋め込み', 'サ このデータセットには、画像の URL、画像および画像キャプションそれぞれの埋め込みベクトル、画像と画像キャプション間の類似度スコアに加え、画像の幅/高さ、ライセンス、NSFW フラグといったメタデータが含まれます。このデータセットを使って、ClickHouse における[近似最近傍検索](../../engines/table-engines/mergetree-family/annindexes.md)を実演できます。 -## データ準備 +## データ準備 {#data-preparation} 生データでは、埋め込みとメタデータは別々のファイルに保存されています。データ準備のステップでは、データをダウンロードしてファイルを結合し、 CSV に変換して ClickHouse にインポートします。そのために、次の `download.sh` スクリプトを使用できます。 @@ -40,28 +40,28 @@ npy_file = "img_emb_" + str_i + '.npy' metadata_file = "metadata_" + str_i + '.parquet' text_npy = "text_emb_" + str_i + '.npy' -# 全ファイルを読み込み +# 全ファイルを読み込み {#load-all-files} im_emb = np.load(npy_file) text_emb = np.load(text_npy) data = pd.read_parquet(metadata_file) -# ファイルを結合 +# ファイルを結合 {#combine-files} data = pd.concat([data, pd.DataFrame({"image_embedding" : [*im_emb]}), pd.DataFrame({"text_embedding" : [*text_emb]})], axis=1, copy=False) -# ClickHouseへインポートする列 +# ClickHouseへインポートする列 {#columns-to-be-imported-into-clickhouse} data = data[['url', 'caption', 'NSFW', 'similarity', "image_embedding", "text_embedding"]] -# np.arraysをリストへ変換 +# np.arraysをリストへ変換 {#transform-nparrays-to-lists} data['image_embedding'] = data['image_embedding'].apply(lambda x: x.tolist()) data['text_embedding'] = data['text_embedding'].apply(lambda x: x.tolist()) -# captionに様々な引用符が含まれる場合があるため、この回避策が必要 +# captionに様々な引用符が含まれる場合があるため、この回避策が必要 {#this-small-hack-is-needed-because-caption-sometimes-contains-all-kind-of-quotes} data['caption'] = data['caption'].apply(lambda x: x.replace("'", " ").replace('"', " ")) -# データをCSVファイルとしてエクスポート +# データをCSVファイルとしてエクスポート {#export-data-as-csv-file} data.to_csv(str_i + '.csv', header=False) -# 生データファイルを削除 +# 生データファイルを削除 {#removed-raw-data-files} os.system(f"rm {npy_file} {metadata_file} {text_npy}") ``` @@ -76,7 +76,7 @@ seq 0 409 | xargs -P1 -I{} bash -c './download.sh {}' (上記の Python スクリプトは非常に遅く(1 ファイルあたり約 2〜10 分)、大量のメモリを消費し(1 ファイルあたり 41 GB)、生成される CSV ファイルも大きい(各 10 GB)ため、注意してください。十分な RAM がある場合は、より高い並列度を得るために `-P1` の値を増やしてください。これでもまだ遅い場合は、より良いインジェスト手順を検討してください。たとえば .npy ファイルを Parquet に変換してから、残りの処理をすべて ClickHouse で行うなどです。) -## テーブルを作成する +## テーブルを作成する {#create-table} 最初にインデックスなしでテーブルを作成するには、次を実行します。 @@ -105,7 +105,7 @@ INSERT INTO laion FROM INFILE '{path_to_csv_files}/*.csv' `id` 列はあくまで例示用のものであり、スクリプトによって一意ではない値が入力されている点に注意してください。 -## 総当たり方式でベクトル類似度検索を実行する +## 総当たり方式でベクトル類似度検索を実行する {#run-a-brute-force-vector-similarity-search} 総当たり方式の近似ベクトル検索を実行するには、次を実行します。 @@ -137,7 +137,7 @@ SELECT url, caption FROM laion ORDER BY cosineDistance(image_embedding, {target: ``` -## ベクトル類似度インデックスを使って近似ベクトル類似検索を実行する +## ベクトル類似度インデックスを使って近似ベクトル類似検索を実行する {#run-an-approximate-vector-similarity-search-with-a-vector-similarity-index} ここでは、テーブルに 2 つのベクトル類似度インデックスを定義します。 @@ -194,7 +194,7 @@ HNSW インデックスは、HNSW パラメータを慎重に選定し、イン 通常は、新しい画像や新しい画像キャプションに対して埋め込みを作成し、そのデータ内で類似する画像/画像キャプションのペアを検索します。[UDF](/sql-reference/functions/udf) を使用すると、クライアント環境を離れることなく `target` ベクトルを作成できます。データ作成時と検索用の新しい埋め込みを生成する際には、同じモデルを使用することが重要です。以下のスクリプトは、データセットの基盤にもなっている `ViT-B/32` モデルを利用します。 -### テキスト埋め込み +### テキスト埋め込み {#text-embeddings} まず、次の Python スクリプトを ClickHouse のデータパス配下にある `user_scripts/` ディレクトリに保存し、実行可能にします(`chmod +x encode_text.py`)。 @@ -256,7 +256,7 @@ LIMIT 10 `encode_text()` UDF 自体が計算を行い埋め込みベクトルを出力するまでに、数秒かかる場合があることに注意してください。 -### 画像埋め込み +### 画像埋め込み {#image-embeddings} 画像埋め込みも同様に作成できるように、ローカルにファイルとして保存されている画像の埋め込みを生成するための Python スクリプトを用意しています。 @@ -304,7 +304,7 @@ if __name__ == '__main__': 検索用のサンプル画像を取得: ```shell -# LEGOセットのランダムな画像を取得 +# LEGOセットのランダムな画像を取得 {#get-a-random-image-of-a-lego-set} $ wget http://cdn.firstcry.com/brainbees/images/products/thumb/191325a.jpg ``` diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md index cb8b2529975..dfcbae74b10 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md @@ -15,22 +15,22 @@ keywords: ['example dataset', 'menus', 'historical data', 'sample data', 'nypl'] このデータは図書館アーカイブ由来であるため、不完全であったり、統計解析には扱いづらい場合があります。それでも、とても「おいしい」データです。 メニューに掲載された料理に関するレコードはわずか130万件で、ClickHouse にとってはごく小さなデータ量ですが、良いサンプルとして利用できます。 -## データセットをダウンロードする +## データセットをダウンロードする {#download-dataset} 次のコマンドを実行します。 ```bash wget https://s3.amazonaws.com/menusdata.nypl.org/gzips/2021_08_01_07_01_17_data.tgz -# オプション: チェックサムの検証 +# オプション: チェックサムの検証 {#option-validate-the-checksum} md5sum 2021_08_01_07_01_17_data.tgz -# チェックサムは次と一致する必要があります: db6126724de939a5481e3160a2d67d15 +# チェックサムは次と一致する必要があります: db6126724de939a5481e3160a2d67d15 {#checksum-should-be-equal-to-db6126724de939a5481e3160a2d67d15} ``` 必要に応じて、[http://menus.nypl.org/data](http://menus.nypl.org/data) にある最新のリンクに差し替えてください。 ダウンロードサイズは約 35 MB です。 -## データセットの展開 +## データセットの展開 {#unpack-dataset} ```bash tar xvf 2021_08_01_07_01_17_data.tgz @@ -46,7 +46,7 @@ tar xvf 2021_08_01_07_01_17_data.tgz * `MenuItem` — メニュー項目。特定のメニューページ上での料理とその価格を表し、`Dish` と `MenuPage` へのリンクを持ちます。 -## テーブルを作成する +## テーブルを作成する {#create-tables} 価格を格納するために[Decimal](../../sql-reference/data-types/decimal.md)データ型を使用します。 @@ -114,7 +114,7 @@ CREATE TABLE menu_item ``` -## データをインポートする +## データをインポートする {#import-data} ClickHouse にデータをアップロードするには、次のコマンドを実行します: @@ -134,7 +134,7 @@ clickhouse-client --format_csv_allow_single_quotes 0 --input_format_null_as_defa [date_time_input_format best_effort](/operations/settings/formats#date_time_input_format) 設定により、[DateTime](../../sql-reference/data-types/datetime.md) フィールドをさまざまなフォーマットでパースできます。例えば、秒なしの ISO-8601 形式である「2000-01-01 01:02」も認識されます。この設定を有効にしない場合、固定形式の DateTime フォーマットのみが許可されます。 -## データを非正規化する +## データを非正規化する {#denormalize-data} データは[正規化形式](https://en.wikipedia.org/wiki/Database_normalization#Normal_forms)で複数のテーブルに分かれて格納されています。これは、例えばメニュー項目から料理名をクエリしたい場合などに、[JOIN](/sql-reference/statements/select/join) を実行する必要があるということです。 典型的な分析タスクでは、毎回 `JOIN` を実行しないよう、あらかじめ JOIN 済みのデータを扱う方がはるかに効率的です。これを「非正規化」データと呼びます。 @@ -187,7 +187,7 @@ FROM menu_item ``` -## データを検証する +## データを検証する {#validate-data} クエリ: @@ -206,7 +206,7 @@ SELECT count() FROM menu_item_denorm; ## いくつかのクエリを実行してみる {#run-queries} -### 料理の過去平均価格 +### 料理の過去平均価格 {#query-averaged-historical-prices} クエリ: @@ -249,7 +249,7 @@ ORDER BY d ASC; あくまで目安としてお考えください。 -### ハンバーガーの価格 +### ハンバーガーの価格 {#query-burger-prices} クエリ: @@ -287,7 +287,7 @@ ORDER BY d ASC; ``` -### ウォッカ +### ウォッカ {#query-vodka} クエリ: @@ -322,7 +322,7 @@ ORDER BY d ASC; ウォッカを取得するには `ILIKE '%vodka%'` と書く必要があり、これはなかなかインパクトのある書き方です。 -### キャビア +### キャビア {#query-caviar} キャビアの価格を表示しましょう。また、キャビア料理の名前をひとつ表示しましょう。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md index 0cab1334a30..e46b2b4a78f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md @@ -28,7 +28,7 @@ The sections below give a brief overview of the steps that were involved in brin - ClickHouse 向けに[事前に用意されたデータ](#pre-prepared-data)。クレンジングや再構造化、拡張が行われており、1900 年から 2022 年までをカバーしています。 - [元データをダウンロード](#original-data)して、ClickHouse に必要な形式へ変換します。独自のカラムを追加したいユーザーは、このアプローチを検討するとよいでしょう。 -### 事前処理済みデータ +### 事前処理済みデータ {#pre-prepared-data} より具体的には、NOAA による品質保証チェックで一度も失敗しなかった行は削除されています。また、データは 1 行につき 1 測定値という構造から、station id と日付ごとに 1 行という構造に再編成されています。つまり、 @@ -55,7 +55,7 @@ wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enriche 以下では、ClickHouse にロードするための準備として、元データをダウンロードおよび変換する手順を説明します。 -#### ダウンロード +#### ダウンロード {#download} 元データをダウンロードするには、次の手順を行います。 @@ -64,7 +64,7 @@ for i in {1900..2023}; do wget https://noaa-ghcn-pds.s3.amazonaws.com/csv.gz/${i ``` -#### データのサンプリング +#### データのサンプリング {#sampling-the-data} ```bash $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format PrettyCompact @@ -108,7 +108,7 @@ $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format Prett 1 行あたり 1 件の測定値とする形式では、ClickHouse ではスパースなテーブル構造になってしまいます。時刻と観測所ごとに 1 行とし、測定値を列として持つ形式に変換する必要があります。まず、問題のない行、すなわち `qFlag` が空文字列に等しい行にデータセットを絞り込みます。 -#### データをクリーンアップする +#### データをクリーンアップする {#clean-the-data} [ClickHouse local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local) を使用して、関心のある測定値を表し、かつ品質要件を満たす行だけが残るようにフィルタリングできます。 @@ -122,7 +122,7 @@ FROM file('*.csv.gz', CSV, 'station_id String, date String, measurement String, 26億行以上あるため、すべてのファイルをパースするこのクエリは高速ではありません。8コアのマシンでは、完了までに約160秒かかります。 -### データのピボット +### データのピボット {#pivot-data} 1 行に 1 つの計測値を持つ構造も ClickHouse で利用できますが、将来のクエリを不必要に複雑にしてしまいます。理想的には、各 station id と日付ごとに 1 行とし、各計測タイプとその値がそれぞれ列になる形が望ましいです。つまり、次のようなイメージです。 @@ -161,7 +161,7 @@ done このクエリにより、サイズが 50GB の単一ファイル `noaa.csv` が生成されます。 -### データの拡充 +### データの拡充 {#enriching-the-data} 現在のデータには、国コードのプレフィックスを含むステーション ID 以外に位置情報に関する情報がありません。本来であれば、各ステーションには緯度と経度が紐づいていることが望ましいです。これを実現するために、NOAA は各ステーションの詳細を別ファイルとして提供しており、それが [ghcnd-stations.txt](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file) です。このファイルには[複数の列](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file)があり、そのうち今後の分析で有用なのは 5 つの列、すなわち id、latitude、longitude、elevation、name です。 @@ -194,7 +194,7 @@ FROM file('noaa.csv', CSV, このクエリは実行に数分かかり、サイズ 6.4 GB の `noaa_enriched.parquet` ファイルを生成します。 -## テーブルの作成 +## テーブルの作成 {#create-table} ClickHouse クライアントから、ClickHouse 上に MergeTree テーブルを作成します。 @@ -223,7 +223,7 @@ CREATE TABLE noaa ## ClickHouse へのデータ挿入 {#inserting-into-clickhouse} -### ローカルファイルからの挿入 +### ローカルファイルからの挿入 {#inserting-from-local-file} データは、ClickHouse クライアントから次のようにローカルファイルから挿入できます: @@ -236,7 +236,7 @@ INSERT INTO noaa FROM INFILE '/noaa_enriched.parquet' この読み込みを高速化する方法については[こちら](https://clickhouse.com/blog/real-world-data-noaa-climate-data#load-the-data)を参照してください。 -### S3 からの挿入 +### S3 からの挿入 {#inserting-from-s3} ```sql INSERT INTO noaa SELECT * @@ -249,7 +249,7 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enr ## サンプルクエリ {#sample-queries} -### 観測史上最高気温 +### 観測史上最高気温 {#highest-temperature-ever} ```sql SELECT @@ -278,7 +278,7 @@ LIMIT 5 2023 年時点での [Furnace Creek](https://www.google.com/maps/place/36%C2%B027'00.0%22N+116%C2%B052'00.1%22W/@36.1329666,-116.1104099,8.95z/data=!4m5!3m4!1s0x0:0xf2ed901b860f4446!8m2!3d36.45!4d-116.8667) における[記録上の最高気温](https://en.wikipedia.org/wiki/List_of_weather_records#Highest_temperatures_ever_recorded)と比べても、安心できるほどよく一致しています。 -### 最高のスキーリゾート +### 最高のスキーリゾート {#best-ski-resorts} アメリカ合衆国の[スキーリゾート一覧](https://gist.githubusercontent.com/gingerwizard/dd022f754fd128fdaf270e58fa052e35/raw/622e03c37460f17ef72907afe554cb1c07f91f23/ski_resort_stats.csv)とそれぞれの所在地を用い、過去5年間のいずれかの月における降雪量が最大だった上位1000件の気象観測所と結合します。この結合結果を[geoDistance](/sql-reference/functions/geo/coordinates/#geodistance)でソートし、距離が20km未満のものに絞り込んだうえで、リゾートごとに最上位の結果を選択し、それらを合計降雪量で並べ替えます。なお、良好なスキーコンディションの大まかな指標として、標高1800m以上のリゾートのみに制限しています。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md index 1268ecf07d8..9407ab26c93 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md @@ -24,7 +24,7 @@ import TabItem from '@theme/TabItem'; ::: -## trips テーブルを作成する +## trips テーブルを作成する {#create-the-table-trips} まずはタクシー乗車データ用のテーブルを作成します。 @@ -125,7 +125,7 @@ FROM gcs( -## サンプルクエリ +## サンプルクエリ {#sample-queries} 以下のクエリは、前述のサンプルに対して実行されます。ユーザーは、以下のクエリを修正してテーブル `nyc_taxi.trips` を使用することで、完全なデータセットに対してサンプルクエリを [sql.clickhouse.com](https://sql.clickhouse.com/?query=U0VMRUNUIGNvdW50KCkgRlJPTSBueWNfdGF4aS50cmlwcw\&chart=eyJ0eXBlIjoibGluZSIsImNvbmZpZyI6eyJ0aXRsZSI6IlRlbXBlcmF0dXJlIGJ5IGNvdW50cnkgYW5kIHllYXIiLCJ4YXhpcyI6InllYXIiLCJ5YXhpcyI6ImNvdW50KCkiLCJzZXJpZXMiOiJDQVNUKHBhc3Nlbmdlcl9jb3VudCwgJ1N0cmluZycpIn19) 上で実行できます。 @@ -182,7 +182,7 @@ ORDER BY passenger_count ASC ``` -## 準備済みパーティションのダウンロード +## 準備済みパーティションのダウンロード {#download-of-prepared-partitions} :::note 以下の手順では、元のデータセットに関する情報と、準備済みパーティションをセルフマネージドな ClickHouse サーバー環境にロードする方法を説明します。 @@ -195,9 +195,9 @@ ORDER BY passenger_count ASC ```bash $ curl -O https://datasets.clickhouse.com/trips_mergetree/partitions/trips_mergetree.tar -# チェックサムを検証する +# チェックサムを検証する {#validate-the-checksum} $ md5sum trips_mergetree.tar -# チェックサムは次の値と一致する必要があります: f3b8d469b41d9a82da064ded7245d12c +# チェックサムは次の値と一致する必要があります: f3b8d469b41d9a82da064ded7245d12c {#checksum-should-be-equal-to-f3b8d469b41d9a82da064ded7245d12c} $ tar xvf trips_mergetree.tar -C /var/lib/clickhouse # ClickHouse データディレクトリへのパス $ # 展開されたデータの権限を確認し、必要に応じて修正する $ sudo service clickhouse-server restart @@ -209,7 +209,7 @@ $ clickhouse-client --query "select count(*) from datasets.trips_mergetree" ::: -## 単一サーバー環境での結果 +## 単一サーバー環境での結果 {#results-on-single-server} Q1: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md index 08afe191fdd..b417e399de8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md @@ -42,7 +42,7 @@ keywords: ['サンプルデータセット', 'nypd', '犯罪データ', 'サン ClickHouse データベースを扱い始める前に、まずデータの内容を確認しておいてください。 -### 元の TSV ファイルのフィールドを確認する +### 元の TSV ファイルのフィールドを確認する {#look-at-the-fields-in-the-source-tsv-file} これは TSV ファイルをクエリするコマンド例ですが、まだ実行しないでください。 @@ -119,7 +119,7 @@ New Georeferenced Column Nullable(String) ここで、TSV ファイル内のカラムが、[dataset web page](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243) の **Columns in this Dataset** セクションに記載されている名前と型と一致しているか確認してください。データ型はあまり厳密ではなく、数値フィールドはすべて `Nullable(Float64)`、それ以外のフィールドはすべて `Nullable(String)` になっています。データを保存するための ClickHouse テーブルを作成する際には、より適切でパフォーマンスに優れた型を指定できます。 -### 適切なスキーマを決定する +### 適切なスキーマを決定する {#determine-the-proper-schema} 各フィールドにどの型を使用すべきか判断するには、データがどのような内容かを把握しておく必要があります。たとえば、フィールド `JURISDICTION_CODE` は数値ですが、これは `UInt8` にすべきでしょうか、それとも `Enum` にすべきでしょうか、あるいは `Float64` が適切でしょうか? @@ -210,7 +210,7 @@ clickhouse-local --input_format_max_rows_to_read_for_schema_inference=2000 \ この執筆時点で使用しているデータセットでは、`PARK_NM` 列に含まれる公園および遊び場の値は数百種類しかありません。これは、`LowCardinality(String)` フィールド内の異なる文字列数を 10,000 未満に抑えることを推奨している [LowCardinality](/sql-reference/data-types/lowcardinality#description) のガイドラインと比較しても小さい数です。 -### DateTime フィールド +### DateTime フィールド {#datetime-fields} [データセットのウェブページ](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243) の **Columns in this Dataset** セクションによると、報告されたイベントの開始時刻と終了時刻を表す日時フィールドが用意されています。`CMPLNT_FR_DT` と `CMPLT_TO_DT` の最小値と最大値を確認すると、これらのフィールドが常に値で埋められているかどうかを把握できます。 @@ -297,7 +297,7 @@ FORMAT PrettyCompact" 型に対して行うべき変更はまだ多くありますが、いずれも同じ調査手順に従うことで判断できます。フィールド内の文字列の異なる値の数や、数値の最小値と最大値を確認し、それに基づいて決定してください。このガイドの後半で示すテーブルスキーマでは、低カーディナリティの文字列と符号なし整数フィールドが多数あり、浮動小数点数値はごくわずかです。 ::: -## 日付フィールドと時刻フィールドを連結する +## 日付フィールドと時刻フィールドを連結する {#concatenate-the-date-and-time-fields} 日付フィールド `CMPLNT_FR_DT` と時刻フィールド `CMPLNT_FR_TM` を、`DateTime` 型にキャスト可能な 1 つの `String` 型の値に連結するには、連結演算子で結合した 2 つのフィールドを選択します: `CMPLNT_FR_DT || ' ' || CMPLNT_FR_TM`。`CMPLNT_TO_DT` と `CMPLNT_TO_TM` フィールドも同様に処理されます。 @@ -328,7 +328,7 @@ FORMAT PrettyCompact" ``` -## 日付と時刻の文字列を DateTime64 型に変換する +## 日付と時刻の文字列を DateTime64 型に変換する {#convert-the-date-and-time-string-to-a-datetime64-type} このガイドの前のセクションで、TSV ファイル内に 1970 年 1 月 1 日より前の日付が含まれていることを確認しました。これは、日付に 64 ビットの DateTime 型が必要であることを意味します。さらに、日付は `MM/DD/YYYY` 形式から `YYYY/MM/DD` 形式へ変換する必要があります。これらはどちらも、[`parseDateTime64BestEffort()`](../../sql-reference/functions/type-conversion-functions.md#parsedatetime64besteffort) を使用して実行できます。 @@ -389,7 +389,7 @@ FORMAT PrettyCompact" これまでに決定した、カラムに使用するデータ型は、以下のテーブルスキーマに反映されています。テーブルで使用する `ORDER BY` と `PRIMARY KEY` も決める必要があります。`ORDER BY` と `PRIMARY KEY` の少なくとも一方は必ず指定しなければなりません。`ORDER BY` に含めるカラムを決定するためのガイドラインを以下に示します。さらに詳しい情報は、このドキュメント末尾の *Next Steps* セクションで説明します。 -### `ORDER BY` と `PRIMARY KEY` 句 +### `ORDER BY` と `PRIMARY KEY` 句 {#order-by-and-primary-key-clauses} * `ORDER BY` タプルには、クエリのフィルタで使用されるフィールドを含めるべきです * ディスク上での圧縮率を最大化するには、`ORDER BY` タプルはカーディナリティが低いものから高いものへ昇順になるように並べるべきです @@ -485,7 +485,7 @@ CREATE TABLE NYPD_Complaint ( ``` -### テーブルの主キーを確認する +### テーブルの主キーを確認する {#finding-the-primary-key-of-a-table} ClickHouse の `system` データベースのうち、特に `system.table` には、作成したばかりのテーブルに関するすべての情報が含まれています。次のクエリで、`ORDER BY`(ソートキー)と `PRIMARY KEY` を確認できます。 @@ -520,7 +520,7 @@ Query id: 6a5b10bf-9333-4090-b36e-c7f08b1d9e01 データの前処理には `clickhouse-local` ツールを使用し、取り込みには `clickhouse-client` を使用します。 -### `clickhouse-local` で使用される引数 +### `clickhouse-local` で使用される引数 {#clickhouse-local-arguments-used} :::tip `table='input'` は、以下の `clickhouse-local` の引数に含まれています。`clickhouse-local` は指定された入力(`cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv`)を受け取り、その入力をテーブルに挿入します。デフォルトではテーブル名は `table` です。このガイドではデータフローを分かりやすくするために、テーブル名を `input` に設定しています。`clickhouse-local` の最後の引数は、そのテーブル(`FROM input`)から SELECT するクエリであり、その結果がパイプで `clickhouse-client` に渡されて、`NYPD_Complaint` テーブルにデータが投入されます。 @@ -571,7 +571,7 @@ cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv \ ``` -## データを検証する +## データを検証する {#validate-data} :::note このデータセットは年に1回以上更新される可能性があるため、このドキュメントに記載されている数値と一致しない場合があります。 @@ -615,7 +615,7 @@ WHERE name = 'NYPD_Complaint' ## いくつかクエリを実行する {#run-queries} -### クエリ 1. 月別の苦情件数を比較する +### クエリ 1. 月別の苦情件数を比較する {#query-1-compare-the-number-of-complaints-by-month} クエリ: @@ -653,7 +653,7 @@ Query id: 7fbd4244-b32a-4acf-b1f3-c3aa198e74d9 ``` -### クエリ 2. 区ごとの苦情件数の合計を比較する +### クエリ 2. 区ごとの苦情件数の合計を比較する {#query-2-compare-total-number-of-complaints-by-borough} クエリ: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md index 69889409f1c..eaeb2d0e5ec 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md @@ -127,7 +127,7 @@ CREATE TABLE `ontime` ORDER BY (Year, Quarter, Month, DayofMonth, FlightDate, IATA_CODE_Reporting_Airline); ``` -## 生データのインポート +## 生データのインポート {#import-from-raw-data} データのダウンロード: @@ -144,7 +144,7 @@ ls -1 *.zip | xargs -I{} -P $(nproc) bash -c "echo {}; unzip -cq {} '*.csv' | se (サーバーでメモリ不足などの問題が発生する場合は、`-P $(nproc)` の部分を削除してください) -## 保存したコピーからのインポート +## 保存したコピーからのインポート {#import-from-a-saved-copy} 別の方法として、次のクエリを使用して保存したコピーからデータをインポートできます。 @@ -155,7 +155,7 @@ INSERT INTO ontime SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazo このスナップショットは2022-05-29に作成されました。 -## クエリ +## クエリ {#queries} Q0. diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md index 67432072214..77cd2c9b11c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md @@ -22,7 +22,7 @@ import stackoverflow from '@site/static/images/getting-started/example-datasets/ このデータのスキーマの説明は[こちら](https://meta.stackexchange.com/questions/2677/database-schema-documentation-for-the-public-data-dump-and-sede)で確認できます。 -## あらかじめ用意されたデータ +## あらかじめ用意されたデータ {#pre-prepared-data} このデータのコピーを Parquet 形式で提供しており、内容は 2024 年 4 月時点のものです。行数(6,000 万件の投稿)の点では ClickHouse にとっては小規模ですが、このデータセットには大量のテキストと大きな String 型カラムが含まれています。 @@ -33,7 +33,7 @@ CREATE DATABASE stackoverflow 以下の計測結果は、`eu-west-2` に配置された 96 GiB・24 vCPU 構成の ClickHouse Cloud クラスターに対するものです。データセットは `eu-west-3` にあります。 -### 投稿 +### 投稿 {#posts} ```sql CREATE TABLE stackoverflow.posts @@ -73,7 +73,7 @@ INSERT INTO stackoverflow.posts SELECT * FROM s3('https://datasets-documentation 投稿データは年別のファイルとしても利用できます。例: [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet) -### 投票 +### 投票 {#votes} ```sql CREATE TABLE stackoverflow.votes @@ -96,7 +96,7 @@ INSERT INTO stackoverflow.votes SELECT * FROM s3('https://datasets-documentation 投票データも年ごとに利用できます。例: [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/votes/2020.parquet) -### コメント +### コメント {#comments} ```sql CREATE TABLE stackoverflow.comments @@ -120,7 +120,7 @@ INSERT INTO stackoverflow.comments SELECT * FROM s3('https://datasets-documentat コメントについても年ごとのデータが利用可能です。例: [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/comments/2020.parquet) -### ユーザー +### ユーザー {#users} ```sql CREATE TABLE stackoverflow.users @@ -147,7 +147,7 @@ INSERT INTO stackoverflow.users SELECT * FROM s3('https://datasets-documentation ``` -### バッジ +### バッジ {#badges} ```sql CREATE TABLE stackoverflow.badges @@ -168,7 +168,7 @@ INSERT INTO stackoverflow.badges SELECT * FROM s3('https://datasets-documentatio ``` -### PostLinks +### PostLinks {#postlinks} ```sql CREATE TABLE stackoverflow.postlinks @@ -188,7 +188,7 @@ INSERT INTO stackoverflow.postlinks SELECT * FROM s3('https://datasets-documenta ``` -### PostHistory +### PostHistory {#posthistory} ```sql CREATE TABLE stackoverflow.posthistory @@ -217,7 +217,7 @@ INSERT INTO stackoverflow.posthistory SELECT * FROM s3('https://datasets-documen 元のデータセットは、7zip 形式で圧縮された XML ファイルとして [https://archive.org/download/stackexchange](https://archive.org/download/stackexchange) から入手できます。`stackoverflow.com*` というプレフィックスを持つファイルが対象です。 -### ダウンロード +### ダウンロード {#download} ```bash wget https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z @@ -232,7 +232,7 @@ wget https://archive.org/download/stackexchange/stackoverflow.com-Votes.7z これらのファイルは最大 35GB あり、インターネット接続状況によってはダウンロードに約 30 分かかる場合があります。ダウンロードサーバー側で帯域が制限されており、おおよそ 20MB/秒が上限となります。 -### JSON への変換 +### JSON への変換 {#convert-to-json} 本ドキュメント執筆時点では、ClickHouse は入力フォーマットとして XML をネイティブにサポートしていません。ClickHouse にデータをロードするため、まず NDJSON に変換します。 @@ -260,7 +260,7 @@ p7zip -d stackoverflow.com-Posts.7z ```bash mkdir posts cd posts -# 以下は入力XMLファイルを10000行ごとのサブファイルに分割します +# 以下は入力XMLファイルを10000行ごとのサブファイルに分割します {#the-following-splits-the-input-xml-file-into-sub-files-of-10000-rows} tail +3 ../Posts.xml | head -n -1 | split -l 10000 --filter='{ printf "\n"; cat - ; printf "\n"; } > $FILE' - ``` @@ -283,7 +283,7 @@ clickhouse local --query "SELECT * FROM file('posts.json', JSONEachRow, 'Id Int3 ここから始めるための、いくつかの簡単なクエリです。 -### Stack Overflowで最も人気の高いタグ +### Stack Overflowで最も人気の高いタグ {#most-popular-tags-on-stack-overflow} ```sql @@ -313,7 +313,7 @@ Peak memory usage: 224.03 MiB. ``` -### 最も多く回答しているユーザー(アクティブなアカウント) +### 最も多く回答しているユーザー(アクティブなアカウント) {#user-with-the-most-answers-active-accounts} アカウントには `UserId` が必要です。 @@ -340,7 +340,7 @@ LIMIT 5 ``` -### 閲覧数が多い ClickHouse 関連記事 +### 閲覧数が多い ClickHouse 関連記事 {#clickhouse-related-posts-with-the-most-views} ```sql SELECT @@ -371,7 +371,7 @@ LIMIT 10 ``` -### 最も物議を醸した投稿 +### 最も物議を醸した投稿 {#most-controversial-posts} ```sql SELECT diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md index 8d1e2759661..ef6003e52a1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md @@ -13,12 +13,12 @@ keywords: ['サンプルデータセット', 'tpch', 'ベンチマーク', 'サ **参考文献** -- [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) -- [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291) (Poess et. al., 2000) -- [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5) (Boncz et. al.), 2013 -- [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138) (Dresseler et. al.), 2020 +* [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) +* [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291) (Poess et. al., 2000) +* [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5) (Boncz et. al.), 2013 +* [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138) (Dresseler et. al.), 2020 -## データ生成とインポート +## データ生成とインポート {#data-generation-and-import} まず、TPC-H リポジトリを取得し、データ生成ツールをコンパイルします。 @@ -60,7 +60,6 @@ TPC-H 仕様のルールにできるだけ忠実に従います: * セクション 1.3.1 に従い、抽象的なデータ型(例: `Identifier`, `Variable text, size N`)を実装するために、ClickHouse ネイティブのデータ型(例: `Int32`, `String`)を使用します。 これにより読みやすさが向上するだけであり、`dbgen` によって生成される SQL-92 のデータ型(例: `INTEGER`, `VARCHAR(40)`)も ClickHouse で問題なく動作します。 - ```sql CREATE TABLE nation ( n_nationkey Int32, @@ -170,7 +169,6 @@ clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO lineitem FORMA :::note tpch-kit を使用して自分でテーブルを生成する代わりに、公開 S3 バケットからデータをインポートすることもできます。必ず、上記の `CREATE` 文を使って、先に空のテーブルを作成してください。 - ```sql -- スケーリングファクター 1 INSERT INTO nation SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/h/1/nation.tbl', NOSIGN, CSV) SETTINGS format_csv_delimiter = '|', input_format_defaults_for_omitted_fields = 1, input_format_csv_empty_as_default = 1; @@ -195,8 +193,7 @@ INSERT INTO lineitem SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws. ::: - -## クエリ +## クエリ {#queries} :::note SQL 標準に従った正しい結果を得るために、[`join_use_nulls`](../../operations/settings/settings.md#join_use_nulls) の設定を有効にする必要があります。 @@ -349,7 +346,6 @@ ORDER BY **Q5** - ```sql SELECT n_name, @@ -497,7 +493,6 @@ ORDER BY **Q9** - ```sql SELECT nation, @@ -851,7 +846,6 @@ WHERE **Q20** - ```sql SELECT s_name, diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md index 774d9a2be43..e748a928976 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md @@ -26,7 +26,7 @@ keywords: ['サンプルデータセット', '天気', '台湾', 'サンプル - ClickHouse 向けにクリーンアップ、再構成、拡充された[前処理済みデータ](#pre-processed-data)。このデータセットは 1896 年から 2023 年までをカバーします。 - [元の生データをダウンロード](#original-raw-data)し、ClickHouse が要求する形式に変換します。独自のカラムを追加したいユーザーは、このデータを調査したり、自身のアプローチを検討・完成させたりするのに利用できます。 -### 前処理済みデータ +### 前処理済みデータ {#pre-processed-data} このデータセットは、「測定ごとに 1 行」の形式から、「気象観測所 ID」と「測定日」ごとに 1 行となる形式へと再構成されています。つまり、次のような形です。 @@ -47,16 +47,16 @@ C0X100,2016-01-01 04:00:00,1021.2,15.8,74,1.7,8.0,,,,,,,,,,,,,,,,,,,,,,, ```bash wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/preprocessed_weather_daily_1896_2023.tar.gz -# オプション: チェックサムを検証する +# オプション: チェックサムを検証する {#option-validate-the-checksum} md5sum preprocessed_weather_daily_1896_2023.tar.gz -# チェックサムは次と一致する必要があります: 11b484f5bd9ddafec5cfb131eb2dd008 +# チェックサムは次と一致する必要があります: 11b484f5bd9ddafec5cfb131eb2dd008 {#checksum-should-be-equal-to-11b484f5bd9ddafec5cfb131eb2dd008} tar -xzvf preprocessed_weather_daily_1896_2023.tar.gz daily_weather_preprocessed_1896_2023.csv -# オプション: チェックサムを検証する +# オプション: チェックサムを検証する {#option-validate-the-checksum} md5sum daily_weather_preprocessed_1896_2023.csv -# チェックサムは次と一致する必要があります: 1132248c78195c43d93f843753881754 +# チェックサムは次と一致する必要があります: 1132248c78195c43d93f843753881754 {#checksum-should-be-equal-to-1132248c78195c43d93f843753881754} ``` @@ -64,7 +64,7 @@ md5sum daily_weather_preprocessed_1896_2023.csv 以下では、目的に応じて変換や加工を行うための元の生データをダウンロードする手順について説明します。 -#### ダウンロード +#### ダウンロード {#download} 元の生データをダウンロードするには: @@ -73,9 +73,9 @@ mkdir tw_raw_weather_data && cd tw_raw_weather_data wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/raw_data_weather_daily_1896_2023.tar.gz -# オプション: チェックサムの検証 +# オプション: チェックサムの検証 {#option-validate-the-checksum} md5sum raw_data_weather_daily_1896_2023.tar.gz -# チェックサムは b66b9f137217454d655e3004d7d1b51a と一致する必要があります +# チェックサムは b66b9f137217454d655e3004d7d1b51a と一致する必要があります {#checksum-should-be-equal-to-b66b9f137217454d655e3004d7d1b51a} tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1928.csv @@ -84,23 +84,23 @@ tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1931.csv ... -# オプション: チェックサムの検証 +# オプション: チェックサムの検証 {#option-validate-the-checksum} cat *.csv | md5sum -# チェックサムは b26db404bf84d4063fac42e576464ce1 と一致する必要があります +# チェックサムは b26db404bf84d4063fac42e576464ce1 と一致する必要があります {#checksum-should-be-equal-to-b26db404bf84d4063fac42e576464ce1} ``` -#### 台湾の気象観測所情報を取得する +#### 台湾の気象観測所情報を取得する {#retrieve-the-taiwan-weather-stations} ```bash wget -O weather_sta_list.csv https://github.com/Raingel/weather_station_list/raw/main/data/weather_sta_list.csv -# オプション: UTF-8-BOMからUTF-8エンコーディングへ変換 +# オプション: UTF-8-BOMからUTF-8エンコーディングへ変換 {#option-convert-the-utf-8-bom-to-utf-8-encoding} sed -i '1s/^\xEF\xBB\xBF//' weather_sta_list.csv ``` -## テーブルスキーマの作成 +## テーブルスキーマの作成 {#create-table-schema} ClickHouse クライアントから、ClickHouse 上に MergeTree テーブルを作成します。 @@ -144,7 +144,7 @@ ORDER BY (MeasuredDate); ## ClickHouse への挿入 {#inserting-into-clickhouse} -### ローカルファイルからの挿入 +### ローカルファイルからの挿入 {#inserting-from-local-file} データは、ClickHouse クライアントから次のようにローカルファイルを利用して挿入できます: @@ -165,7 +165,7 @@ Peak memory usage: 583.23 MiB. ``` -### URL からのデータ挿入 +### URL からのデータ挿入 {#inserting-from-url} ```sql INSERT INTO tw_weather_data SELECT * @@ -176,7 +176,7 @@ FROM url('https://storage.googleapis.com/taiwan-weather-observaiton-datasets/dai これをより高速化する方法の詳細については、[大規模データロードのチューニング](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2)に関するブログ記事を参照してください。 -## データ行数とサイズを確認する +## データ行数とサイズを確認する {#check-data-rows-and-sizes} 1. 何行挿入されたか確認してみましょう。 @@ -210,7 +210,7 @@ WHERE (`table` = 'tw_weather_data') AND active ## クエリ例 {#sample-queries} -### Q1: 特定の年における気象観測所ごとの最高露点温度を取得する +### Q1: 特定の年における気象観測所ごとの最高露点温度を取得する {#q1-retrieve-the-highest-dew-point-temperature-for-each-weather-station-in-the-specific-year} ```sql SELECT @@ -257,7 +257,7 @@ GROUP BY StationId ``` -### Q2: 特定の期間・フィールド・気象観測所を指定した生データの取得 +### Q2: 特定の期間・フィールド・気象観測所を指定した生データの取得 {#q2-raw-data-fetching-with-the-specific-duration-time-range-fields-and-weather-station} ```sql SELECT diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md index adf4b7124f6..2ac0b456647 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md @@ -13,7 +13,7 @@ keywords: ['example dataset', 'uk property', 'sample data', 'real estate', 'gett - 項目の説明: https://www.gov.uk/guidance/about-the-price-paid-data - HM Land Registry のデータを含みます © Crown copyright and database right 2021。このデータは Open Government Licence v3.0 に基づきライセンスされています。 -## テーブルの作成 +## テーブルの作成 {#create-table} ```sql CREATE DATABASE uk; @@ -40,7 +40,7 @@ ORDER BY (postcode1, postcode2, addr1, addr2); ``` -## データの前処理と挿入 +## データの前処理と挿入 {#preprocess-import-data} `url` 関数を使用してデータを ClickHouse にストリーミングします。その前に、受信データの一部を前処理する必要があります。内容は次のとおりです: @@ -95,7 +95,7 @@ FROM url( データの挿入が完了するまで待ちます。ネットワーク速度にもよりますが、1~2分ほどかかります。 -## データを検証する +## データを検証する {#validate-data} 何行挿入されたかを確認して、正しく動作したことを検証します。 @@ -119,7 +119,7 @@ WHERE name = 'uk_price_paid' データを分析するために、いくつかクエリを実行します。 -### クエリ 1: 年ごとの平均価格 +### クエリ 1: 年ごとの平均価格 {#average-price} ```sql runnable SELECT @@ -133,7 +133,7 @@ ORDER BY year ``` -### クエリ 2. ロンドンの1年あたりの平均価格 +### クエリ 2. ロンドンの1年あたりの平均価格 {#average-price-london} ```sql runnable SELECT @@ -150,7 +150,7 @@ ORDER BY year 2020年に住宅価格に異変が起きました!もっとも、それはおそらく驚くことではないでしょうが…… -### クエリ3. 最も高価なエリア +### クエリ3. 最も高価なエリア {#most-expensive-neighborhoods} ```sql runnable SELECT diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md index b25c39bc953..6729471296a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md @@ -241,7 +241,7 @@ keywords: ['サンプルデータセット', 'youtube', 'サンプルデータ', ## 質問 {#questions} -### コメントが無効化されていると、高評価や低評価が押される可能性は下がりますか? +### コメントが無効化されていると、高評価や低評価が押される可能性は下がりますか? {#create-the-table} コメントが無効化されている場合、視聴者は動画に対する気持ちを表そうとして、高評価や低評価を押す傾向が強くなるのでしょうか? @@ -297,7 +297,7 @@ ORDER BY コメントを有効にすると、エンゲージメント率が高くなる傾向があります。 -### 時間の経過に伴う動画数の変化と主なイベント +### 時間の経過に伴う動画数の変化と主なイベント {#insert-data} ```sql SELECT @@ -336,7 +336,7 @@ ORDER BY month ASC; アップローダー数の急増が、[新型コロナウイルス流行期のあたりで明確に見て取れます](https://www.theverge.com/2020/3/27/21197642/youtube-with-me-style-videos-views-coronavirus-cook-workout-study-home-beauty)。 -### 字幕はいつ頃からどのように増えてきたのか +### 字幕はいつ頃からどのように増えてきたのか {#count-row-numbers} 音声認識技術の進歩により、動画に字幕を付けることはいままでになく簡単になりました。YouTube では 2009 年末に自動キャプション機能が追加されましたが、あれが転換点だったのでしょうか? @@ -374,7 +374,7 @@ ORDER BY month ASC; これをきっかけに、難聴者やろう者の視聴者のために、クリエイターが自分の動画に字幕を追加することを促す、大きな成功を収めたキャンペーンが展開されました。 -### 時系列でのアップロード数上位ユーザー +### 時系列でのアップロード数上位ユーザー {#explore-the-data} ```sql WITH uploaders AS @@ -467,7 +467,7 @@ ORDER BY ``` -### ビューはどのように分散されますか? +### ビューはどのように分散されますか? {#if-someone-disables-comments-does-it-lower-the-chance-someone-will-actually-click-like-or-dislike} ```sql SELECT diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/index.md index 75f2efc074c..d1d01b4deca 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/index.md @@ -9,9 +9,7 @@ title: 'チュートリアルとサンプルデータセット' doc_type: 'landing-page' --- - - -# チュートリアルとサンプルデータセット +# チュートリアルとサンプルデータセット {#tutorials-and-example-datasets} ClickHouse の使い方を学び、すぐに使い始めるためのリソースを多数用意しています。 @@ -25,7 +23,6 @@ ClickHouse の使い方を学び、すぐに使い始めるためのリソース {/* 以下の表は、ビルド時に次のスクリプトによって自動生成されます https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh */ } - {/*AUTOGENERATED_START*/ } | ページ | 概要 | 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..7f5083e732b 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`パッケージの使用を推奨します。 @@ -64,14 +66,14 @@ clickhouse-client # パスワードを設定している場合は "clickhouse-cl -## ClickHouse サーバーとクライアントのインストール +## ClickHouse サーバーとクライアントのインストール {#install-clickhouse-server-and-client} ```bash sudo apt-get install -y clickhouse-server clickhouse-client ``` -## ClickHouse を起動する +## ClickHouse を起動する {#start-clickhouse-server} ClickHouse サーバーを起動するには、次のコマンドを実行します。 @@ -92,7 +94,7 @@ clickhouse-client --password ``` -## スタンドアロン構成の ClickHouse Keeper をインストールする +## スタンドアロン構成の ClickHouse Keeper をインストールする {#install-standalone-clickhouse-keeper} :::tip 本番環境では、ClickHouse Keeper を専用ノード上で実行することを強く推奨します。 @@ -131,7 +133,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/_snippets/_docker.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md index 8feffbdda87..1c02b3bc266 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md @@ -1,4 +1,4 @@ -# Docker を使用して ClickHouse をインストールする +# Docker を使用して ClickHouse をインストールする {#install-clickhouse-using-docker} [Docker Hub](https://hub.docker.com/r/clickhouse/clickhouse-server/) のガイドを、 便宜上、以下に再掲します。提供されている Docker イメージは、 @@ -33,9 +33,9 @@ docker pull clickhouse/clickhouse-server -## このイメージの使い方 +## このイメージの使い方 {#how-to-use-image} -### サーバーインスタンスを起動する +### サーバーインスタンスを起動する {#start-server-instance} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server @@ -45,18 +45,18 @@ docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickh デフォルトでは、上記のサーバーインスタンスは、パスワードなしの `default` ユーザーとして実行されます。 -### ネイティブクライアントから接続する +### ネイティブクライアントから接続する {#connect-to-it-from-native-client} ```bash docker run -it --rm --network=container:some-clickhouse-server --entrypoint clickhouse-client clickhouse/clickhouse-server -# または +# または {#or} docker exec -it some-clickhouse-server clickhouse-client ``` ClickHouse クライアントの詳細については、[ClickHouse client](/interfaces/cli) を参照してください。 -### curl で接続する +### curl で接続する {#connect-to-it-using-curl} ```bash echo "SELECT 'こんにちは、ClickHouse!'" | docker run -i --rm --network=container:some-clickhouse-server buildpack-deps:curl curl 'http://localhost:8123/?query=' -s --data-binary @- @@ -64,14 +64,14 @@ echo "SELECT 'こんにちは、ClickHouse!'" | docker run -i --rm --network=con HTTP インターフェイスの詳細については、[ClickHouse HTTP Interface](/interfaces/http) を参照してください。 -### コンテナの停止と削除 +### コンテナの停止と削除 {#stopping-removing-container} ```bash docker stop some-clickhouse-server docker rm some-clickhouse-server ``` -### ネットワーキング +### ネットワーキング {#networking} :::note あらかじめ定義されているユーザー `default` は、パスワードが設定されていない限りネットワークにアクセスできません。 @@ -97,7 +97,7 @@ echo 'SELECT version()' | curl 'http://localhost:8123/' --data-binary @- 上記の例でのユーザーのデフォルト設定は、localhost からのリクエストに対してのみ利用可能です ::: -### ボリューム +### ボリューム {#volumes} 永続化を行うために、通常はコンテナ内に次のフォルダをマウントします: @@ -118,7 +118,7 @@ docker run -d \ * `/docker-entrypoint-initdb.d/` - データベース初期化スクリプトを配置するフォルダー(後述)。 -## Linux capabilities +## Linux capabilities {#linear-capabilities} ClickHouse には、複数の [Linux capabilities](https://man7.org/linux/man-pages/man7/capabilities.7.html) の有効化を必要とする高度な機能があります。 @@ -133,29 +133,29 @@ docker run -d \ 詳細は ["Docker における CAP_IPC_LOCK および CAP_SYS_NICE ケーパビリティの設定"](/knowledgebase/configure_cap_ipc_lock_and_cap_sys_nice_in_docker) を参照してください。 -## 設定 +## 設定 {#configuration} コンテナは [HTTP インターフェイス](https://clickhouse.com/docs/interfaces/http_interface/) 用にポート 8123 を、[ネイティブクライアント](https://clickhouse.com/docs/interfaces/tcp/) 用にポート 9000 を公開します。 ClickHouse の設定はファイル "config.xml"([ドキュメント](https://clickhouse.com/docs/operations/configuration_files/))で定義されます。 -### カスタム設定でサーバーインスタンスを起動する +### カスタム設定でサーバーインスタンスを起動する {#start-server-instance-with-custom-config} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 -v /path/to/your/config.xml:/etc/clickhouse-server/config.xml clickhouse/clickhouse-server ``` -### 任意のユーザーとしてサーバーを起動する +### 任意のユーザーとしてサーバーを起動する {#start-server-custom-user} ```bash -# $PWD/data/clickhouse が存在し、現在のユーザーが所有者である必要があります +# $PWD/data/clickhouse が存在し、現在のユーザーが所有者である必要があります {#pwddataclickhouse-should-exist-and-be-owned-by-current-user} docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit nofile=262144:262144 -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` ローカルディレクトリをマウントしてこのイメージを使用する場合、適切なファイル所有権を維持するためにユーザーを指定する必要があります。`--user` 引数を使用し、コンテナ内に `/var/lib/clickhouse` と `/var/log/clickhouse-server` をマウントしてください。そうしないと、コンテナイメージがエラーとなり起動しません。 -### root でサーバーを起動する +### root でサーバーを起動する {#start-server-from-root} ユーザーネームスペースが有効になっている場合、root でサーバーを起動することが有効です。 その場合は、次を実行します。 @@ -164,7 +164,7 @@ docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit no docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` -### 起動時にデフォルトのデータベースとユーザーを作成する方法 +### 起動時にデフォルトのデータベースとユーザーを作成する方法 {#how-to-create-default-db-and-user} コンテナの起動時にユーザー(デフォルトでは `default` という名前のユーザーが使用されます)とデータベースを作成したい場合には、環境変数 `CLICKHOUSE_DB`、`CLICKHOUSE_USER`、`CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT`、`CLICKHOUSE_PASSWORD` を使用して設定できます。 @@ -172,7 +172,7 @@ docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v " docker run --rm -e CLICKHOUSE_DB=my_database -e CLICKHOUSE_USER=username -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=password -p 9000:9000/tcp clickhouse/clickhouse-server ``` -#### `default` ユーザーの管理 +#### `default` ユーザーの管理 {#managing-default-user} `CLICKHOUSE_USER`、`CLICKHOUSE_PASSWORD`、`CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` のいずれも設定されていない場合、`default` ユーザーはデフォルトではネットワークアクセスが無効化されています。 @@ -183,7 +183,7 @@ docker run --rm -e CLICKHOUSE_SKIP_USER_SETUP=1 -p 9000:9000/tcp clickhouse/clic ``` -## このイメージを拡張する方法 +## このイメージを拡張する方法 {#how-to-extend-image} このイメージを元にした派生イメージで追加の初期化処理を行うには、`/docker-entrypoint-initdb.d` 配下に `*.sql`、`*.sql.gz`、または `*.sh` スクリプトを 1 つ以上追加します。エントリポイントが `initdb` を呼び出した後、そのディレクトリ内にあるすべての `*.sql` ファイルを実行し、実行可能な `*.sh` スクリプトを実行し、実行可能でない `*.sh` スクリプトは読み込んで(source して)、サービスを起動する前にさらに初期化処理を行います。\ また、初期化中に clickhouse-client で使用される環境変数 `CLICKHOUSE_USER` と `CLICKHOUSE_PASSWORD` を指定することもできます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md index 0b431719605..36c6e2e0641 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md @@ -1,4 +1,4 @@ -# tgzアーカイブを使用したClickHouseのインストール +# tgzアーカイブを使用したClickHouseのインストール {#install-clickhouse-using-tgz-archives} > `deb`または`rpm`パッケージのインストールができないすべてのLinuxディストリビューションでは、公式のプリコンパイル済み`tgz`アーカイブの使用を推奨します。 @@ -19,7 +19,7 @@ -## 最新の ClickHouse バージョンを取得する +## 最新の ClickHouse バージョンを取得する {#get-latest-version} GitHub から最新の ClickHouse バージョンを取得し、`LATEST_VERSION` 変数に設定します。 @@ -30,7 +30,7 @@ export LATEST_VERSION ``` -## システムアーキテクチャを特定する +## システムアーキテクチャを特定する {#detect-system-architecture} システムアーキテクチャを特定し、それに応じて `ARCH` 変数を設定します。 @@ -43,7 +43,7 @@ esac ``` -## 各 ClickHouse コンポーネント用の tarball をダウンロードする +## 各 ClickHouse コンポーネント用の tarball をダウンロードする {#download-tarballs} 各 ClickHouse コンポーネント用の tarball をダウンロードします。ループではまずアーキテクチャ固有のパッケージを試し、なければ汎用パッケージにフォールバックします。 @@ -64,7 +64,7 @@ done ```bash -# clickhouse-common-static パッケージの展開とインストール +# clickhouse-common-static パッケージの展開とインストール {#extract-and-install-clickhouse-common-static-package} tar -xzvf "clickhouse-common-static-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" @@ -74,7 +74,7 @@ sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" ```bash -# デバッグシンボルパッケージの展開とインストール +# デバッグシンボルパッケージの展開とインストール {#extract-and-install-debug-symbols-package} tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" @@ -84,7 +84,7 @@ sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" ```bash -# サーバーパッケージを展開し、設定を行ってインストール +# サーバーパッケージを展開し、設定を行ってインストール {#extract-and-install-server-package-with-configuration} tar -xzvf "clickhouse-server-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-server-$LATEST_VERSION.tgz" sudo "clickhouse-server-$LATEST_VERSION/install/doinst.sh" configure @@ -95,7 +95,7 @@ sudo /etc/init.d/clickhouse-server start # サーバーを起動 ```bash -# クライアントパッケージを展開してインストール +# クライアントパッケージを展開してインストール {#extract-and-install-client-package} tar -xzvf "clickhouse-client-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-client-$LATEST_VERSION.tgz" sudo "clickhouse-client-$LATEST_VERSION/install/doinst.sh" diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md index 781cf93b6ce..569ea917e0e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md @@ -5,12 +5,12 @@ import privacy_allow from "@site/static/images/knowledgebase/fix-the-developer-v -# HomebrewによるClickHouseのインストール +# HomebrewによるClickHouseのインストール {#install-clickhouse-using-homebrew} -## コミュニティ版 Homebrew フォーミュラを使用してインストールする +## コミュニティ版 Homebrew フォーミュラを使用してインストールする {#install-using-community-homebrew-formula} macOS で [Homebrew](https://brew.sh/) を使用して ClickHouse をインストールするには、 ClickHouse コミュニティの [Homebrew フォーミュラ](https://formulae.brew.sh/cask/clickhouse) を使用できます。 @@ -20,7 +20,7 @@ brew install --cask clickhouse ``` -## macOS での開発元検証エラーの解消 +## macOS での開発元検証エラーの解消 {#fix-developer-verification-error-macos} `brew` を使用して ClickHouse をインストールした場合、macOS からエラーが表示されることがあります。 デフォルトでは、macOS は確認できない開発元によって作成されたアプリケーションやツールを実行しません。 @@ -31,7 +31,7 @@ brew install --cask clickhouse この検証エラーを回避するには、システム設定ウィンドウで該当する設定を変更するか、ターミナルを使用するか、または ClickHouse を再インストールするなどして、いずれかの方法で macOS の隔離領域からアプリを削除する必要があります。 -### システム設定での手順 +### システム設定での手順 {#system-settings-process} `clickhouse` 実行ファイルを隔離領域から削除する最も簡単な方法は次のとおりです。 @@ -51,7 +51,7 @@ brew install --cask clickhouse これでターミナルで `clickhouse` コマンドを実行できるようになるはずです。 -### ターミナルでの手順 +### ターミナルでの手順 {#terminal-process} `Allow Anyway` ボタンを押してもこの問題が解消しない場合は、コマンドラインを使って同じ処理を行うことができます。 あるいは、単にコマンドラインを使う方が好みの場合もあるでしょう。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md index b13e2c98feb..3a57c6e1ed7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md @@ -1,11 +1,11 @@ -# curl でスクリプトを実行して ClickHouse をインストールする +# curl でスクリプトを実行して ClickHouse をインストールする {#install-clickhouse-via-script-using-curl} 本番環境向けに ClickHouse をインストールする必要がない場合、最も手早くセットアップする方法は、curl を使ってインストールスクリプトを実行することです。このスクリプトは、利用中の OS に適したバイナリを自動的に判別します。 -## curl を使用して ClickHouse をインストールする +## curl を使用して ClickHouse をインストールする {#install-clickhouse-using-curl} 以下のコマンドを実行して、使用しているオペレーティングシステム向けの単一のバイナリをダウンロードします。 @@ -18,7 +18,7 @@ Mac をお使いの方へ: バイナリの開発元を検証できないとい ::: -## clickhouse-local を起動する +## clickhouse-local を起動する {#start-clickhouse-local} `clickhouse-local` を使用すると、ClickHouse の強力な SQL 構文を利用して、 ローカルおよびリモートファイルを事前の設定なしに処理できます。テーブルデータは一時領域に保存されるため、 @@ -31,7 +31,7 @@ Mac をお使いの方へ: バイナリの開発元を検証できないとい ``` -## clickhouse-server を起動する +## clickhouse-server を起動する {#start-clickhouse-server} データを永続化する場合は、`clickhouse-server` を起動します。ClickHouse サーバーは、次のコマンドで起動できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md index dbc4f24138e..cb213946b80 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md @@ -5,7 +5,7 @@ -## RPM リポジトリの設定 +## RPM リポジトリの設定 {#setup-the-rpm-repository} 次のコマンドを実行して公式リポジトリを追加します: @@ -24,7 +24,7 @@ sudo zypper --gpg-auto-import-keys refresh clickhouse-stable 以下の手順では、利用しているパッケージマネージャに応じて、`yum install` を `zypper install` に置き換えて構いません。 -## ClickHouse サーバーとクライアントをインストールする +## ClickHouse サーバーとクライアントをインストールする {#install-clickhouse-server-and-client-1} ClickHouse をインストールするには、次のコマンドを実行します。 @@ -42,7 +42,7 @@ sudo yum install clickhouse-server-22.8.7.34 ``` -## ClickHouse サーバーを起動する +## ClickHouse サーバーを起動する {#start-clickhouse-server-1} ClickHouse サーバーを起動するには、以下を実行します。 @@ -65,7 +65,7 @@ clickhouse-client --password ``` -## スタンドアロン ClickHouse Keeper をインストールする +## スタンドアロン ClickHouse Keeper をインストールする {#install-standalone-clickhouse-keeper-1} :::tip 本番環境では、ClickHouse Keeper を専用ノード上で実行することを強く推奨します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md index 0a487d97607..2304fb24124 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md @@ -1,4 +1,4 @@ -# WSL を使って Windows に ClickHouse をインストールする +# WSL を使って Windows に ClickHouse をインストールする {#install-clickhouse-on-windows-with-wsl} @@ -11,7 +11,7 @@ WindowsにClickHouseをインストールする場合は、WSL(Windows Subsyst -## WSL をインストールする +## WSL をインストールする {#install-wsl} Windows PowerShell を管理者権限で開き、次のコマンドを実行します。 @@ -26,7 +26,7 @@ Ubuntu 24.04.1 LTS へようこそ (GNU/Linux 5.15.133.1-microsoft-WSL2 x86_64) ``` -## curl を使ったスクリプトで ClickHouse をインストールする +## curl を使ったスクリプトで ClickHouse をインストールする {#install-clickhouse-via-script-using-curl} curl を使ったスクリプトで ClickHouse をインストールするには、次のコマンドを実行します。 @@ -42,7 +42,7 @@ ClickHouseバイナリのダウンロードが完了しました。以下のコ ``` -## clickhouse-local を起動する +## clickhouse-local を起動する {#start-clickhouse-local} `clickhouse-local` を使用すると、ClickHouse の強力な SQL 構文を利用して、 ローカルおよびリモートのファイルを設定なしで処理できます。テーブルデータは @@ -56,7 +56,7 @@ ClickHouseバイナリのダウンロードが完了しました。以下のコ ``` -## clickhouse-server を起動する +## clickhouse-server を起動する {#start-clickhouse-server} データを永続化したい場合は、`clickhouse-server` を実行します。ClickHouse サーバーは次のコマンドで起動できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md index e4485f33a1b..ae90f270a22 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md @@ -10,7 +10,7 @@ doc_type: 'guide' -## ソースからコンパイルする +## ソースからコンパイルする {#compile-from-source} ClickHouse を手動でコンパイルするには、[Linux](/development/build.md) または [macOS](/development/build-osx.md) 向けの手順に従ってください。 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/getting-started/install/install.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx index 7ac1817e233..1768651b3fd 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx @@ -18,33 +18,13 @@ import Docker from './_snippets/_docker.md' import {CardPrimary} from '@clickhouse/click-ui/bundled'; import {galaxyOnClick} from '@site/src/lib/galaxy/galaxy' +# インストール手順 \{#installation-instructions\} -# インストール手順 + - - -
+
または、以下からプラットフォーム、ディストリビューション、およびインストール方法を選択して、 オープンソース版 ClickHouse のインストール手順を表示します。 -} - quickinstall={} - debian_prod={} - rpm_prod={} - tar_prod={} - macos_prod={} - docker={} -/> \ No newline at end of file +} quickinstall={} debian_prod={} rpm_prod={} tar_prod={} macos_prod={} docker={} /> \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/playground.md b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/playground.md index 40e70936d80..d2c3bfe027c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/playground.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/playground.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# ClickHouse playground +# ClickHouse playground {#clickhouse-playground} [ClickHouse Playground](https://sql.clickhouse.com) は、ユーザーが独自のサーバーやクラスターをセットアップすることなく、すぐにクエリを実行して ClickHouse を試せる環境です。 Playground には、いくつかのサンプルデータセットが用意されています。 @@ -40,7 +40,7 @@ Playground には、任意の HTTP クライアントからクエリを送信で -## 例 +## 例 {#examples} `curl` を使って HTTPS エンドポイントにアクセスする例: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx index 46491fd5197..618619e1ec5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx @@ -20,16 +20,15 @@ import data_sources from '@site/static/images/_snippets/data_sources.png'; import select_data_source from '@site/static/images/_snippets/select_data_source.png'; import client_details from '@site/static/images/_snippets/client_details.png'; import new_rows_from_csv from '@site/static/images/_snippets/new_rows_from_csv.png'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; +import SQLConsoleDetail from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; +# ClickHouse Cloud クイックスタート \{#clickhouse-cloud-quick-start\} -# ClickHouse Cloud クイックスタート - -> ClickHouse を最も手早く簡単に使い始める方法は、[ClickHouse Cloud](https://console.clickhouse.cloud) で新しいサービスを作成することです。 +> ClickHouse を最も手早く簡単に使い始める方法は、[ClickHouse Cloud](https://console.clickhouse.cloud) で新しいサービスを作成することです。\ > このクイックスタートガイドでは、3 つの簡単なステップでセットアップする手順を説明します。 - ## ClickHouseサービスを作成する + ## ClickHouseサービスを作成する \{#1-create-a-clickhouse-service\} [ClickHouse Cloud](https://console.clickhouse.cloud)で無料のClickHouseサービスを作成するには、以下の手順に従ってサインアップしてください: @@ -58,7 +57,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; おめでとうございます!ClickHouse Cloudサービスが稼働し、オンボーディングが完了しました。データの取り込みとクエリの実行方法については、以下をご参照ください。 - ## ClickHouseに接続する + ## ClickHouseに接続する \{#2-connect-to-clickhouse\} ClickHouseへの接続方法は2つあります: @@ -67,7 +66,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### SQLコンソールを使用して接続する + ### SQLコンソールを使用して接続する \{#connect-using-sql-console\} 迅速に開始するには、ClickHouseがWebベースのSQLコンソールを提供しており、オンボーディング完了後に自動的にリダイレクトされます。 @@ -87,7 +86,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 以上で完了です。新しいClickHouseサービスの使用を開始できます。 - ### アプリケーションへの接続 + ### アプリケーションへの接続 \{#connect-with-your-app\} ナビゲーションメニューから接続ボタンをクリックします。モーダルが開き、サービスの認証情報と、使用するインターフェースまたは言語クライアントでの接続手順が表示されます。 @@ -97,7 +96,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; ご使用の言語クライアントが表示されない場合は、[インテグレーション](/integrations)のリストを参照してください。 - ## データを追加する + ## データを追加する \{#3-add-data\} ClickHouseはデータを取り込むことで真価を発揮します。データを追加する方法は複数あり、そのほとんどはナビゲーションメニューからアクセス可能なData Sourcesページで利用できます。 @@ -113,7 +112,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; * ファイルをアップロード - 対応形式は JSON、CSV、TSV です * ファイルURLからデータをアップロードする - ### ClickPipes + ### ClickPipes \{#clickpipes\} [ClickPipes](http://clickhouse.com/docs/integrations/clickpipes)は、多様なソースからのデータ取り込みを数クリックで実現するマネージド統合プラットフォームです。 最も要求の厳しいワークロードに対応するよう設計されたClickPipesの堅牢でスケーラブルなアーキテクチャは、一貫したパフォーマンスと信頼性を保証します。 ClickPipesは、長期的なストリーミングニーズや一回限りのデータロードジョブに使用できます。 @@ -121,7 +120,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### SQLコンソールを使用したデータの追加 + ### SQLコンソールを使用したデータの追加 \{#add-data-using-the-sql-console\} 多くのデータベース管理システムと同様に、ClickHouseはテーブルを論理的に**データベース**にグループ化します。ClickHouseで新しいデータベースを作成するには、[`CREATE DATABASE`](../../sql-reference/statements/create/database.md)コマンドを使用します。 @@ -162,7 +161,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 選択可能なテーブルエンジンは多数ありますが、単一ノードのClickHouseサーバー上のシンプルなテーブルには、[`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md)が最適な選択となるでしょう。 ::: - #### プライマリキーの簡単な紹介 + #### プライマリキーの簡単な紹介 \{#a-brief-intro-to-primary-keys\} 先に進む前に、ClickHouseにおけるプライマリキーの動作原理を理解しておくことが重要です(プライマリキーの実装は予想外に感じられるかもしれません): @@ -176,7 +175,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; ClickHouseの中核概念について詳しく知るには、["コア概念"](../../managing-data/core-concepts/index.md)を参照してください。 - #### テーブルへのデータの挿入 + #### テーブルへのデータの挿入 \{#insert-data-into-your-table\} ClickHouseでは、おなじみの[`INSERT INTO TABLE`](../../sql-reference/statements/insert-into.md)コマンドを使用できますが、[`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md)テーブルへの各挿入により、ストレージ内に**パート**が作成されることを理解しておく必要があります。 @@ -206,7 +205,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; SELECT * FROM helloworld.my_first_table ``` - ### ClickHouseクライアントを使用してデータを追加する + ### ClickHouseクライアントを使用してデータを追加する \{#add-data-using-the-clickhouse-client\} [**clickhouse client**](/interfaces/cli)というコマンドラインツールを使用して、ClickHouse Cloudサービスに接続することもできます。左側のメニューで`Connect`をクリックし、詳細情報にアクセスしてください。ダイアログのドロップダウンから`Native`を選択します: @@ -286,7 +285,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; exit ``` - ### ファイルのアップロード + ### ファイルのアップロード \{#upload-a-file\} データベースの利用開始時によくあるタスクとして、既存のファイルに保存されているデータの挿入があります。クリックストリームデータを表すサンプルデータをオンラインで提供しており、これを挿入することができます。このデータには、ユーザーID、訪問されたURL、およびイベントのタイムスタンプが含まれています。 @@ -321,9 +320,9 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; ## 次のステップ \{#whats-next\} -- [チュートリアル](/tutorial.md) では、テーブルに 200 万行を挿入し、いくつかの分析クエリを実行します -- [サンプルデータセット](/getting-started/index.md) と、その挿入手順を一覧で提供しています -- [Getting Started with ClickHouse](https://clickhouse.com/company/events/getting-started-with-clickhouse/) の 25 分間の動画をご覧ください -- データが外部ソースから来る場合は、メッセージキュー、データベース、パイプラインなどへの接続方法をまとめた[連携ガイド集](/integrations/index.mdx)を参照してください -- UI/BI 可視化ツールを使用している場合は、[UI を ClickHouse に接続するためのユーザーガイド](/integrations/data-visualization) を参照してください -- [プライマリキー](/guides/best-practices/sparse-primary-indexes.md) に関するユーザーガイドには、プライマリキーについて知っておくべきことと、その定義方法がすべて記載されています \ No newline at end of file +* [チュートリアル](/tutorial.md) では、テーブルに 200 万行を挿入し、いくつかの分析クエリを実行します +* [サンプルデータセット](/getting-started/index.md) と、その挿入手順を一覧で提供しています +* [Getting Started with ClickHouse](https://clickhouse.com/company/events/getting-started-with-clickhouse/) の 25 分間の動画をご覧ください +* データが外部ソースから来る場合は、メッセージキュー、データベース、パイプラインなどへの接続方法をまとめた[連携ガイド集](/integrations/index.mdx)を参照してください +* UI/BI 可視化ツールを使用している場合は、[UI を ClickHouse に接続するためのユーザーガイド](/integrations/data-visualization) を参照してください +* [プライマリキー](/guides/best-practices/sparse-primary-indexes.md) に関するユーザーガイドには、プライマリキーについて知っておくべきことと、その定義方法がすべて記載されています \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx index b02a92d333e..8ccc9bdb73f 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx +++ b/i18n/jp/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx @@ -14,15 +14,14 @@ import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; import {VerticalStepper} from '@clickhouse/click-ui/bundled'; - -# ClickHouse OSS クイックスタート +# ClickHouse OSS クイックスタート \{#clickhouse-oss-quick-start\} > このクイックスタートチュートリアルでは、8 つの簡単なステップで OSS 版 ClickHouse をセットアップします。お使いの OS に適したバイナリをダウンロードし、 -ClickHouse サーバーの起動方法を学び、ClickHouse クライアントを使ってテーブルを作成し、 -そのテーブルにデータを挿入して、そのデータを取得するクエリを実行します。 +> ClickHouse サーバーの起動方法を学び、ClickHouse クライアントを使ってテーブルを作成し、 +> そのテーブルにデータを挿入して、そのデータを取得するクエリを実行します。 - ## ClickHouseのダウンロード + ## ClickHouseのダウンロード \{#download-the-binary\} ClickHouseはLinux、FreeBSD、macOS上でネイティブに動作し、Windowsでは[WSL](https://learn.microsoft.com/en-us/windows/wsl/about)経由で動作します。 ClickHouseをローカルにダウンロードする最も簡単な方法は、以下の`curl`コマンドを実行することです。 このコマンドは使用中のオペレーティングシステムがサポートされているかを判定し、masterブランチからビルドされた適切なClickHouseバイナリをダウンロードします。 @@ -53,7 +52,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント Macユーザーの方へ:バイナリの開発者を検証できないというエラーが表示される場合は、["MacOSにおける開発者検証エラーの修正方法"](https://clickhouse.com/docs/knowledgebase/fix-developer-verification-error-in-macos)を参照してください。 ::: - ## サーバーを起動する + ## サーバーを起動する \{#start-the-server\} 以下のコマンドを実行してClickHouseサーバーを起動します: @@ -65,7 +64,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント [デフォルトのログレベル](https://clickhouse.com/docs/knowledgebase/why_default_logging_verbose) が`warning`ではなく`trace`に設定されています。 - ## クライアントを起動する + ## クライアントを起動する \{#start-the-client\} `clickhouse-client`を使用してClickHouseサービスに接続します。新しいターミナルを開き、`clickhouse`バイナリが保存されているディレクトリに移動して、以下のコマンドを実行します: @@ -79,7 +78,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント my-host :) ``` - ## テーブルを作成する + ## テーブルを作成する \{#create-a-table\} `CREATE TABLE`を使用して新しいテーブルを定義します。一般的なSQL DDLコマンドはClickHouseで動作しますが、1つ追加があります - ClickHouseのテーブルには`ENGINE`句が必要です。ClickHouseのパフォーマンス上の利点を活用するには、[`MergeTree`](/engines/table-engines/mergetree-family/mergetree)を使用してください: @@ -95,7 +94,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント PRIMARY KEY (user_id, timestamp) ``` - ## データの挿入 + ## データの挿入 \{#insert-data\} ClickHouseでは一般的な`INSERT INTO TABLE`コマンドを使用できますが、`MergeTree`テーブルへの各挿入によって、ストレージ内にClickHouseで**パート**と呼ばれるものが作成されることを理解しておく必要があります。これらの^^パート^^は後でClickHouseによってバックグラウンドでマージされます。 @@ -111,7 +110,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント (101, 'グラニュールは読み取られるデータの最小チャンク', now() + 5, 3.14159 ) ``` - ## 新しいテーブルをクエリする + ## 新しいテーブルをクエリする \{#query-your-new-table\} 他のSQLデータベースと同様に`SELECT`クエリを記述できます: @@ -134,7 +133,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント 4行が返されました。経過時間: 0.008秒 ``` - ## 独自データの挿入 + ## 独自データの挿入 \{#insert-your-own-data\} 次のステップは、お客様のデータをClickHouseに取り込むことです。データ取り込み用の[テーブル関数](/sql-reference/table-functions/index.md)と[インテグレーション](/integrations)を多数ご用意しています。以下のタブにいくつかの例を掲載していますが、ClickHouseと統合可能な技術の詳細なリストについては[インテグレーション](/integrations)ページをご確認ください。 @@ -348,7 +347,7 @@ ClickHouse サーバーの起動方法を学び、ClickHouse クライアント - ## 探索 + ## 探索 \{#explore\} * ClickHouse の仕組みの基本を学ぶには、[Core Concepts](/managing-data/core-concepts) セクションを参照してください。 * ClickHouse の主要なコンセプトや機能を、より踏み込んで解説している [Advanced Tutorial](tutorial.md) もご覧ください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/index.md index 476c767ce21..98b80092534 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/index.md @@ -7,12 +7,11 @@ keywords: ['パフォーマンス最適化', 'ベストプラクティス', '最 doc_type: 'reference' --- -import TableOfContents from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContents from '@site/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; - -# パフォーマンスと最適化 +# パフォーマンスと最適化 {#performance-and-optimizations} このセクションでは、ClickHouse のパフォーマンスを向上させるためのヒントとベストプラクティスを紹介します。 パフォーマンス向上に必要な基本概念を解説している [Core Concepts](/parts) を、このセクションを読む前に参照することを推奨します。 - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md index 5b64d277986..83aafe06bab 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/prewhere_05.gif' import Image from '@theme/IdealImage'; -# PREWHERE 最適化はどのように動作しますか? +# PREWHERE 最適化はどのように動作しますか? {#how-does-the-prewhere-optimization-work} [PREWHERE 句](/sql-reference/statements/select/prewhere) は、ClickHouse におけるクエリ実行の最適化機構です。不要なデータの読み取りを回避し、フィルタ条件に含まれない列をディスクから読み込む前に関係のないデータを除外することで、I/O を削減しクエリ速度を向上させます。 @@ -109,7 +109,7 @@ ClickHouse はバージョン [23.2](https://clickhouse.com/blog/clickhouse-rele -## PREWHERE の効果を測定する方法 +## PREWHERE の効果を測定する方法 {#how-to-measure-prewhere-impact} PREWHERE がクエリに効果を発揮しているか検証するには、`optimize_move_to_prewhere setting` を有効にした場合と無効にした場合でクエリのパフォーマンスを比較します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md index 8925d292794..2a8fca2439c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md @@ -11,7 +11,7 @@ import queryOptimizationDiagram1 from '@site/static/images/guides/best-practices import Image from '@theme/IdealImage'; -# クエリ最適化のためのシンプルガイド +# クエリ最適化のためのシンプルガイド {#a-simple-guide-for-query-optimization} このセクションでは、一般的なシナリオを通じて [analyzer](/operations/analyzer)、[query profiling](/operations/optimizing-performance/sampling-query-profiler)、[avoid nullable Columns](/optimize/avoid-nullable-columns) など、さまざまなパフォーマンス最適化手法の使い方を示し、ClickHouse のクエリ性能を向上させる方法を説明します。 @@ -61,7 +61,7 @@ ClickHouse には、クエリがどのように実行され、その実行にど -## データセット +## データセット {#dataset} 実際の例を用いて、クエリ性能へのアプローチを説明します。  @@ -112,9 +112,9 @@ ORDER BY tuple() ``` -## 遅いクエリを見つける +## 遅いクエリを見つける {#spot-the-slow-queries} -### クエリログ +### クエリログ {#query-logs} デフォルトでは、ClickHouse は実行された各クエリに関する情報を収集し、[クエリログ](/operations/system-tables/query_log) に書き込みます。このデータはテーブル `system.query_log` に保存されます。  @@ -431,7 +431,7 @@ _最後に、外れ値には注意してください。ユーザーがアドホ -## 基本的な最適化 +## 基本的な最適化 {#basic-optimization} テスト用のフレームワークが用意できたので、ここから最適化を始めていきます。 @@ -439,7 +439,7 @@ _最後に、外れ値には注意してください。ユーザーがアドホ データをどのように取り込んだかによっては、インジェストされたデータに基づいてテーブルスキーマを推論するために、ClickHouse の[機能](/interfaces/schema-inference)を利用しているかもしれません。これは使い始めるうえでは非常に便利ですが、クエリ性能を最適化したい場合は、ユースケースに最も適した形になるようテーブルスキーマを見直す必要があります。 -### Nullable +### Nullable {#nullable} [ベストプラクティスのドキュメント](/best-practices/select-data-types#avoid-nullable-columns)に記載されているとおり、可能な限り Nullable 列は避けてください。データのインジェスト機構を柔軟にできるため多用したくなりますが、そのたびに余分な列を処理する必要があるため、パフォーマンスに悪影響を与えます。 @@ -485,7 +485,7 @@ dropoff_location_id_nulls: 0 `null` 値を含む列は `mta_tax` と `payment_type` の 2 つだけです。その他のフィールドは `Nullable` 列にする必要はありません。 -### 低カーディナリティ +### 低カーディナリティ {#low-cardinality} String 型に対して簡単に適用できる最適化として、LowCardinality データ型を有効活用する方法があります。低カーディナリティに関しては [ドキュメント](/sql-reference/data-types/lowcardinality) に記載されているとおり、ClickHouse は LowCardinality 型の列に辞書エンコーディングを適用し、クエリ性能を大きく向上させます。  @@ -515,7 +515,7 @@ uniq(vendor_id): 3 カーディナリティが低い場合、これら 4 つのカラム `ratecode_id`、`pickup_location_id`、`dropoff_location_id`、`vendor_id` は、LowCardinality データ型の有力な候補となります。 -### データ型の最適化 +### データ型の最適化 {#optimize-data-type} ClickHouse は多数のデータ型をサポートしています。パフォーマンスを最適化し、ディスク上のデータ保存容量を削減するために、ユースケースに適合する範囲で可能な限り小さいデータ型を選択してください。  @@ -538,7 +538,7 @@ Query id: 4306a8e1-2a9c-4b06-97b4-4d902d2233eb 日付の精度は、データセットに合致し、実行する予定のクエリに最も適したものを選択してください。 -### 最適化を適用する +### 最適化を適用する {#apply-the-optimizations} 最適化済みのスキーマを使用する新しいテーブルを作成し、データを再取り込みします。 @@ -604,7 +604,7 @@ Query id: 72b5eb1c-ff33-4fdb-9d29-dd076ac6f532 新しいテーブルは、以前のテーブルと比べてかなり小さくなっています。テーブル全体のディスク使用量は約 34% 削減されており、7.38 GiB から 4.89 GiB になっています。 -## 主キーの重要性 +## 主キーの重要性 {#the-importance-of-primary-keys} ClickHouse における主キーは、多くの従来型データベースシステムとは異なる動作をします。従来のシステムでは、主キーは一意性とデータ整合性を保証します。重複した主キー値を挿入しようとすると拒否され、通常、高速な検索のために B-tree またはハッシュベースのインデックスが作成されます。  @@ -616,7 +616,7 @@ ClickHouse では、主キーの[目的](/guides/best-practices/sparse-primary-i ClickHouse がサポートしている他のオプション(Projection やマテリアライズドビューなど)を使うことで、同じデータに対して異なる主キーのセットを利用することもできます。このブログシリーズの第 2 部では、この点についてさらに詳しく説明します。  -### 主キーを選択する +### 主キーを選択する {#choose-primary-keys} 正しい主キーのセットを選択することは複雑なテーマであり、最適な組み合わせを見つけるにはトレードオフや試行錯誤が必要になる場合があります。  diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md index 6918a2188e3..fd7dd32a5b0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/query-parallelis import Image from '@theme/IdealImage'; -# ClickHouse がクエリを並列実行する仕組み +# ClickHouse がクエリを並列実行する仕組み {#how-clickhouse-executes-a-query-in-parallel} ClickHouse は [高速に動作するよう設計されています](/concepts/why-clickhouse-is-so-fast)。利用可能なすべての CPU コアを使用し、データを複数の処理レーンに分散させることで、高い並列性でクエリを実行し、多くの場合ハードウェアを限界近くまで活用します。 @@ -66,7 +66,7 @@ ClickHouse Cloud では、同様の並列性を [parallel replicas](https://clic -## クエリの並列実行の監視 +## クエリの並列実行の監視 {#monitoring-query-parallelism} これらのツールを使用して、クエリが利用可能な CPU リソースを十分に活用しているかを確認し、そうでない場合の原因を診断します。 @@ -126,12 +126,12 @@ ClickHouse の [組み込み Web UI](/interfaces/http)(`/play` エンドポイ Note: 可視化は左から右へ読んでください。各行は、データをブロック単位でストリーミングし、フィルタリング、集約、最終処理ステージなどの変換を適用する並列処理レーンを表します。この例では、`max_threads = 4` の設定に対応する 4 本の並列レーンが確認できます。 -### 処理レーン間での負荷分散 +### 処理レーン間での負荷分散 {#load-balancing-across-processing-lanes} 上記の物理プラン内の `Resize` オペレーターは、処理レーン間でデータブロックストリームを[再パーティションおよび再分配](/academic_overview#4-2-multi-core-parallelization)することで、各レーンの利用率を均等に保っている点に注意してください。この再バランシングは、データ範囲ごとにクエリ述語にマッチする行数が異なる場合に特に重要です。そうしないと、一部のレーンだけが過負荷になり、他のレーンがアイドル状態になる可能性があります。作業を再分配することで、速いレーンが遅いレーンを実質的に助ける形となり、クエリ全体の実行時間を最適化できます。 -## なぜ max_threads が常にそのとおりには動作しないのか +## なぜ max_threads が常にそのとおりには動作しないのか {#why-max-threads-isnt-always-respected} 前述のとおり、並列処理レーンの数 `n` は `max_threads` 設定によって制御されます。デフォルトでは、この設定値はサーバー上で ClickHouse が利用可能な CPU コア数と同じになります。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md index 4c2812935cb..6653926f2f0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md @@ -10,7 +10,7 @@ keywords: ['スキップインデックス', 'データスキップ', 'パフォ -# データスキップインデックスの例 +# データスキップインデックスの例 {#data-skipping-index-examples} このページでは、ClickHouse のデータスキップインデックスの例をまとめ、各インデックスの定義方法、使用すべきタイミング、適用されているかを検証する方法を示します。これらの機能はすべて [MergeTree-family テーブル](/engines/table-engines/mergetree-family/mergetree) で動作します。 @@ -33,7 +33,7 @@ ClickHouse は 5 種類のスキップインデックスをサポートしてい 各セクションではサンプルデータを用いた例を示し、クエリ実行時にインデックスが利用されているかを確認する方法を説明します。 -## MinMax インデックス +## MinMax インデックス {#minmax-index} `minmax` インデックスは、おおまかにソートされたデータや、`ORDER BY` と相関のあるカラムに対する範囲条件に最適です。 @@ -64,7 +64,7 @@ SELECT count() FROM events WHERE ts >= now() - 3600; `EXPLAIN` とプルーニングを用いた[具体例](/best-practices/use-data-skipping-indices-where-appropriate#example)を参照してください。 -## Set インデックス +## Set インデックス {#set-index} ローカル(ブロック単位)のカーディナリティが低い場合に `set` インデックスを使用します。各ブロック内に多数の異なる値が存在する場合には効果がありません。 @@ -81,7 +81,7 @@ SELECT * FROM events WHERE user_id IN (101, 202); 作成/マテリアライズのワークフローと、その適用前後の効果は、[基本的な操作ガイド](/optimize/skipping-indexes#basic-operation)で確認できます。 -## 汎用 Bloom フィルター(スカラー) +## 汎用 Bloom フィルター(スカラー) {#generic-bloom-filter-scalar} `bloom_filter` インデックスは、「干し草の山から針を探すような」等価比較や IN によるメンバーシップ判定に適しています。偽陽性率(デフォルト 0.025)を指定するオプションのパラメータを受け取ります。 @@ -96,7 +96,7 @@ SELECT * FROM events WHERE value IN (7, 42, 99); ``` -## 部分文字列検索用の N-gram Bloom フィルター (ngrambf_v1) +## 部分文字列検索用の N-gram Bloom フィルター (ngrambf_v1) {#n-gram-bloom-filter-ngrambf-v1-for-substring-search} `ngrambf_v1` インデックスは、文字列を N-gram に分割します。`LIKE '%...%'` クエリに対して有効です。String/FixedString/Map(mapKeys/mapValues 経由)をサポートし、サイズ、ハッシュ数、シードを調整できます。詳細については、[N-gram Bloom filter](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter) のドキュメントを参照してください。 @@ -133,7 +133,7 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) AS k; -- 約13 チューニングに関する完全なガイダンスについては、[パラメータのドキュメント](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter)を参照してください。 -## 単語ベース検索用の Token Bloom フィルタ (tokenbf_v1) +## 単語ベース検索用の Token Bloom フィルタ (tokenbf_v1) {#token-bloom-filter-tokenbf-v1-for-word-based-search} `tokenbf_v1` は、英数字以外の文字で区切られたトークンをインデックス化します。[`hasToken`](/sql-reference/functions/string-search-functions#hasToken)、`LIKE` による単語パターン、または `=` / `IN` 演算子と併用して使用することを推奨します。`String`/`FixedString`/`Map` 型をサポートします。 @@ -153,7 +153,7 @@ SELECT count() FROM logs WHERE hasToken(lower(msg), 'exception'); トークンと ngram に関するオブザーバビリティの例とガイダンスについては、[こちら](/use-cases/observability/schema-design#bloom-filters-for-text-search)を参照してください。 -## CREATE TABLE 時にインデックスを追加する(複数の例) +## CREATE TABLE 時にインデックスを追加する(複数の例) {#add-indexes-during-create-table-multiple-examples} スキップインデックスは、複合式や `Map` / `Tuple` / `Nested` 型もサポートします。これは以下の例で示します。 @@ -175,7 +175,7 @@ ORDER BY u64; ``` -## 既存データのマテリアライズと検証 +## 既存データのマテリアライズと検証 {#materializing-on-existing-data-and-verifying} `MATERIALIZE` を使って既存のデータパーツにインデックスを追加し、以下のように `EXPLAIN` やトレースログでプルーニングの動作を確認できます。 @@ -211,7 +211,7 @@ SET send_logs_level = 'trace'; -## 一時的にインデックスを無視または強制する +## 一時的にインデックスを無視または強制する {#temporarily-ignore-or-force-indexes} テストやトラブルシューティングの際に、個々のクエリごとに名前を指定して特定のインデックスを無効化できます。必要に応じてインデックスの使用を強制するための設定もあります。[`ignore_data_skipping_indices`](/operations/settings/settings#ignore_data_skipping_indices) を参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md index 52cbdb1bcbb..49fff5a86b1 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md @@ -13,7 +13,7 @@ import bad_skip from '@site/static/images/guides/best-practices/bad_skip.png'; import Image from '@theme/IdealImage'; -# ClickHouse のデータスキップインデックスを理解する +# ClickHouse のデータスキップインデックスを理解する {#understanding-clickhouse-data-skipping-indexes} @@ -29,7 +29,7 @@ ClickHouse のクエリパフォーマンスには多くの要因が影響しま -## 基本的な動作 +## 基本的な動作 {#basic-operation} ユーザーが Data Skipping Indexes を使用できるのは、MergeTree ファミリーのテーブルのみです。各データスキップインデックスには、主に次の 4 つの引数があります。 @@ -122,11 +122,11 @@ SET send_logs_level='trace'; default.skip_table (933d4b2c-8cea-4bf9-8c93-c56e900eefd1) (SelectExecutor): インデックス `vix` により、6104 個のグラニュールのうち 6102 個が除外されました。 ``` -## スキップインデックスのタイプ +## スキップインデックスのタイプ {#skip-index-types} {/* vale off */ } -### minmax +### minmax {#minmax} {/* vale on */ } @@ -136,7 +136,7 @@ SET send_logs_level='trace'; {/* vale off */ } -### set +### set {#set} {/* vale on */ } @@ -144,7 +144,7 @@ SET send_logs_level='trace'; このインデックスのコスト、性能、および有効性は、ブロック内のカーディナリティに依存します。各ブロックに多数のユニークな値が含まれる場合、大きなインデックス集合に対してクエリ条件を評価するのが非常に高コストになるか、あるいは `max_size` を超えた結果としてインデックスが空になり、インデックスが適用されない可能性があります。 -### Bloom フィルター型 +### Bloom フィルター型 {#bloom-filter-types} *Bloom フィルター*は、わずかな偽陽性を許容する代わりに、集合への所属(メンバーシップ)を空間効率良くテストできるデータ構造です。スキップインデックスの場合、偽陽性は大きな問題にはなりません。唯一の不利益は、不要なブロックをいくつか読み込むことだけだからです。しかし、偽陽性が起こり得るということは、インデックス化された式が真になることが期待されるケースで使うべきであり、そうでないと有効なデータがスキップされる可能性があることを意味します。 @@ -185,7 +185,7 @@ Bloom フィルターに基づくデータスキッピングインデックス -## スキップインデックスのベストプラクティス +## スキップインデックスのベストプラクティス {#skip-best-practices} スキップインデックスは必ずしも直感的ではなく、特に RDBMS の行ベースのセカンダリインデックスやドキュメントストアの転置インデックスに慣れたユーザーにはわかりにくいものです。効果を得るには、ClickHouse のデータスキップインデックスを適用することで、インデックスを計算するコストを上回るだけの十分なグラニュールの読み取りを回避する必要があります。重要なのは、インデックス化されたブロック内にある値が 1 回でも出現すると、そのブロック全体をメモリに読み込んで評価しなければならず、その場合インデックスのコストが無駄に発生してしまうという点です。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md index 63b75249947..29eab8abf2e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md @@ -36,7 +36,7 @@ import sparsePrimaryIndexes15b from '@site/static/images/guides/best-practices/s import Image from '@theme/IdealImage'; -# ClickHouse におけるプライマリインデックスの実践入門 +# ClickHouse におけるプライマリインデックスの実践入門 {#a-practical-introduction-to-primary-indexes-in-clickhouse} ## はじめに {#introduction} @@ -73,7 +73,7 @@ ClickHouse の [セカンダリ data skipping インデックス](/engines/table このドキュメントで示しているすべての実行時の数値は、Apple M1 Pro チップと 16GB の RAM を搭載した MacBook Pro 上で ClickHouse 22.2.1 をローカルで実行した際の結果に基づいています。 -### フルテーブルスキャン +### フルテーブルスキャン {#a-full-table-scan} 主キーなしのデータセットに対してクエリがどのように実行されるかを確認するために、次の SQL DDL ステートメントを実行して、MergeTree テーブルエンジンを使用するテーブルを作成します。 @@ -150,7 +150,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 10 rows in set. Elapsed: 0.022 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} 処理行数: 887万行、 70.45 MB (3億9853万行/秒、3.17 GB/秒) ``` @@ -172,7 +172,7 @@ B-Tree インデックスに伴う課題を踏まえ、ClickHouse のテーブ 以下では、ClickHouse がスパースプライマリインデックスをどのように構築・利用しているかを詳細に説明します。記事の後半では、インデックス(プライマリキー列)を構築するために使用するテーブル列の選択・削除・並び替えについて、いくつかのベストプラクティスを解説します。 -### 主キーを持つテーブル +### 主キーを持つテーブル {#a-table-with-a-primary-key} `UserID` と `URL` をキー列とする複合主キーを持つテーブルを作成します。 @@ -494,7 +494,7 @@ SELECT UserID, URL FROM file('primary-hits_UserID_URL.idx', 'RowBinary', 'UserID これがクエリ実行性能に与える影響については、このあと詳しく説明します。 -### プライマリインデックスはグラニュールを選択するために使用される +### プライマリインデックスはグラニュールを選択するために使用される {#the-primary-index-is-used-for-selecting-granules} これで、プライマリインデックスを活用してクエリを実行できるようになりました。 @@ -526,7 +526,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 10行のセット。経過時間: 0.005秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 8.19千行を処理、 740.18 KB (1.53百万行/秒、138.59 MB/秒) ``` @@ -537,13 +537,13 @@ ClickHouse クライアントの出力を見ると、フルテーブルスキャ ```response ...Executor): キー条件: (列 0 が [749927693, 749927693] 内) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): パート all_1_9_2 のインデックス範囲で二分探索を実行中 (1083 マーク) ...Executor): 左境界マークを検出: 176 ...Executor): 右境界マークを検出: 177 ...Executor): 19 ステップで連続範囲を検出 ...Executor): パーティションキーで 1/1 パートを選択、プライマリキーで 1 パートを選択、 -# highlight-next-line +# highlight-next-line {#highlight-next-line} プライマリキーで 1/1083 マークを選択、1 範囲から 1 マークを読み取り ...Reading ...1441792 から開始して約 8192 行を読み取り中 ``` @@ -592,7 +592,7 @@ LIMIT 10; │ UserID │ │ Condition: (UserID in [749927693, 749927693]) │ │ Parts: 1/1 │ -# highlight-next-line +# highlight-next-line {#highlight-next-line} │ Granules: 1/1083 │ └───────────────────────────────────────────────────────────────────────────────────────┘ @@ -711,7 +711,7 @@ ClickHouse は、今回の例のクエリ(UserID が 749.927.693 のインタ -### セカンダリキー列は(必ずしも)非効率とは限らない +### セカンダリキー列は(必ずしも)非効率とは限らない {#secondary-key-columns-can-not-be-inefficient} クエリが複合キーの一部であり、かつ先頭のキー列である列を条件にフィルタリングしている場合、[ClickHouse はそのキー列のインデックスマークに対して二分探索アルゴリズムを実行します](#the-primary-index-is-used-for-selecting-granules)。 @@ -757,7 +757,7 @@ LIMIT 10; └────────────┴───────┘ 10 rows in set. Elapsed: 0.086 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} 処理: 881万行、 799.69 MB (1億211万行/秒、9.27 GB/秒) ``` @@ -769,11 +769,11 @@ LIMIT 10; ```response ...Executor): Key condition: (column 1 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Used generic exclusion search over index for part all_1_9_2 with 1537 steps ...Executor): Selected 1/1 parts by partition key, 1 parts by primary key, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 1076/1083 marks by primary key, 1076 marks to read from 5 ranges ...Executor): Reading approx. 8814592 rows with 10 streams ``` @@ -842,7 +842,7 @@ UserID のカーディナリティが高い場合、同じ UserID 値が複数 このサンプルデータセットでは、両方のキー列(UserID, URL)は同程度に高いカーディナリティを持っており、前述のとおり、URL 列の直前のキー列のカーディナリティが高い、あるいは同程度に高い場合には、汎用排他検索アルゴリズムはあまり効果的ではありません。 -### データスキッピングインデックスに関する注意 +### データスキッピングインデックスに関する注意 {#note-about-data-skipping-index} UserID と URL はどちらも同様にカーディナリティが高いため、[URL でのクエリフィルタリング](/guides/best-practices/sparse-primary-indexes#secondary-key-columns-can-not-be-inefficient) についても、[複合主キー (UserID, URL) を持つテーブル](#a-table-with-a-primary-key) の URL 列に [セカンダリのデータスキッピングインデックス](./skipping-indexes.md) を作成しても、得られる効果はそれほど大きくありません。 @@ -906,7 +906,7 @@ UserIDとURLのカーディナリティがともに高いため、この二次 -### オプション 1: セカンダリテーブル +### オプション 1: セカンダリテーブル {#option-1-secondary-tables} @@ -986,7 +986,7 @@ LIMIT 10; └────────────┴───────┘ 10行を取得しました。経過時間: 0.017秒 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 処理行数: 319.49千行、 11.38 MB (18.41百万行/秒、655.75 MB/秒) ``` @@ -1002,13 +1002,13 @@ ClickHouse サーバーのログファイル内に出力される対応する tr ```response ...Executor): Key condition: (column 0 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): パート all_1_9_2 のインデックス範囲でバイナリサーチを実行中 (1083 marks) ...Executor): (LEFT) 境界マークを検出: 644 ...Executor): (RIGHT) 境界マークを検出: 683 ...Executor): 19 ステップで連続範囲を検出 ...Executor): パーティションキーで 1/1 parts を選択、プライマリキーで 1 parts を選択、 -# highlight-next-line +# highlight-next-line {#highlight-next-line} プライマリキーで 39/1083 marks、1 ranges から 39 marks を読み取り ...Executor): 2 streams で約 319488 行を読み取り中 ``` @@ -1143,7 +1143,7 @@ LIMIT 10; └────────────┴───────┘ 10行が設定されています。経過時間: 0.026秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 335.87千行を処理しました、 13.54 MB (12.91百万行/秒、520.38 MB/秒) ``` @@ -1156,7 +1156,7 @@ ClickHouse のサーバーログファイル内の対応するトレースログ ```response ...Executor): Key condition: (column 0 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Running binary search on index range ... ... ...Executor): Selected 4/4 parts by partition key, 4 parts by primary key, @@ -1233,7 +1233,7 @@ LIMIT 10; └────────────┴───────┘ 10 rows in set. Elapsed: 0.029 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Processed 319.49 thousand rows, 1 1.38 MB (11.05 million rows/s., 393.58 MB/s.) ``` @@ -1246,14 +1246,14 @@ ClickHouse のサーバーログファイル中の該当トレースログから ```response ...Executor): Key condition: (column 0 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Running binary search on index range for part prj_url_userid (1083 marks) ...Executor): ... # highlight-next-line ...Executor): Choose complete Normal projection prj_url_userid ...Executor): projection required columns: URL, UserID ...Executor): Selected 1/1 parts by partition key, 1 parts by primary key, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 39/1083 marks by primary key, 39 marks to read from 1 ranges ...Executor): Reading approx. 319488 rows with 2 streams ``` @@ -1444,7 +1444,7 @@ Processed 20.32 thousand rows, その理由は、[汎用除外検索アルゴリズム](https://github.com/ClickHouse/ClickHouse/blob/22.3/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp#L1444) は、直前のキー列のカーディナリティがより低い場合に、その次のセカンダリキー列を用いて [granules](#the-primary-index-is-used-for-selecting-granules) を選択するときに最も効果的に動作するためです。この点については、本ガイドの[前のセクション](#generic-exclusion-search-algorithm)で詳しく説明しました。 -### データファイルの最適な圧縮率 +### データファイルの最適な圧縮率 {#efficient-filtering-on-secondary-key-columns} 次のクエリでは、上記で作成した 2 つのテーブル間における `UserID` 列の圧縮率を比較します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md index 6130bcc0f27..863cc4e6275 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md @@ -19,8 +19,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; どのクエリ言語を使用するかは、`dialect` の設定によって制御されます。 - -## 標準SQL +## 標準SQL {#standard-sql} 標準SQLは ClickHouse のデフォルトのクエリ言語です。 @@ -28,8 +27,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; SET dialect = 'clickhouse' ``` - -## パイプライン型リレーショナルクエリ言語 (PRQL) +## パイプライン型リレーショナルクエリ言語 (PRQL) {#pipelined-relational-query-language-prql} @@ -52,8 +50,7 @@ aggregate { 内部的には、ClickHouse は PRQL クエリを実行する際、PRQL を SQL にトランスパイルして処理します。 - -## Kusto クエリ言語 (KQL) +## Kusto クエリ言語 (KQL) {#kusto-query-language-kql} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md index 9c61509e8ca..a2e4db08110 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md @@ -6,13 +6,11 @@ keywords: ['マテリアライズドビュー', '集約'] doc_type: 'guide' --- - - -# カスケードするマテリアライズドビュー +# カスケードするマテリアライズドビュー {#cascading-materialized-views} この例では、まずマテリアライズドビューの作成方法を示し、その後、2つ目のマテリアライズドビューを1つ目にカスケードさせる方法を説明します。このページでは、その手順、さまざまな活用方法、および制約について説明します。2つ目のマテリアライズドビューをソースとして使用してマテリアライズドビューを作成することで、さまざまなユースケースに対応できます。 - + + + + allowfullscreen +/> -
+
ClickHouse では JSON を扱うための複数のアプローチを提供しており、それぞれに長所・短所や適したユースケースがあります。このガイドでは、JSON の読み込み方法とスキーマを最適に設計する方法について説明します。このガイドは次のセクションで構成されています。 -- [Loading JSON](/integrations/data-formats/json/loading) - シンプルなスキーマを用いて、ClickHouse で構造化および半構造化 JSON を読み込み、クエリする方法。 -- [JSON schema inference](/integrations/data-formats/json/inference) - JSON schema inference を使用して JSON に対してクエリを実行し、テーブルスキーマを作成する方法。 -- [Designing JSON schema](/integrations/data-formats/json/schema) - JSON スキーマを設計および最適化するための手順。 -- [Exporting JSON](/integrations/data-formats/json/exporting) - JSON をエクスポートする方法。 -- [Handling other JSON Formats](/integrations/data-formats/json/other-formats) - 改行区切り JSON (NDJSON) 以外の JSON フォーマットを扱う際のヒント。 -- [Other approaches to modeling JSON](/integrations/data-formats/json/other-approaches) - JSON をモデリングする従来のアプローチ。**非推奨です。** \ No newline at end of file +* [Loading JSON](/integrations/data-formats/json/loading) - シンプルなスキーマを用いて、ClickHouse で構造化および半構造化 JSON を読み込み、クエリする方法。 +* [JSON schema inference](/integrations/data-formats/json/inference) - JSON schema inference を使用して JSON に対してクエリを実行し、テーブルスキーマを作成する方法。 +* [Designing JSON schema](/integrations/data-formats/json/schema) - JSON スキーマを設計および最適化するための手順。 +* [Exporting JSON](/integrations/data-formats/json/exporting) - JSON をエクスポートする方法。 +* [Handling other JSON Formats](/integrations/data-formats/json/other-formats) - 改行区切り JSON (NDJSON) 以外の JSON フォーマットを扱う際のヒント。 +* [Other approaches to modeling JSON](/integrations/data-formats/json/other-approaches) - JSON をモデリングする従来のアプローチ。**非推奨です。** \ No newline at end of file diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md index 6c35a997f9b..b8229f4a32a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md @@ -17,7 +17,7 @@ doc_type: 'guide' -## 構造化された JSON の読み込み +## 構造化された JSON の読み込み {#loading-structured-json} このセクションでは、JSON データが [`NDJSON`](https://github.com/ndjson/ndjson-spec) (Newline delimited JSON) 形式であり、ClickHouse では [`JSONEachRow`](/interfaces/formats/JSONEachRow) として知られ、かつ列名と型が固定された適切に構造化されたデータであると仮定します。`NDJSON` は、その簡潔さとストレージ効率の良さから JSON を読み込む際に推奨される形式ですが、他の形式も [入力と出力](/interfaces/formats/JSON) の両方でサポートされています。 @@ -124,7 +124,7 @@ FORMAT JSONEachRow これらの例では、`JSONEachRow` 形式の使用を想定しています。その他の一般的な JSON 形式もサポートされており、それらを取り込む例は[こちら](/integrations/data-formats/json/other-formats)にあります。 -## セミ構造化 JSON の読み込み +## セミ構造化 JSON の読み込み {#loading-semi-structured-json} 前の例では、キー名と型がよく分かっている静的な JSON を読み込みました。実際にはそうとは限らず、キーが追加されたり、その型が変化したりします。これは Observability データなどのユースケースでよく見られます。 @@ -200,7 +200,7 @@ LIMIT 2 ここではデータ読み込み時のパフォーマンスの違いに注目してください。`JSON` 列は、挿入時に型推論が必要であり、さらに 1 つの列に複数の型が存在する場合は追加のストレージも必要になります。`JSON` 型は([JSON スキーマの設計](/integrations/data-formats/json/schema)を参照)明示的に列を宣言した場合と同等のパフォーマンスになるように設定できますが、デフォルトではあえて柔軟に使えるように設計されています。しかし、この柔軟性にはある程度のコストが伴います。 -### JSON 型を使用するタイミング +### JSON 型を使用するタイミング {#when-to-use-the-json-type} 次のようなデータの場合は JSON 型を使用します: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md index 6ce5583d5c9..f05cacb0fb5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md @@ -6,9 +6,7 @@ keywords: ['json', 'formats'] doc_type: 'reference' --- - - -# JSON をモデリングするその他のアプローチ +# JSON をモデリングするその他のアプローチ {#other-approaches-to-modeling-json} **以下は、ClickHouse における JSON モデリングの別手法です。網羅性のために記載していますが、これらは JSON 型が登場する以前に有用だったものであり、現在では多くのユースケースにおいて推奨されず、ほとんどの場合適用されません。** @@ -16,9 +14,7 @@ doc_type: 'reference' 同じスキーマ内でも、オブジェクトごとに異なる手法を適用できます。たとえば、一部のオブジェクトには `String` 型が最適であり、別のものには `Map` 型が最適な場合があります。`String` 型を使用した場合、それ以降にスキーマに関する追加の決定を行う必要はない点に注意してください。逆に、以下で示すように、JSON を表す `String` を含め、サブオブジェクトを `Map` のキーに対応する値としてネストすることも可能です。 ::: - - -## String 型の使用 +## String 型の使用 {#using-string} オブジェクトが非常に動的で、予測可能な構造がなく、任意のネストされたオブジェクトを含む場合は、`String` 型を使用することが推奨されます。値は、以下で示すように、クエリ実行時に JSON 関数を使用して抽出できます。 @@ -95,7 +91,6 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/arxiv/arxiv.j 0 rows in set. Elapsed: 25.186 sec. Processed 2.52 million rows, 1.38 GB (99.89 thousand rows/s., 54.79 MB/s.) ``` - 例えば、発行年ごとの論文数を集計したいとします。次のクエリを、単一の文字列カラムのみを使う場合と、スキーマの[構造化されたバージョン](/integrations/data-formats/json/inference#creating-tables)を使う場合で比較してみましょう。 ```sql @@ -156,7 +151,7 @@ Peak memory usage: 205.98 MiB. このアプローチは柔軟性が高い一方で、明確なパフォーマンスおよび構文上のコストを伴うため、スキーマ内で非常に動的なオブジェクトに対してのみ使用すべきです。 -### Simple JSON functions +### Simple JSON functions {#simple-json-functions} 上記の例では JSON* 系の関数を使用しています。これらは [simdjson](https://github.com/simdjson/simdjson) に基づく完全な JSON パーサーを利用しており、厳密なパースを行い、異なる階層にネストされた同名フィールドを区別します。これらの関数は、構文的には正しいものの体裁が整っていない JSON(例: キー間に二重スペースがあるなど)も扱うことができます。 @@ -174,7 +169,6 @@ Peak memory usage: 205.98 MiB. 一方、次の例は正しくパースされます。 - ````json {"@timestamp":893964617,"clientip":"40.135.0.0","request":{"method":"GET", "path":"/images/hm_bg.jpg","version":"HTTP/1.0"},"status":200,"size":24736} @@ -209,8 +203,7 @@ LIMIT 10 上記のクエリでは、公開日時は先頭の値のみで十分であるという事実を利用し、`simpleJSONExtractString` を使って `created` キーを抽出しています。この場合、パフォーマンス向上という利点を考えると、`simpleJSON*` 関数の制約は許容できます。 - -## Map 型の使用 +## Map 型の使用 {#using-map} オブジェクトが任意のキーを格納するために使われ、その多くが単一の型である場合は、`Map` 型の使用を検討してください。理想的には、一意なキーの数は数百を超えないことが望まれます。サブオブジェクトを持つオブジェクトについても、サブオブジェクトの型が一様であれば `Map` 型を検討できます。一般的には、ラベルやタグ、たとえばログデータ中の Kubernetes ポッドラベルなどに対して `Map` 型の使用を推奨します。 @@ -224,7 +217,7 @@ LIMIT 10 オブジェクトを `Map` としてモデリングする場合、JSON のキー名を格納するのに `String` キーが使われます。そのため `Map` は常に `Map(String, T)` となり、`T` はデータに応じて決まります。 ::: -#### プリミティブ値 +#### プリミティブ値 {#primitive-values} `Map` の最も単純な適用例は、オブジェクトが同じプリミティブ型を値として含む場合です。多くの場合、値 `T` として `String` 型を使用します。 @@ -281,13 +274,12 @@ SELECT company.labels['type'] AS type FROM people この型をクエリするための `Map` 関数の完全なセットが利用可能であり、[こちら](/sql-reference/functions/tuple-map-functions.md)で説明されています。データの型が一貫していない場合には、[必要な型変換](/sql-reference/functions/type-conversion-functions)を行うための関数が用意されています。 -#### オブジェクト値 +#### オブジェクト値 {#object-values} `Map` 型は、サブオブジェクトを持つオブジェクトにも適用できます。ただし、サブオブジェクト側の型に一貫性がある必要があります。 `persons` オブジェクトの `tags` キーについて、各 `tag` のサブオブジェクトが `name` と `time` 列を持つ、一定の構造である必要があるとします。そのような JSON ドキュメントの単純化した例は、次のようになります。 - ```json { "id": 1, @@ -360,8 +352,7 @@ FORMAT JSONEachRow } ``` - -## Nested 型の使用 +## Nested 型の使用 {#using-nested} [Nested 型](/sql-reference/data-types/nested-data-structures/nested) は、ほとんど変更されない静的オブジェクトをモデリングするために使用でき、`Tuple` や `Array(Tuple)` の代替手段となります。挙動が分かりにくい場合が多いため、JSON に対してこの型を使用するのは一般的に避けることを推奨します。`Nested` の主な利点は、サブカラムを並び替えキー(ORDER BY キー)として使用できることです。 @@ -396,11 +387,11 @@ CREATE table http ) ENGINE = MergeTree() ORDER BY (status, timestamp); ``` -### flatten_nested +### flatten_nested {#flatten_nested} `flatten_nested` 設定は Nested の動作を制御します。 -#### flatten_nested=1 +#### flatten_nested=1 {#flatten_nested1} 値が `1`(デフォルト)の場合、任意のレベルのネストはサポートされません。この値では、ネストされたデータ構造は、同じ長さを持つ複数の [Array](/sql-reference/data-types/array) カラムと考えると分かりやすいです。`method`、`path`、`version` フィールドは、すべて実質的には別々の `Array(Type)` カラムですが、重要な制約が 1 つあります。**`method`、`path`、`version` フィールドの長さはすべて同じでなければなりません。** `SHOW CREATE TABLE` を使用すると、これは次のように示されます。 @@ -471,10 +462,9 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth 1 rows in set. Elapsed: 0.002 sec. ``` - サブカラムに `Array` を使用することで、[Array functions](/sql-reference/functions/array-functions) の機能全体を、[`ARRAY JOIN`](/sql-reference/statements/select/array-join) 句も含めて活用できる可能性があります。これは、カラムが複数の値を持つ場合に有用です。 -#### flatten_nested=0 +#### flatten_nested=0 {#flatten_nested0} これは任意のレベルのネストを許可し、ネストされたカラムは単一の `Tuple` 配列として保持されることを意味します。実質的に、それらは `Array(Tuple)` と同じになります。 @@ -546,7 +536,7 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth 1 行のセット。経過時間: 0.002 秒。 ``` -### 例 +### 例 {#example} 上記データのより大きなサンプルが、S3 のパブリックバケット `s3://datasets-documentation/http/` に用意されています。 @@ -584,7 +574,6 @@ size FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/http/doc このデータをクエリするには、リクエストフィールドに配列としてアクセスする必要があります。以下では、一定期間におけるエラーと HTTP メソッドを集計します。 - ```sql SELECT status, request.method[1] AS method, count() AS c FROM http @@ -604,7 +593,7 @@ ORDER BY c DESC LIMIT 5; 5 rows in set. Elapsed: 0.007 sec. ``` -### ペアワイズ配列の使用 +### ペアワイズ配列の使用 {#using-pairwise-arrays} ペアワイズ配列は、JSON を文字列として表現する際の柔軟性と、より構造化されたアプローチによる高い性能とのバランスを提供します。スキーマは柔軟であり、新しいフィールドを任意にルートレベルへ追加することが可能です。しかしその一方で、クエリ構文が大幅に複雑になり、ネストされた構造とは互換性がありません。 @@ -668,7 +657,6 @@ GROUP BY method, status ORDER BY c DESC LIMIT 5; └────────┴────────┴───────┘ ``` - 5 行が返されました。経過時間: 0.383 秒。8.22 百万行、1.97 GB を処理しました (21.45 百万行/秒、5.15 GB/秒)。 ピークメモリ使用量: 51.35 MiB。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md index 94f466a9213..927b493f81b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md @@ -13,11 +13,11 @@ import json_offsets from '@site/static/images/integrations/data-ingestion/data-f import shared_json_column from '@site/static/images/integrations/data-ingestion/data-formats/json_shared_column.png'; -# スキーマの設計 +# スキーマの設計 {#designing-your-schema} [スキーマ推論](/integrations/data-formats/json/inference) を使用すると、JSON データの初期スキーマを確立し、S3 上にあるなどの JSON データファイルをそのままクエリできますが、ユーザーは自分たちのデータに対して、最適化されたバージョン管理済みスキーマを確立することを目指すべきです。以下では、JSON 構造をモデリングする際の推奨アプローチについて説明します。 -## 静的 JSON と動的 JSON +## 静的 JSON と動的 JSON {#static-vs-dynamic-json} JSON のスキーマを定義する際の主なタスクは、各キーの値に対して適切な型を決定することです。各キーに対して適切な型を決定するため、JSON 階層内のそれぞれのキーに以下のルールを再帰的に適用することを推奨します。 @@ -92,7 +92,7 @@ JSON のスキーマを定義する際の主なタスクは、各キーの値に 数百から数千もの静的キーを持つ構造体は、これらの列を静的に宣言するのが現実的でないことが多いため、動的なものと見なすことができます。ただし、可能な箇所では、ストレージと推論の両方のオーバーヘッドを削減するために、不要な[パスをスキップ](#using-type-hints-and-skipping-paths)してください。 ::: -## 静的な構造の扱い方 +## 静的な構造の扱い方 {#handling-static-structures} 静的な構造は名前付きタプル、つまり `Tuple` 型で扱うことを推奨します。オブジェクトの配列は、`Array(Tuple)` のようにタプルの配列として保持できます。タプル内でも、カラムとその型は同じルールに従って定義する必要があります。その結果、以下のように入れ子オブジェクトを表現するためにタプルをネストして用いることになります。 @@ -203,7 +203,7 @@ ORDER BY company.name ``` -### デフォルト値の扱い +### デフォルト値の扱い {#handling-default-values} JSON オブジェクトが構造化されていても、多くの場合は既知のキーの一部しか含まれない疎な形式になることがよくあります。幸い、`Tuple` 型では JSON ペイロード内のすべての列が必須というわけではありません。指定されていない場合にはデフォルト値が使用されます。 @@ -282,7 +282,7 @@ FORMAT PrettyJSONEachRow ::: -### 新しいカラムの扱い +### 新しいカラムの扱い {#handling-new-columns} JSON キーが静的な場合は構造化されたアプローチが最も簡単ですが、スキーマへの変更を事前に計画できる、つまり新しいキーがあらかじめ分かっており、それに応じてスキーマを変更できるのであれば、このアプローチはその場合でも引き続き使用できます。 @@ -360,7 +360,7 @@ SELECT id, nickname FROM people ``` -## 半構造化・動的な構造の扱い +## 半構造化・動的な構造の扱い {#handling-semi-structured-dynamic-structures} JSON データが半構造化されており、キーが動的に追加されたり、複数の型を取りうる場合は、[`JSON`](/sql-reference/data-types/newjson) 型を推奨します。 @@ -491,7 +491,7 @@ JSON データが半構造化されており、キーが動的に追加された - **カラム爆発のリスク回避** - JSON 型はサブカラムを専用カラムとして保存することで潜在的に数千のカラムまでスケールできますが、その結果として過剰な数のカラムファイルが作成され、パフォーマンスに悪影響を与える「カラムファイル爆発」が発生する可能性があります。これを軽減するために、JSON で使用される基盤の [Dynamic 型](/sql-reference/data-types/dynamic) では、[`max_dynamic_paths`](/sql-reference/data-types/newjson#reading-json-paths-as-sub-columns) パラメータが提供されており、個別のカラムファイルとして保存される一意なパスの数を制限します。しきい値に達すると、それ以降のパスはコンパクトなエンコード形式を用いて共有カラムファイル内に保存され、柔軟なデータのインジェストをサポートしつつ、パフォーマンスとストレージ効率を維持します。ただし、この共有カラムファイルへのアクセスは、専用カラムほど高速ではありません。なお、JSON カラムは [type hints](#using-type-hints-and-skipping-paths) と併用できます。「ヒント付き」のカラムは、専用カラムと同等のパフォーマンスを提供します。 - **パスおよび型のインスペクションの容易さ** - JSON 型は、推論された型やパスを判定するための [インスペクション関数](/sql-reference/data-types/newjson#introspection-functions) をサポートしていますが、`DESCRIBE` などを用いた静的な構造のほうが、確認・探索がより簡単な場合があります。 -### 単一の JSON カラム +### 単一の JSON カラム {#single-json-column} この手法はプロトタイピングやデータエンジニアリングのタスクに有用です。本番環境では、必要な場合に限り、動的なサブ構造に対してのみ `JSON` を使用することを推奨します。 @@ -667,7 +667,7 @@ FROM people ``` -### 対象の JSON 列 +### 対象の JSON 列 {#targeted-json-column} プロトタイピングやデータエンジニアリング上の課題に対処するうえでは有用ですが、本番環境では可能な限り明示的なスキーマを使用することを推奨します。 @@ -767,7 +767,7 @@ FORMAT PrettyJsonEachRow ``` -### 型ヒントの使用とパスのスキップ +### 型ヒントの使用とパスのスキップ {#using-type-hints-and-skipping-paths} 型ヒントを使うと、パスとそのサブカラムの型を指定できるため、不必要な型推論を防げます。次の例では、JSON カラム `company.labels` 内の JSON キー `dissolved`、`employees`、`founded` に対して型を指定しています。 @@ -934,7 +934,7 @@ FORMAT PrettyJSONEachRow その結果、大部分が一貫していながらも JSON の柔軟性が有用なデータセットに対して、型ヒントはスキーマやデータ取り込みパイプラインを再構成することなくパフォーマンスを維持する便利な手段となります。 -### 動的パスの設定 +### 動的パスの設定 {#configuring-dynamic-paths} ClickHouse は各 JSON パスを純粋なカラム型レイアウトにおけるサブカラムとして保存し、圧縮、SIMD による高速処理、最小限のディスク I/O といった、従来のカラムと同様のパフォーマンス上の利点を実現します。JSON データ内のそれぞれの一意なパスと型の組み合わせは、それぞれ専用のカラムファイルとしてディスク上に保存されます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md index f84c3b1f965..7556e62ded8 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md @@ -10,7 +10,7 @@ keywords: ['parquet', 'columnar format', 'data format', 'compression', 'apache p -# ClickHouse での Parquet の利用 +# ClickHouse での Parquet の利用 {#working-with-parquet-in-clickhouse} Parquet は、データをカラム指向で効率的に保存できるファイル形式です。 ClickHouse は、Parquet ファイルの読み取りと書き込みの両方をサポートします。 @@ -24,7 +24,7 @@ ClickHouse は、Parquet ファイルの読み取りと書き込みの両方を -## Parquet からのインポート +## Parquet からのインポート {#importing-from-parquet} データをロードする前に、[file()](/sql-reference/functions/files.md/#file) 関数を使用して、[Parquet 形式のサンプルファイル](assets/data.parquet) の構造を確認できます。 @@ -64,7 +64,7 @@ LIMIT 3; ::: -## 既存テーブルへのインポート +## 既存テーブルへのインポート {#importing-to-an-existing-table} Parquet データをインポートするためのテーブルを作成します。 @@ -103,7 +103,7 @@ LIMIT 5; ClickHouse が `date` 列の Parquet の文字列データを自動的に `Date` 型へ変換していることに注目してください。これは、ClickHouse がターゲットテーブルの列の型に基づいて自動的に型変換を行うためです。 -## ローカルファイルをリモートサーバーに挿入する +## ローカルファイルをリモートサーバーに挿入する {#inserting-a-local-file-to-remote-server} ローカルの Parquet ファイルをリモートの ClickHouse サーバーに挿入したい場合は、次のようにファイルの内容を `clickhouse-client` にパイプすることで行えます。 @@ -112,7 +112,7 @@ clickhouse client -q "INSERT INTO sometable FORMAT Parquet" < data.parquet ``` -## Parquet ファイルから新しいテーブルを作成する +## Parquet ファイルから新しいテーブルを作成する {#creating-new-tables-from-parquet-files} ClickHouse は Parquet ファイルのスキーマを読み取ることができるため、テーブルを動的に作成できます。 @@ -141,7 +141,7 @@ DESCRIBE TABLE imported_from_parquet; デフォルトでは、ClickHouse はカラム名やデータ型、値に対して厳格に動作します。ただし、状況によっては、インポート時に存在しないカラムやサポートされていない値をスキップすることができます。これは [Parquet 設定](/interfaces/formats/Parquet#format-settings) で制御できます。 -## Parquet 形式へのエクスポート +## Parquet 形式へのエクスポート {#exporting-to-parquet-format} :::tip ClickHouse Cloud で `INTO OUTFILE` を使用する場合、ファイルが書き込まれるマシン上で `clickhouse client` を使ってコマンドを実行する必要があります。 @@ -159,7 +159,7 @@ FORMAT Parquet これにより、作業ディレクトリに `export.parquet` ファイルが作成されます。 -## ClickHouse と Parquet のデータ型 +## ClickHouse と Parquet のデータ型 {#clickhouse-and-parquet-data-types} ClickHouse と Parquet のデータ型はほとんど同一ですが、[いくつか違いがあります](/interfaces/formats/Parquet#data-types-matching-parquet)。たとえば、ClickHouse は `DateTime` 型を Parquet 側の `int64` としてエクスポートします。その後それを ClickHouse にインポートし直すと、([time.parquet ファイル](assets/time.parquet) のように)数値として表示されます: diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md index 5aa6cfa68b3..13c61727e27 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md @@ -9,13 +9,13 @@ keywords: ['SQL 形式', 'データエクスポート', 'データインポー -# ClickHouse での SQL データの挿入とダンプ +# ClickHouse での SQL データの挿入とダンプ {#inserting-and-dumping-sql-data-in-clickhouse} ClickHouse は、さまざまな方法で OLTP データベース基盤に容易に統合できます。その 1 つの方法として、SQL ダンプを使用して他のデータベースと ClickHouse 間でデータを転送することが挙げられます。 -## SQL ダンプの作成 +## SQL ダンプの作成 {#creating-sql-dumps} [SQLInsert](/interfaces/formats/SQLInsert) を使用すると、データを SQL 形式でダンプできます。ClickHouse はデータを `INSERT INTO <table name> VALUES(...` 形式で出力し、テーブル名として [`output_format_sql_insert_table_name`](/operations/settings/settings-formats.md/#output_format_sql_insert_table_name) 設定オプションを使用します。 @@ -46,7 +46,7 @@ mysql some_db < dump.sql SET output_format_sql_insert_max_batch_size = 1000; ``` -### 値の集合のエクスポート +### 値の集合のエクスポート {#exporting-a-set-of-values} ClickHouse には [Values](/interfaces/formats/Values) フォーマットがあり、SQL の INSERT 文に似ていますが、`INSERT INTO table VALUES` の部分を省き、値の集合だけを返します。 @@ -59,7 +59,7 @@ SELECT * FROM some_data LIMIT 3 FORMAT Values ``` -## SQLダンプからのデータ挿入 +## SQLダンプからのデータ挿入 {#inserting-data-from-sql-dumps} SQL ダンプを読み込むには、[MySQLDump](/interfaces/formats/MySQLDump) を使用します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md index c02fb8638d9..50a512ac8e0 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md @@ -10,13 +10,13 @@ keywords: ['データ形式', 'テンプレート', '正規表現', 'カスタ -# ClickHouse で Templates と Regex を使用してカスタムテキストデータをインポートおよびエクスポートする +# ClickHouse で Templates と Regex を使用してカスタムテキストデータをインポートおよびエクスポートする {#importing-and-exporting-custom-text-data-using-templates-and-regex-in-clickhouse} 独自テキスト形式のデータ、たとえば非標準的なフォーマット、不正な JSON、壊れた CSV などを扱わなければならないことはよくあります。CSV や JSON といった標準パーサーでは、こうしたすべてのケースを扱えるとは限りません。しかし ClickHouse には強力な Template フォーマットと Regex フォーマットが用意されており、これらのケースにも対応できます。 -## テンプレートに基づくインポート +## テンプレートに基づくインポート {#importing-based-on-a-template} 次の[ログファイル](assets/error.log)からデータをインポートしたいとします。 @@ -88,7 +88,7 @@ GROUP BY request └──────────────────────────────────────────────────┴─────────┘ ``` -### 空白のスキップ +### 空白のスキップ {#skipping-whitespaces} テンプレート内の区切り文字同士の間にある空白を無視できるようにするには、[TemplateIgnoreSpaces](/interfaces/formats/TemplateIgnoreSpaces) の利用を検討してください。 @@ -98,7 +98,7 @@ TemplateIgnoreSpaces --> "p1:${p1:CSV}, p2:${p2:CSV}" ``` -## テンプレートを使用したデータのエクスポート +## テンプレートを使用したデータのエクスポート {#exporting-data-using-templates} テンプレートを使用して任意のテキスト形式でデータをエクスポートすることもできます。この場合は、次の 2 つのファイルを作成する必要があります。 @@ -142,7 +142,7 @@ FORMAT Template SETTINGS format_template_resultset = 'output.results', --- 1000行を0.001380604秒で読み取り --- ``` -### HTML ファイルへのエクスポート +### HTML ファイルへのエクスポート {#exporting-to-html-files} テンプレートベースの結果は、[`INTO OUTFILE`](/sql-reference/statements/select/into-outfile.md) 句を使用してファイルにエクスポートすることもできます。次の [resultset](assets/html.results) および [row](assets/html.row) のフォーマットに基づいて HTML ファイルを生成してみましょう。 @@ -157,7 +157,7 @@ SETTINGS format_template_resultset = 'html.results', format_template_row = 'html.row' ``` -### XML へのエクスポート +### XML へのエクスポート {#exporting-to-xml} Template フォーマットは、XML を含むあらゆるテキスト形式ファイルを生成するために使用できます。適切なテンプレートを用意してエクスポートを実行してください。 @@ -203,7 +203,7 @@ FORMAT XML ``` -## 正規表現に基づくデータのインポート +## 正規表現に基づくデータのインポート {#importing-data-based-on-regular-expressions} [Regexp](/interfaces/formats/Regexp) フォーマットは、入力データをより複雑な方法で解析する必要がある、高度なユースケースに対応します。ここでは [error.log](assets/error.log) のサンプルファイルを解析し、今回はファイル名とプロトコルも抽出して、それぞれ別のカラムに保存します。まず、そのための新しいテーブルを準備します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md index 69351d3e176..d5e5dbc90fc 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md @@ -6,7 +6,7 @@ description: 'データインジェストセクション用ランディングペ doc_type: 'landing-page' --- -# データインジェスト +# データインジェスト {#data-ingestion} ClickHouse は、データ統合および変換のために数多くのソリューションと連携しています。 詳しくは、以下のページを参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md index 27287a524b6..65e9ba1df17 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md @@ -6,7 +6,7 @@ title: 'データソース' doc_type: 'landing-page' --- -# データソース +# データソース {#data-sources} ClickHouse を使用すると、さまざまなソースからデータベースにデータを簡単に取り込むことができます。 詳細については、以下のページを参照してください。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md index b3d6b9c5914..9c6b803dac7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md @@ -17,7 +17,7 @@ import dynamodb_map_columns from '@site/static/images/integrations/data-ingestio import Image from '@theme/IdealImage'; -# DynamoDB から ClickHouse への CDC +# DynamoDB から ClickHouse への CDC {#cdc-from-dynamodb-to-clickhouse} @@ -50,9 +50,9 @@ import Image from '@theme/IdealImage'; -## 3. スナップショットを ClickHouse に読み込む +## 3. スナップショットを ClickHouse に読み込む {#3-load-the-snapshot-into-clickhouse} -### 必要なテーブルを作成する +### 必要なテーブルを作成する {#create-necessary-tables} DynamoDB からのスナップショットデータはおおよそ次のようになります: @@ -115,7 +115,7 @@ ORDER BY id; * テーブルはパーティションキーをソートキー(`ORDER BY` で指定)として使用する必要があります。 * 同じソートキーを持つ行は、`version` カラムに基づいて重複排除されます。 -### スナップショット用 ClickPipe の作成 +### スナップショット用 ClickPipe の作成 {#create-the-snapshot-clickpipe} ここまでで、S3 から ClickHouse へスナップショットデータをロードするための ClickPipe を作成できます。S3 ClickPipe ガイドは[こちら](/integrations/clickpipes/object-storage)に従いますが、次の設定を使用してください。 @@ -146,7 +146,7 @@ https://{bucket}.s3.amazonaws.com/{prefix}/AWSDynamoDB/{export-id}/data/* -## 5. クリーンアップ(オプション) +## 5. クリーンアップ(オプション) {#5-cleanup-optional} スナップショット ClickPipe の処理が完了したら、スナップショットテーブルとマテリアライズドビューを削除できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md index c3ee1ce5d84..f585ff40b2a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md @@ -16,7 +16,7 @@ import Jdbc02 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-02 import Jdbc03 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-03.png'; -# JDBC を使用して ClickHouse を外部データソースに接続する +# JDBC を使用して ClickHouse を外部データソースに接続する {#connecting-clickhouse-to-external-data-sources-with-jdbc} :::note JDBC を使用するには ClickHouse JDBC Bridge が必要なため、ローカルマシン上で `clickhouse-local` を使用して、データベースから ClickHouse Cloud へデータをストリーミングする必要があります。詳細については、ドキュメントの **Migrate** セクションにある [**Using clickhouse-local**](/cloud/migration/clickhouse-local#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge) ページを参照してください。 @@ -44,7 +44,7 @@ ClickHouse JDBC Bridge は、読み取りと書き込みの両方に使用でき -## ClickHouse JDBC Bridge をローカルにインストールする +## ClickHouse JDBC Bridge をローカルにインストールする {#install-the-clickhouse-jdbc-bridge-locally} ClickHouse JDBC Bridge を使用する最も簡単な方法は、ClickHouse が動作しているのと同じホスト上にインストールして実行することです。ClickHouse JDBC Bridge をローカルにデプロイした構成図 @@ -107,7 +107,7 @@ ClickHouse JDBC Bridge をフォアグラウンドモードで起動しました ::: -## ClickHouse 内から JDBC 接続を使用する +## ClickHouse 内から JDBC 接続を使用する {#use-the-jdbc-connection-from-within-clickhouse} ClickHouse は、[jdbc テーブル関数](/sql-reference/table-functions/jdbc.md) または [JDBC テーブルエンジン](/engines/table-engines/integrations/jdbc.md) を使用して、MySQL のデータにアクセスできます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md index 6a532a86cd2..42c9395c3e7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md @@ -10,27 +10,24 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; - -# ClickHouse と PostgreSQL の接続 +# ClickHouse と PostgreSQL の接続 {#connecting-clickhouse-to-postgresql} このページでは、PostgreSQL と ClickHouse を統合するための次のオプションについて説明します。 -- PostgreSQL のテーブルから読み取るための `PostgreSQL` テーブルエンジンの利用 -- PostgreSQL 内のデータベースと ClickHouse 内のデータベースを同期するための、実験的な `MaterializedPostgreSQL` データベースエンジンの利用 +* PostgreSQL のテーブルから読み取るための `PostgreSQL` テーブルエンジンの利用 +* PostgreSQL 内のデータベースと ClickHouse 内のデータベースを同期するための、実験的な `MaterializedPostgreSQL` データベースエンジンの利用 :::tip [ClickPipes](/integrations/clickpipes/postgres) は、PeerDB を基盤とした ClickHouse Cloud 向けのマネージド連携サービスであり、こちらの利用を推奨します。 また、代替手段として [PeerDB](https://github.com/PeerDB-io/peerdb) は、セルフホスト型の ClickHouse および ClickHouse Cloud 双方への PostgreSQL データベースレプリケーション向けに特化して設計された、オープンソースの CDC(変更データキャプチャ)ツールとして利用できます。 ::: - - -## PostgreSQL テーブルエンジンの使用 +## PostgreSQL テーブルエンジンの使用 {#using-the-postgresql-table-engine} `PostgreSQL` テーブルエンジンを使用すると、リモートの PostgreSQL サーバー上に保存されているデータに対して、ClickHouse から **SELECT** および **INSERT** 操作を行うことができます。 この記事では、1 つのテーブルを使った基本的な連携方法を説明します。 -### 1. PostgreSQL のセットアップ +### 1. PostgreSQL のセットアップ {#1-setting-up-postgresql} 1. `postgresql.conf` で、PostgreSQL がネットワークインターフェイスで待ち受けできるようにするため、次の設定を追加します。 @@ -93,7 +90,7 @@ ClickHouse Cloud 上でこの機能を利用している場合、ClickHouse Clou 外向きトラフィックの詳細については、ClickHouse の [Cloud Endpoints API](/cloud/get-started/query-endpoints) を確認してください。 ::: -### 2. ClickHouse にテーブルを定義する +### 2. ClickHouse にテーブルを定義する {#2-define-a-table-in-clickhouse} 1. `clickhouse-client` にログインします: @@ -131,7 +128,7 @@ ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'cli 利用可能なパラメータの完全な一覧については、[PostgreSQL table engine](/engines/table-engines/integrations/postgresql) のドキュメントページを参照してください。 ::: -### 3 統合をテストする +### 3 統合をテストする {#3-test-the-integration} 1. ClickHouse で初期の行を表示します: @@ -166,7 +163,6 @@ VALUES SELECT * FROM db_in_ch.table1 ``` - レスポンスは次のとおりです。 ```response @@ -208,8 +204,7 @@ id | column1 この例では、`PostrgeSQL` テーブルエンジンを使用して、PostgreSQL と ClickHouse の間の基本的な連携方法を示しました。 スキーマの指定、特定のカラムのみを返す設定、複数レプリカへの接続など、さらに多くの機能については、[PostgreSQL テーブルエンジンのドキュメントページ](/engines/table-engines/integrations/postgresql) を参照してください。また、ブログ記事 [ClickHouse and PostgreSQL - a match made in data heaven - part 1](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres) もあわせてご覧ください。 - -## MaterializedPostgreSQL データベースエンジンの使用 +## MaterializedPostgreSQL データベースエンジンの使用 {#using-the-materializedpostgresql-database-engine} @@ -220,7 +215,7 @@ PostgreSQL データベースエンジンは、PostgreSQL のレプリケーシ ***以下の手順では、PostgreSQL CLI (`psql`) と ClickHouse CLI (`clickhouse-client`) を使用します。PostgreSQL サーバーは Linux 上にインストールされています。以下の内容は、PostgreSQL データベースを新規にテストインストールした場合の最小設定です。*** -### 1. PostgreSQL 側の設定 +### 1. PostgreSQL 側の設定 {#1-in-postgresql} 1. `postgresql.conf` で、最低限の listen 設定、レプリケーション用の `wal_level`、レプリケーションスロットを設定します: @@ -275,7 +270,6 @@ VALUES 7. レプリケーション用に、新しいユーザーが新しいデータベースへ接続できるよう PostgreSQL を設定します。以下は `pg_hba.conf` ファイルに追加する最小限のエントリです。 - ```text # TYPE DATABASE USER ADDRESS METHOD host db1 clickhouse_user 192.168.1.0/24 password @@ -349,7 +343,7 @@ Query id: df2381ac-4e30-4535-b22e-8be3894aaafc └────┴─────────┘ ``` -### 3. 基本的なレプリケーションをテストする +### 3. 基本的なレプリケーションをテストする {#2-in-clickhouse} 1. PostgreSQL に新しい行を追加します: @@ -385,7 +379,7 @@ Query id: b0729816-3917-44d3-8d1a-fed912fb59ce └────┴─────────┘ ``` -### 4. まとめ +### 4. まとめ {#3-test-basic-replication} このインテグレーションガイドでは、テーブルを含むデータベースをレプリケートするためのシンプルな例を扱いましたが、データベース全体をレプリケートしたり、既存のレプリケーションに新しいテーブルやスキーマを追加したりするなど、より高度なオプションも存在します。このレプリケーションでは DDL コマンドはサポートされませんが、エンジンを設定することで変更を検出し、スキーマ変更などの構造的な変更が行われた際にテーブルを再読み込みさせることができます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md index ff672310a6c..65c2460e3fb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md @@ -40,7 +40,7 @@ import clickhouse_result from '@site/static/images/integrations/data-ingestion/e import Image from '@theme/IdealImage'; -# EMQX と ClickHouse の統合 +# EMQX と ClickHouse の統合 {#integrating-emqx-with-clickhouse} @@ -63,7 +63,7 @@ import Image from '@theme/IdealImage'; -## ClickHouse Cloud サービスを取得する +## ClickHouse Cloud サービスを取得する {#get-your-clickhouse-cloudservice} このセットアップでは、ClickHouse インスタンスを N. Virginia (us-east-1) の AWS 上にデプロイし、同じリージョンに EMQX Cloud インスタンスもデプロイしました。 @@ -153,7 +153,7 @@ Overview ページに戻り、ページの一番下までスクロールする -## EMQX Cloud と ClickHouse Cloud の統合 +## EMQX Cloud と ClickHouse Cloud の統合 {#integration-emqx-cloud-with-clickhouse-cloud} [EMQX Cloud Data Integrations](https://docs.emqx.com/en/cloud/latest/rule_engine/introduction.html#general-flow) 機能は、EMQX のメッセージフローおよびデバイスイベントを処理し応答するためのルールを構成するために使用されます。Data Integrations は、明確かつ柔軟な「設定可能な」アーキテクチャソリューションを提供するだけでなく、開発プロセスを簡素化し、ユーザビリティを向上させ、業務システムと EMQX Cloud 間の結合度を低減します。また、EMQX Cloud 固有機能のカスタマイズに対して優れた基盤インフラストラクチャも提供します。 @@ -163,7 +163,7 @@ EMQX Cloud は、代表的なデータシステム向けに 30 を超えるネ EMQX Cloud ClickHouse Data Integration コネクタの詳細 -### ClickHouse リソースの作成 +### ClickHouse リソースの作成 {#create-clickhouse-resource} 左側メニューの「Data Integrations」をクリックし、「View All Resources」をクリックします。Data Persistence セクションで ClickHouse を見つけるか、ClickHouse を検索します。 @@ -177,7 +177,7 @@ ClickHouse カードをクリックして新しいリソースを作成します 接続情報を入力する EMQX Cloud ClickHouse Resource 設定フォーム -### 新しいルールの作成 +### 新しいルールの作成 {#create-a-new-rule} リソース作成時にポップアップが表示され、「New」をクリックするとルール作成ページに移動します。 @@ -212,7 +212,7 @@ SQL のテスト機能を使ってテストを実行し、結果を確認でき 次に「NEXT」ボタンをクリックします。このステップでは、EMQX Cloud に対して、整形されたデータを ClickHouse データベースにどのように挿入するかを指定します。 -### レスポンスアクションを追加する +### レスポンスアクションを追加する {#add-a-response-action} リソースが 1 つだけの場合は、「Resource」と「Action Type」を変更する必要はありません。 SQL テンプレートを設定するだけで構いません。このチュートリアルで使用している例は次のとおりです。 @@ -225,7 +225,7 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ これは ClickHouse にデータを挿入するためのテンプレートです。ここで変数がどのように利用されているか確認できます。 -### ルールの詳細を表示 +### ルールの詳細を表示 {#view-rules-details} 「Confirm」と「View Details」をクリックします。これで、すべての設定が完了しているはずです。ルール詳細ページから、データ統合が正しく動作していることを確認できます。 @@ -234,13 +234,13 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ `temp_hum/emqx` トピックに送信されたすべての MQTT メッセージは、ClickHouse Cloud データベースに永続化されます。 -## ClickHouse へのデータ保存 +## ClickHouse へのデータ保存 {#saving-data-into-clickhouse} 温度と湿度のデータをシミュレートし、そのデータを MQTT X を介して EMQX Cloud に送信します。その後、EMQX Cloud Data Integrations を使用してデータを ClickHouse Cloud に保存します。 EMQX Cloud から ClickHouse へのワークフローを示すデータフロー図 -### MQTT メッセージを EMQX Cloud にパブリッシュする +### MQTT メッセージを EMQX Cloud にパブリッシュする {#publish-mqtt-messages-to-emqx-cloud} メッセージのパブリッシュには、任意の MQTT クライアントまたは SDK を使用できます。本チュートリアルでは、EMQ が提供するユーザーフレンドリーな MQTT クライアントアプリケーションである [MQTT X](https://mqttx.app/) を使用します。 @@ -274,13 +274,13 @@ EMQX Cloud に送信されたデータは、ルールエンジンによって処 MQTTX Publish MQTT Messages インターフェースにおけるメッセージ作成画面 -### ルール監視を確認する +### ルール監視を確認する {#view-rules-monitoring} ルール監視を開き、成功数が 1 件増えていることを確認します。 EMQX Cloud Rule Monitoring ダッシュボードにおけるメッセージ処理メトリクス -### 永続化されたデータを確認する +### 永続化されたデータを確認する {#check-the-data-persisted} ClickHouse Cloud 上のデータを確認します。理想的には、MQTTX を使って送信したデータは EMQX Cloud に送られ、ネイティブなデータ統合機能により ClickHouse Cloud のデータベースに永続化されます。 @@ -293,6 +293,6 @@ SELECT * FROM emqx.temp_hum; ClickHouse のクエリ結果で永続化された IoT データを表示している画面 -### まとめ +### まとめ {#summary} コードを一行も書くことなく、MQTT データを EMQX Cloud から ClickHouse Cloud へ送れるようになりました。EMQX Cloud と ClickHouse Cloud を使えば、インフラの運用・管理は不要になり、ClickHouse Cloud に安全に保存されたデータを活用して IoT アプリケーションの開発に専念できます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md index 6ad9700b285..116e929b94e 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md @@ -25,7 +25,7 @@ import airbyte09 from '@site/static/images/integrations/data-ingestion/etl-tools import PartnerBadge from '@theme/badges/PartnerBadge'; -# AirbyteをClickHouseに接続する +# AirbyteをClickHouseに接続する {#connect-airbyte-to-clickhouse} @@ -70,7 +70,7 @@ ClickHouse用のAirbyteソースおよびデスティネーションは現在ア -## ClickHouse を送信先として追加する +## ClickHouse を送信先として追加する {#2-add-clickhouse-as-a-destination} このセクションでは、ClickHouse インスタンスを送信先として追加する方法を説明します。 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..722b08eeb8c 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 @@ -13,7 +13,7 @@ keywords: ['apache beam', 'ストリーム処理', 'バッチ処理', 'JDBC コ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Apache Beam と ClickHouse の統合 +# Apache Beam と ClickHouse の統合 {#integrating-apache-beam-and-clickhouse} @@ -29,9 +29,9 @@ Apache Beam と ClickHouse を統合するために必要なインテグレー -## Apache Beam ClickHouse パッケージのセットアップ +## Apache Beam ClickHouse パッケージのセットアップ {#setup-of-the-apache-beam-clickhouse-package} -### パッケージのインストール +### パッケージのインストール {#package-installation} ご利用のパッケージ管理フレームワークに、次の依存関係を追加します: @@ -50,7 +50,7 @@ Apache Beam と ClickHouse を統合するために必要なインテグレー アーティファクトは [公式 Maven リポジトリ](https://mvnrepository.com/artifact/org.apache.beam/beam-sdks-java-io-clickhouse)から入手できます。 -### コード例 +### コード例 {#code-example} 次の例では、`input.csv` という名前の CSV ファイルを `PCollection` として読み込み、定義済みのスキーマを使用して `Row` オブジェクトに変換し、`ClickHouseIO` を使用してローカルの ClickHouse インスタンスに挿入します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md index c8c9a685083..b0e1ded81f7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md @@ -21,7 +21,7 @@ import bp_ck_9 from '@site/static/images/integrations/data-ingestion/etl-tools/b import PartnerBadge from '@theme/badges/PartnerBadge'; -# BladePipe を ClickHouse に接続する +# BladePipe を ClickHouse に接続する {#connect-bladepipe-to-clickhouse} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md index 0c8a16f8016..afdb75efd5a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md @@ -12,7 +12,7 @@ import TOCInline from '@theme/TOCInline'; import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# 機能と設定 +# 機能と設定 {#features-and-configurations} @@ -22,7 +22,7 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## Profile.yml の設定 +## Profile.yml の設定 {#profile-yml-configurations} dbt から ClickHouse に接続するには、`profiles.yml` ファイルに[プロファイル](https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles)を追加する必要があります。ClickHouse のプロファイルは、次の構文に従います。 @@ -65,14 +65,14 @@ your_profile_name: compress_block_size: [1048576] # 圧縮有効時の圧縮ブロックサイズ ``` -### スキーマとデータベースの違い +### スキーマとデータベースの違い {#schema-vs-database} dbt モデルのリレーション識別子 `database.schema.table` は ClickHouse では互換性がありません。これは、ClickHouse が `schema` をサポートしていないためです。 そのため、`schema.table` という簡略化したアプローチを使用します。この場合の `schema` は ClickHouse のデータベースを意味します。 `default` データベースの使用は推奨されません。 -### SET ステートメントに関する警告 +### SET ステートメントに関する警告 {#set-statement-warning} 多くの環境では、すべての dbt クエリに対して ClickHouse の設定を永続させる目的で SET ステートメントを使用する方法は信頼性が低く、 予期しない失敗を引き起こす可能性があります。これは特に、ロードバランサーを介して複数ノードにクエリを分散する HTTP 接続 @@ -80,7 +80,7 @@ dbt モデルのリレーション識別子 `database.schema.table` は ClickHou したがって、事前フックの "SET" ステートメントに依存するのではなく、ベストプラクティスとして、dbt プロファイルの "custom_settings" プロパティで必要な ClickHouse の設定を構成することを推奨します。 -### `quote_columns` の設定 +### `quote_columns` の設定 {#setting-quote_columns} 警告が出ないようにするため、`dbt_project.yml` 内で `quote_columns` に値を明示的に設定してください。詳細については、[quote_columns に関するドキュメント](https://docs.getdbt.com/reference/resource-configs/quote_columns) を参照してください。 @@ -90,14 +90,14 @@ seeds: +quote_columns: false # CSV列ヘッダーにスペースが含まれている場合は `true` に設定 ``` -### ClickHouse クラスターについて +### ClickHouse クラスターについて {#about-the-clickhouse-cluster} ClickHouse クラスターを使用する場合、次の 2 点を考慮する必要があります。 * `cluster` 設定を行うこと * 特に複数の `threads` を使用している場合に、書き込み直後の読み取り一貫性を確保すること -#### クラスター設定 +#### クラスター設定 {#cluster-setting} プロファイル内の `cluster` 設定により、dbt-clickhouse は ClickHouse クラスターを対象に実行されます。プロファイルで `cluster` が設定されている場合、**すべてのモデルはデフォルトで `ON CLUSTER` 句付きで作成されます**(**Replicated** エンジンを使用するものを除く)。これには以下が含まれます。 @@ -126,7 +126,7 @@ non-replicated エンジンを使用する table および incremental マテリ モデルが `cluster` 設定なしで作成されている場合、dbt-clickhouse はその状況を検知し、そのモデルに対するすべての DDL/DML を `on cluster` 句なしで実行します。 -#### 書き込み直後の読み取り一貫性 +#### 書き込み直後の読み取り一貫性 {#read-after-write-consistency} dbt は read-after-insert 一貫性モデルに依存しています。これは、すべての操作が同じレプリカに送られることを保証できない場合、複数レプリカを持つ ClickHouse クラスターとは互換性がありません。日常的な dbt の利用においては問題が発生しないこともありますが、この保証を満たすために、クラスターの種類に応じた戦略がいくつかあります。 @@ -134,9 +134,9 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは * 自前でホストしているクラスターを使用している場合は、すべての dbt リクエストが同じ ClickHouse レプリカに送信されるようにしてください。その上にロードバランサーがある場合は、常に同じレプリカに到達できるように、`replica aware routing` / `sticky sessions` メカニズムの利用を検討してください。ClickHouse Cloud 以外のクラスターで `select_sequential_consistency = 1` 設定を追加することは[推奨されません](https://clickhouse.com/docs/operations/settings/settings#select_sequential_consistency)。 -## 機能に関する一般情報 +## 機能に関する一般情報 {#general-information-about-features} -### テーブルの一般的な設定 +### テーブルの一般的な設定 {#general-table-configurations} | Option | Description | Default if any | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | @@ -154,7 +154,7 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは | definer | `sql_security` に `definer` を設定した場合、`definer` 句で既存のユーザーまたは `CURRENT_USER` を指定する必要があります。 | | | projections | 作成する[プロジェクション](/data-modeling/projections)の一覧。[プロジェクションについて](#projections)を参照してください。 | | -#### データスキッピングインデックスについて +#### データスキッピングインデックスについて {#data-skipping-indexes} データスキッピングインデックスは `table` マテリアライゼーションでのみ利用可能です。テーブルにデータスキッピングインデックスの一覧を追加するには、`indexes` 設定を使用します。 @@ -168,7 +168,7 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは ) }} ``` -#### プロジェクションについて +#### プロジェクションについて {#projections} `projections` 設定を使用して、`table` および `distributed_table` マテリアライゼーションに [プロジェクション](/data-modeling/projections) を追加できます。 @@ -186,7 +186,7 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは **注記**: 分散テーブルでは、プロジェクションは分散プロキシテーブルではなく `_local` テーブルに適用されます。 -### サポートされているテーブルエンジン +### サポートされているテーブルエンジン {#supported-table-engines} | 種類 | 詳細 | | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -197,7 +197,7 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは | EmbeddedRocksDB | [https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb](https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb) | | Hive | [https://clickhouse.com/docs/en/engines/table-engines/integrations/hive](https://clickhouse.com/docs/en/engines/table-engines/integrations/hive) | -### 実験的サポート対象のテーブルエンジン +### 実験的サポート対象のテーブルエンジン {#experimental-supported-table-engines} | Type | Details | @@ -208,7 +208,7 @@ dbt は read-after-insert 一貫性モデルに依存しています。これは 上記のいずれかのエンジンを使った dbt から ClickHouse への接続で問題が発生した場合は、 [こちら](https://github.com/ClickHouse/dbt-clickhouse/issues) から issue を報告してください。 -### モデル設定についての注意事項 +### モデル設定についての注意事項 {#a-note-on-model-settings} ClickHouse には複数の種類やレベルの「settings(設定)」があります。上記のモデル設定では、そのうち 2 種類を 設定できます。`settings` は、`CREATE TABLE/VIEW` タイプの DDL 文で使用される `SETTINGS` @@ -218,7 +218,7 @@ ClickHouse の設定は数百個あり、「テーブル」設定と「ユーザ 必ずしも明確でないものもあります(ただし後者は一般的に `system.settings` テーブルで確認できます)。 一般的にはデフォルト値の使用が推奨され、これらのプロパティを利用する場合は、事前に十分な調査とテストを行ってください。 -### カラム設定 +### カラム設定 {#column-configuration} > ***NOTE:*** 以下のカラム設定オプションを利用するには、[model contracts](https://docs.getdbt.com/docs/collaborate/govern/model-contracts) が適用・強制されている必要があります。 @@ -227,7 +227,7 @@ ClickHouse の設定は数百個あり、「テーブル」設定と「ユーザ | codec | カラムの DDL 内で `CODEC()` に渡される引数からなる文字列。例: `codec: "Delta, ZSTD"` は `CODEC(Delta, ZSTD)` として解釈されます。 | | | ttl | カラムの DDL 内で TTL ルールを定義する [TTL(time-to-live)式](https://clickhouse.com/docs/guides/developer/ttl) からなる文字列。例: `ttl: ts + INTERVAL 1 DAY` は `TTL ts + INTERVAL 1 DAY` として解釈されます。 | | -#### スキーマ設定の例 +#### スキーマ設定の例 {#example-of-schema-configuration} ```yaml models: @@ -245,7 +245,7 @@ models: ttl: ts + INTERVAL 1 DAY ``` -#### 複合型の追加 +#### 複合型の追加 {#adding-complex-types} dbt は、モデルの定義に用いられた SQL を解析して、各カラムのデータ型を自動的に判定します。ただし、場合によってはこの処理では正確にデータ型を判定できず、コントラクトの `data_type` プロパティで指定された型と矛盾が生じることがあります。これに対処するため、モデルの SQL 内で `CAST()` 関数を使用して、意図した型を明示的に指定することを推奨します。例えば、次のようになります。 @@ -270,9 +270,9 @@ group by event_type ``` -## 機能 +## 機能 {#features} -### マテリアライゼーション: view +### マテリアライゼーション: view {#materialization-view} dbt モデルは [ClickHouse view](https://clickhouse.com/docs/en/sql-reference/table-functions/view/) として作成し、次の構文で設定できます。 @@ -291,7 +291,7 @@ models: {{ config(materialized = "view") }} ``` -### マテリアライゼーション: テーブル +### マテリアライゼーション: テーブル {#materialization-table} dbt モデルは [ClickHouse のテーブル](https://clickhouse.com/docs/en/operations/system-tables/tables/) として作成し、 次の構文で設定できます。 @@ -320,7 +320,7 @@ models: ) }} ``` -### マテリアライゼーション: incremental +### マテリアライゼーション: incremental {#materialization-incremental} テーブルモデルは、dbt が実行されるたびに再構築されます。これは、結果セットが大きい場合や変換が複雑な場合には、実行不可能であったり非常に高コストになることがあります。この課題に対処し、ビルド時間を短縮するために、dbt モデルをインクリメンタルな ClickHouse テーブルとして作成し、次の構文を用いて設定できます。 @@ -352,7 +352,7 @@ models: ) }} ``` -#### 設定 +#### 設定 {#configurations} このマテリアライゼーションタイプに特有の設定は以下のとおりです。 @@ -363,11 +363,11 @@ models: | `incremental_strategy` | インクリメンタルマテリアライゼーションに使用する戦略。`delete+insert`、`append`、`insert_overwrite`、`microbatch` がサポートされています。戦略の詳細については[こちら](/integrations/dbt/features-and-configurations#incremental-model-strategies)を参照してください。 | 任意 (デフォルト: 'default') | | `incremental_predicates` | インクリメンタルマテリアライゼーションに適用される追加条件(`delete+insert` 戦略にのみ適用されます) | 任意 | -#### インクリメンタルモデルの戦略 +#### インクリメンタルモデルの戦略 {#incremental-model-strategies} `dbt-clickhouse` は 3 つのインクリメンタルモデル戦略をサポートしています。 -##### デフォルト(レガシー)戦略 +##### デフォルト(レガシー)戦略 {#default-legacy-strategy} これまで ClickHouse は、非同期の「mutations」という形式による、限定的な更新および削除のサポートしか持っていませんでした。 期待される dbt の挙動をエミュレートするために、 @@ -377,7 +377,7 @@ dbt-clickhouse はデフォルトで、影響を受けない(削除されて 処理が完了する前に問題が発生した場合でも元のリレーションを保持する唯一の戦略ですが、 元のテーブルの完全なコピーを伴うため、非常にコストが高く、実行が遅くなる可能性があります。 -##### Delete+Insert 戦略 +##### Delete+Insert 戦略 {#delete-insert-strategy} ClickHouse はバージョン 22.8 で実験的機能として「lightweight deletes」を追加しました。Lightweight deletes は @@ -456,7 +456,7 @@ WHERE 句/フィルタで除外される場合には、最も高速なアプ この戦略を利用するには、モデル設定で `partition_by` を指定している必要があります。モデル設定におけるその他の戦略固有の パラメータはすべて無視されます。 -### Materialization: materialized_view (Experimental) +### Materialization: materialized_view (Experimental) {#materialized-view} `materialized_view` マテリアライゼーションは、既存の(ソース)テーブルを対象とした `SELECT` 文である必要があります。アダプターはモデル名を用いた ターゲットテーブルと、`_mv` という名前の ClickHouse MATERIALIZED VIEW を作成します。PostgreSQL と異なり、ClickHouse のマテリアライズドビューは @@ -489,7 +489,7 @@ select a,b,c from {{ source('raw', 'table_2') }} > 次の警告が表示されます: > `Warning - Table was detected with the same pattern as model name but was not found in this run. In case it is a renamed mv that was previously part of this model, drop it manually (!!!) ` -#### データのキャッチアップ +#### データのキャッチアップ {#data-catch-up} 現在、マテリアライズドビュー (MV) を作成する場合、MV 自体が作成される前に、ターゲットテーブルはまず履歴データで埋められます。 @@ -506,7 +506,7 @@ MV の作成時に履歴データをプリロードしたくない場合は、`c )}} ``` -#### リフレッシュ可能なマテリアライズドビュー +#### リフレッシュ可能なマテリアライズドビュー {#refreshable-materialized-views} [Refreshable Materialized View](https://clickhouse.com/docs/en/materialized-view/refreshable-materialized-view) を利用するには、 MV モデル内で必要に応じて次の設定を調整してください(これらの設定はすべて、 @@ -538,19 +538,19 @@ refreshable 設定オブジェクト内に記述します)。 }} ``` -#### 制限事項 +#### 制限事項 {#limitations} * 依存関係を持つリフレッシュ可能なマテリアライズドビュー (MV) を ClickHouse で作成する際、指定した依存関係が作成時点で存在しなくても、ClickHouse はエラーをスローしません。代わりに、そのリフレッシュ可能な MV は非アクティブ状態のままとなり、依存関係が満たされるまで更新処理やリフレッシュを開始しません。この挙動は設計によるものですが、必要な依存関係への対応が遅れた場合、データの利用可能性に遅延が生じる可能性があります。ユーザーは、リフレッシュ可能なマテリアライズドビューを作成する前に、すべての依存関係が正しく定義され、実在していることを確認するよう推奨されます。 * 現時点では、MV とその依存関係の間に実際の「dbt linkage」は存在しないため、作成順序は保証されません。 * リフレッシュ可能機能は、同一のターゲットモデルを指す複数の MV に対してはテストされていません。 -### マテリアライゼーション: dictionary(実験的) +### マテリアライゼーション: dictionary(実験的) {#materialization-dictionary} ClickHouse の dictionary 用マテリアライゼーションの実装例については、 [https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py](https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py) のテストを参照してください。 -### マテリアライゼーション: distributed_table(実験的) +### マテリアライゼーション: distributed_table(実験的) {#materialization-distributed-table} 分散テーブルは次の手順で作成されます: @@ -563,7 +563,7 @@ ClickHouse の dictionary 用マテリアライゼーションの実装例につ * 下流のインクリメンタルマテリアライゼーション処理が正しく実行されるようにするため、dbt-clickhouse のクエリには自動的に `insert_distributed_sync = 1` 設定が含まれるようになりました。これにより、一部の分散テーブルへの INSERT が想定より遅くなる可能性があります。 -#### 分散テーブルモデルの例 +#### 分散テーブルモデルの例 {#distributed-table-model-example} ```sql {{ @@ -579,7 +579,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### 生成されたマイグレーション +#### 生成されたマイグレーション {#distributed-table-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -599,7 +599,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### materialization: distributed_incremental (experimental) +### materialization: distributed_incremental (experimental) {#materialization-distributed-incremental} 分散テーブルと同様の考え方に基づくインクリメンタルモデルであり、主な難しさはすべてのインクリメンタル戦略を正しく処理することにあります。 @@ -610,7 +610,7 @@ CREATE TABLE db.table on cluster cluster ( 分散テーブルはデータを保持しないため、置き換えられるのはシャードテーブルのみです。 分散テーブルが再読み込みされるのは、`full_refresh` モードが有効になっている場合か、テーブル構造が変更された可能性がある場合のみです。 -#### 分散インクリメンタルモデルの例 +#### 分散インクリメンタルモデルの例 {#distributed-incremental-model-example} ```sql @@ -627,7 +627,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### 自動生成されたマイグレーション +#### 自動生成されたマイグレーション {#distributed-incremental-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -646,7 +646,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### スナップショット +### スナップショット {#snapshot} dbt のスナップショット機能を使用すると、可変なモデルに対する変更を時間の経過とともに記録できます。これにより、アナリストはモデルに対して、モデルの以前の状態を「過去にさかのぼって」確認できる時点指定クエリを実行できます。この機能は ClickHouse コネクタでサポートされており、次の構文で設定します。 @@ -665,7 +665,7 @@ dbt のスナップショット機能を使用すると、可変なモデルに 設定の詳細については、[snapshot configs](https://docs.getdbt.com/docs/build/snapshots#snapshot-configs) のリファレンスページを参照してください。 -### コントラクトと制約 +### コントラクトと制約 {#contracts-and-constraints} 厳密なカラム型コントラクトのみがサポートされます。たとえば、UInt32 カラム型のコントラクトがある場合、モデルが UInt64 もしくはその他の整数型を返すと失敗します。 @@ -673,9 +673,9 @@ ClickHouse は、テーブル/モデル全体に対する `CHECK` 制約*の およびカラムレベルの CHECK 制約はサポートされません。 (プライマリキー/ORDER BY キーについては ClickHouse のドキュメントを参照してください。) -### 追加の ClickHouse マクロ +### 追加の ClickHouse マクロ {#additional-clickhouse-macros} -#### モデルのマテリアライゼーション用ユーティリティマクロ +#### モデルのマテリアライゼーション用ユーティリティマクロ {#model-materialization-utility-macros} ClickHouse 固有のテーブルおよびビューを作成しやすくするために、次のマクロが含まれています。 @@ -692,7 +692,7 @@ ClickHouse 固有のテーブルおよびビューを作成しやすくするた * `ttl_config` -- `ttl` モデル設定プロパティを使用して、ClickHouse のテーブル TTL 式を割り当てます。デフォルトでは TTL は割り当てられません。 -#### s3Source ヘルパーマクロ +#### s3Source ヘルパーマクロ {#s3source-helper-macro} `s3source` マクロは、ClickHouse の S3 テーブル関数を使用して S3 から直接 ClickHouse データを選択する処理を簡素化します。 このマクロは、 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md index 2522503b2af..d9fbf9ae53c 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md @@ -20,7 +20,7 @@ import dbt_07 from '@site/static/images/integrations/data-ingestion/etl-tools/db import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# ガイド +# ガイド {#guides} @@ -39,13 +39,13 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## セットアップ +## セットアップ {#setup} 環境を準備するには、[dbt と ClickHouse アダプターのセットアップ](/integrations/dbt) セクションの手順に従ってください。 **重要: 以下は python 3.9 環境で検証されています。** -### ClickHouse の準備 +### ClickHouse の準備 {#prepare-clickhouse} dbt はリレーショナル性の高いデータのモデリングに優れています。例として、次のようなリレーショナルスキーマを持つ小さな IMDB データセットを用意しています。このデータセットは [relational dataset repository](https://relational.fit.cvut.cz/dataset/IMDb) に由来します。これは dbt で一般的に使われるスキーマと比べると単純ですが、扱いやすいサンプルになっています。 @@ -672,7 +672,7 @@ SELECT * FROM imdb_dbt.actor_summary ORDER BY num_movies DESC LIMIT 2; +------+-------------------+----------+------------------+------+---------+-------------------+ ``` -### 内部動作 +### 内部動作 {#internals} 上記の増分更新を実現するために実行されたステートメントは、ClickHouse のクエリログを参照することで確認できます。 @@ -694,7 +694,7 @@ AND event_time > subtractMinutes(now(), 15) ORDER BY event_time LIMIT 100; この戦略は、非常に大きなモデルでは問題が発生する可能性があります。詳細については [Limitations](/integrations/dbt#limitations) を参照してください。 -### Append Strategy(挿入のみモード) +### Append Strategy(挿入のみモード) {#append-strategy-inserts-only-mode} インクリメンタルモデルにおける大規模データセットの制約を回避するために、アダプターは dbt の設定パラメータ `incremental_strategy` を使用します。これは `append` に設定できます。これを設定すると、更新された行はターゲットテーブル(`imdb_dbt.actor_summary`)に直接挿入され、一時テーブルは作成されません。 注意: Append only モードでは、データが不変であるか、重複を許容できる必要があります。更新された行をサポートするインクリメンタルテーブルモデルが必要な場合、このモードは使用しないでください。 @@ -796,7 +796,7 @@ WHERE id > (SELECT max(id) FROM imdb_dbt.actor_summary) OR updated_at > (SELECT この実行では、新しい行だけが直接 `imdb_dbt.actor_summary` テーブルに追加され、テーブルの作成は行われません。 -### 削除および挿入モード(実験的) +### 削除および挿入モード(実験的) {#deleteinsert-mode-experimental} 歴史的には、ClickHouse は非同期の [Mutations](/sql-reference/statements/alter/index.md) としてのみ、更新および削除を限定的にサポートしていました。これらは非常に I/O 負荷が高く、一般的には避けるべきです。 @@ -821,7 +821,7 @@ This process is shown below: 軽量な delete インクリメンタル -### insert_overwrite mode (experimental) +### insert_overwrite mode (experimental) {#insert_overwrite-mode-experimental} Performs the following steps: @@ -840,7 +840,7 @@ This approach has the following advantages: insert overwrite インクリメンタル -## スナップショットの作成 +## スナップショットの作成 {#creating-a-snapshot} dbt のスナップショット機能を使用すると、更新可能なモデルに対する変更を時間の経過とともに記録できます。これにより、アナリストはモデルに対して任意時点のクエリを実行し、モデルの過去の状態を「遡って」確認できるようになります。これは、行が有効であった期間を記録する from 日付列および to 日付列を持つ [タイプ 2 のゆっくり変化する次元 (Slowly Changing Dimensions)](https://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2:_add_new_row) を使用して実現されます。この機能は ClickHouse アダプターでサポートされており、以下に示します。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md index 8439abea8c7..f228f238aba 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md @@ -95,9 +95,9 @@ ClickHouse 向けの[現在のアダプタ](https://github.com/silentsokolov/dbt -## dbt と ClickHouse アダプターのセットアップ +## dbt と ClickHouse アダプターのセットアップ {#setup-of-dbt-and-the-clickhouse-adapter} -### dbt-core と dbt-clickhouse のインストール +### dbt-core と dbt-clickhouse のインストール {#install-dbt-core-and-dbt-clickhouse} dbt のコマンドラインインターフェイス (CLI) のインストール方法にはいくつかの選択肢があり、詳細は[こちら](https://docs.getdbt.com/dbt-cli/install/overview)に記載されています。dbt と dbt-clickhouse の両方をインストールするには、`pip` の利用を推奨します。 @@ -105,7 +105,7 @@ dbt のコマンドラインインターフェイス (CLI) のインストール pip install dbt-core dbt-clickhouse ``` -### ClickHouse インスタンスへの接続情報を dbt に提供する +### ClickHouse インスタンスへの接続情報を dbt に提供する {#provide-dbt-with-the-connection-details-for-our-clickhouse-instance} `~/.dbt/profiles.yml` ファイル内で `clickhouse-service` プロファイルを構成し、`schema`、`host`、`port`、`user`、`password` プロパティを指定します。接続構成オプションの全一覧は、[機能と設定](/integrations/dbt/features-and-configurations) ページに記載されています。 @@ -125,7 +125,7 @@ clickhouse-service: secure: True # TLS(ネイティブプロトコル)またはHTTPS(httpプロトコル)を使用 ``` -### dbt プロジェクトを作成する +### dbt プロジェクトを作成する {#create-a-dbt-project} これで、このプロファイルを既存のいずれかのプロジェクトで使用することも、次の手順で新しいプロジェクトを作成することもできます。 @@ -139,17 +139,17 @@ dbt init project_name profile: 'clickhouse-service' ``` -### 接続テスト +### 接続テスト {#test-connection} CLI で `dbt debug` を実行し、dbt が ClickHouse に接続できるかどうかを確認します。レスポンスに `Connection test: [OK connection ok]` が含まれていることを確認し、接続が成功していることを確かめてください。 ClickHouse と dbt の連携方法の詳細については、[ガイドページ](/integrations/dbt/guides) を参照してください。 -### モデルのテストとデプロイ (CI/CD) +### モデルのテストとデプロイ (CI/CD) {#testing-and-deploying-your-models-ci-cd} dbt プロジェクトをテストおよびデプロイする方法は多数あります。dbt では、[ベストプラクティスとされるワークフロー](https://docs.getdbt.com/best-practices/best-practice-workflows#pro-tips-for-workflows) や [CI ジョブ](https://docs.getdbt.com/docs/deploy/ci-jobs) に関する提案を提供しています。ここではいくつかの戦略について説明しますが、これらの戦略はユースケースに合わせて大きく調整する必要がある場合がある点に注意してください。 -#### シンプルなデータテストおよびユニットテストによる CI/CD +#### シンプルなデータテストおよびユニットテストによる CI/CD {#ci-with-simple-data-tests-and-unit-tests} CI パイプラインを手軽に立ち上げる方法の 1 つは、ジョブ内で ClickHouse クラスターを起動し、そのクラスターに対してモデルを実行することです。モデルを実行する前に、このクラスターにデモデータを挿入できます。[seed](https://docs.getdbt.com/reference/commands/seed) を使って、本番データのサブセットをステージング環境に投入することもできます。 @@ -157,7 +157,7 @@ CI パイプラインを手軽に立ち上げる方法の 1 つは、ジョブ CD ステップは、本番の ClickHouse クラスターに対して `dbt build` を実行するだけのシンプルなものにできます。 -#### より包括的な CI/CD ステージ: 最新のデータを使用し、影響を受けたモデルのみをテスト +#### より包括的な CI/CD ステージ: 最新のデータを使用し、影響を受けたモデルのみをテスト {#more-complete-ci-stage} 一般的な戦略として、変更されたモデル (およびその上流・下流の依存関係) のみを再デプロイする [Slim CI](https://docs.getdbt.com/best-practices/best-practice-workflows#run-only-modified-models-to-test-changes-slim-ci) ジョブを利用する方法があります。このアプローチでは、本番実行の成果物 (例: [dbt manifest](https://docs.getdbt.com/reference/artifacts/manifest-json)) を利用して、プロジェクトの実行時間を短縮し、環境間でスキーマのずれが生じないようにします。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md index 6207100b4fe..c64f4515c65 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md @@ -10,7 +10,7 @@ doc_type: 'guide' import PartnerBadge from '@theme/badges/PartnerBadge'; -# dlt を ClickHouse に接続する +# dlt を ClickHouse に接続する {#connect-dlt-to-clickhouse} @@ -18,9 +18,9 @@ import PartnerBadge from '@theme/badges/PartnerBadge'; -## ClickHouse と併せて dlt をインストールする +## ClickHouse と併せて dlt をインストールする {#install-dlt-with-clickhouse} -### ClickHouse の依存関係付きで `dlt` ライブラリをインストールするには: +### ClickHouse の依存関係付きで `dlt` ライブラリをインストールするには: {#to-install-the-dlt-library-with-clickhouse-dependencies} ```bash pip install "dlt[clickhouse]" @@ -99,7 +99,7 @@ ClickHouseサーバーが`http_port`で指定されたポートでHTTP接続を ```bash -# tomlファイルの先頭、セクション開始前に記述してください。 +# tomlファイルの先頭、セクション開始前に記述してください。 {#keep-it-at-the-top-of-your-toml-file-before-any-section-starts} destination.clickhouse.credentials="clickhouse://dlt:Dlt*12345789234567@localhost:9000/dlt?secure=1" ``` @@ -157,7 +157,7 @@ ClickHouse は、以下の
GCS テーブル関数 によって自動的に処理されます。 @@ -241,10 +241,10 @@ dlt はこれらの認証情報を ClickHouse に渡し、認証および GCS * filesystem destination を S3 互換モードで GCS と連携できるようにする * Google Cloud Storage ステージングエリアのサポート -### dbt サポート +### dbt サポート {#dbt-support} dbt との連携は、一般に dbt-clickhouse を通じてサポートされています。 -### `dlt` state の同期 +### `dlt` state の同期 {#syncing-of-dlt-state} この destination は、dlt state の同期を完全にサポートしています。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md index 254b24d6158..9f1ed82585a 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md @@ -14,7 +14,7 @@ keywords: ['fivetran', 'データ移動', 'ETL', 'ClickHouse 宛先', '自動化 import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Fivetran と ClickHouse Cloud +# Fivetran と ClickHouse Cloud {#fivetran-and-clickhouse-cloud} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md index 05f92a7548d..bd4aff29010 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md @@ -11,7 +11,7 @@ integration: - category: 'data_ingestion' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import nifi01 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_01.png'; import nifi02 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_02.png'; @@ -31,7 +31,7 @@ import nifi15 from '@site/static/images/integrations/data-ingestion/etl-tools/ni import CommunityMaintainedBadge from '@theme/badges/CommunityMaintained'; -# Apache NiFiをClickHouseに接続する +# Apache NiFiをClickHouseに接続する {#connect-apache-nifi-to-clickhouse} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md index 934779a27bd..e909b1d3d1b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md @@ -18,8 +18,7 @@ import vector01 from '@site/static/images/integrations/data-ingestion/etl-tools/ import vector02 from '@site/static/images/integrations/data-ingestion/etl-tools/vector_02.png'; import PartnerBadge from '@theme/badges/PartnerBadge'; - -# Vector と ClickHouse の統合 +# Vector と ClickHouse の統合 {#integrating-vector-with-clickhouse} @@ -31,13 +30,11 @@ ClickHouse は、優れた圧縮率(ログでは最大 [170x](https://clickhou **前提条件:** -- ClickHouse がすでに稼働していること -- Vector がインストールされていること +* ClickHouse がすでに稼働していること +* Vector がインストールされていること - - -## データベースとテーブルを作成する +## データベースとテーブルを作成する {#1-create-a-database-and-table} ログイベントを保存するためのテーブルを定義します。 @@ -47,7 +44,7 @@ ClickHouse は、優れた圧縮率(ログでは最大 [170x](https://clickhou CREATE DATABASE IF NOT EXISTS nginxdb ``` -2. ログイベント全体を1つの文字列として挿入します。もちろん、この形式はログデータを分析するのに適したものではありませんが、その点は後ほど***マテリアライズドビュー***を使って解決していきます。 +2. ログイベント全体を1つの文字列として挿入します。もちろん、この形式はログデータを分析するのに適したものではありませんが、その点は後ほど***マテリアライズドビュー***を使って解決していきます。 ```sql CREATE TABLE IF NOT EXISTS nginxdb.access_logs ( @@ -61,8 +58,7 @@ ORDER BY tuple() **ORDER BY** は、まだ主キーが不要なため、空のタプルである **tuple()** に設定されています。 ::: - -## Nginx を構成する +## Nginx を構成する {#2--configure-nginx} このステップでは、Nginx のログ出力を構成する方法を説明します。 @@ -91,13 +87,12 @@ http { 192.168.208.1 - - [12/Oct/2021:03:31:49 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36" ``` - -## Vector を設定する +## Vector を設定する {#3-configure-vector} Vector はログ、メトリクス、トレース(**sources** と呼ばれます)を収集・変換・ルーティングし、ClickHouse を含む多数の異なるベンダー(**sinks** と呼ばれます)へ送信します。 Source と sink は **vector.toml** という名前の設定ファイルで定義します。 -1. 次の **vector.toml** ファイルでは、**my_access.log** の末尾を tail する **file** 型の **source** と、上で定義した **access_logs** テーブルを **sink** として定義しています。 +1. 次の **vector.toml** ファイルでは、**my_access.log** の末尾を tail する **file** 型の **source** と、上で定義した **access_logs** テーブルを **sink** として定義しています。 ```bash [sources.nginx_logs] @@ -124,14 +119,13 @@ SELECT * FROM nginxdb.access_logs テーブル形式で ClickHouse のログを表示する - -## ログをパースする +## ログをパースする {#4-parse-the-logs} ログを ClickHouse に保存できるのは有用ですが、各イベントを 1 つの文字列として保存するだけでは、十分なデータ分析は行えません。 次に、[マテリアライズドビュー](/materialized-view/incremental-materialized-view) を使用してログイベントをどのようにパースするかを見ていきます。 **マテリアライズドビュー** は、SQL における INSERT トリガーと同様に機能します。ソーステーブルにデータ行が挿入されると、マテリアライズドビューはそれらの行を変換し、その結果をターゲットテーブルに挿入します。 -マテリアライズドビューを設定して、**access_logs** 内のログイベントのパース済み表現を生成できます。 +マテリアライズドビューを設定して、**access_logs** 内のログイベントのパース済み表現を生成できます。 そのようなログイベントの 1 つの例を以下に示します。 ```bash @@ -180,7 +174,6 @@ SELECT trim(LEADING '"' FROM '"GET') SELECT parseDateTimeBestEffort(replaceOne(trim(LEADING '[' FROM '[12/Oct/2021:15:32:43'), ':', ' ')) ``` - これでマテリアライズドビューを定義する準備が整いました。 以下の定義には `POPULATE` 句が含まれており、これは **access_logs** に既に存在する行がすぐに処理され、その場で挿入されることを意味します。 次の SQL ステートメントを実行してください: @@ -227,18 +220,12 @@ FROM SELECT * FROM nginxdb.access_logs_view ``` -パース済みの ClickHouse ログをテーブル形式で表示 +パース済みの ClickHouse ログをテーブル形式で表示 :::note 上記のレッスンではデータを 2 つのテーブルに保存しましたが、最初の `nginxdb.access_logs` テーブルを [`Null`](/engines/table-engines/special/null) テーブルエンジンを使用するように変更することもできます。 パース済みデータは変わらず `nginxdb.access_logs_view` テーブルに格納されますが、生のデータはテーブルには保存されません。 ::: - > シンプルなインストールと短時間の設定だけで利用できる Vector を使うと、Nginx サーバーからのログを ClickHouse のテーブルに送信できます。マテリアライズドビューを使用すれば、それらのログを列にパースして、より簡単に分析できるようにできます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md index 3bcf12710e0..0e0d4eafddb 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md @@ -8,13 +8,13 @@ doc_type: 'guide' keywords: ['Google Cloud Storage ClickHouse', 'GCS ClickHouse 統合', 'GCS バックエンド MergeTree', 'ClickHouse GCS ストレージ', 'Google Cloud ClickHouse'] --- -import BucketDetails from '@site/docs/_snippets/_GCS_authentication_and_bucket.md'; +import BucketDetails from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_GCS_authentication_and_bucket.md'; import Image from '@theme/IdealImage'; import GCS_examine_bucket_1 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-1.png'; import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-2.png'; -# Google Cloud Storage を ClickHouse と統合する +# Google Cloud Storage を ClickHouse と統合する {#integrate-google-cloud-storage-with-clickhouse} :::note [Google Cloud](https://cloud.google.com) 上の ClickHouse Cloud を利用している場合、このページは対象外です。サービスはすでに [Google Cloud Storage](https://cloud.google.com/storage) を使用しているためです。GCS から `SELECT` または `INSERT` でデータを扱いたい場合は、[`gcs` テーブル関数](/sql-reference/table-functions/gcs) を参照してください。 @@ -24,13 +24,13 @@ ClickHouse は、ストレージとコンピュートを分離したいユーザ -## GCS バックエンドの MergeTree +## GCS バックエンドの MergeTree {#gcs-backed-mergetree} -### ディスクの作成 +### ディスクの作成 {#creating-a-disk} GCS バケットをディスクとして利用するには、まず `conf.d` 配下のファイルで ClickHouse の設定にディスクを定義する必要があります。GCS ディスク定義の例を以下に示します。この設定には、GCS の「disk」、キャッシュ、およびテーブルを GCS ディスク上に作成する際に DDL クエリで指定されるポリシーを構成するための複数のセクションが含まれます。それぞれについて以下で説明します。 -#### Storage configuration > disks > gcs +#### Storage configuration > disks > gcs {#storage_configuration--disks--gcs} この設定の該当部分はハイライトされているセクションであり、次の内容を指定します。 @@ -68,7 +68,7 @@ GCS バケットをディスクとして利用するには、まず `conf.d` 配 ``` -#### ストレージ設定 > disks > cache +#### ストレージ設定 > disks > cache {#storage_configuration--disks--cache} 次の例の設定では、ディスク `gcs` に対して 10Gi のメモリ キャッシュを有効化します。 @@ -106,7 +106,7 @@ GCS バケットをディスクとして利用するには、まず `conf.d` 配 ``` -#### Storage configuration > policies > gcs_main +#### Storage configuration > policies > gcs_main {#storage_configuration--policies--gcs_main} ストレージ構成ポリシーを使用すると、データを保存する場所を選択できます。以下でハイライトされているポリシーでは、ポリシー `gcs_main` を指定することで、ディスク `gcs` 上にデータを保存できます。たとえば、`CREATE TABLE ... SETTINGS storage_policy='gcs_main'` のように指定します。 @@ -141,7 +141,7 @@ GCS バケットをディスクとして利用するには、まず `conf.d` 配 このディスク定義に関連するすべての設定項目の一覧は[こちら](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3)にあります。 -### テーブルの作成 +### テーブルの作成 {#creating-a-table} 書き込み権限のあるバケットを使用するようにディスクを設定してあると仮定すると、以下の例のようなテーブルを作成できるはずです。簡潔にするため、NYC タクシー データセットのカラムの一部のみを使用し、データを GCS をバックエンドとするテーブルに直接ストリーミングします。 @@ -179,11 +179,11 @@ INSERT INTO trips_gcs SELECT trip_id, pickup_date, pickup_datetime, dropoff_date SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_gcs GROUP BY passenger_count; ``` -### レプリケーションの処理 +### レプリケーションの処理 {#handling-replication} GCS ディスクを用いたレプリケーションは、`ReplicatedMergeTree` テーブルエンジンを使用することで実現できます。詳細については、[GCS を使用して 2 つの GCP リージョン間で単一シャードをレプリケートする](#gcs-multi-region) ガイドを参照してください。 -### さらに詳しく +### さらに詳しく {#learn-more} [Cloud Storage XML API](https://cloud.google.com/storage/docs/xml-api/overview) は、Amazon Simple Storage Service (Amazon S3) などのサービスで動作する一部のツールおよびライブラリと相互運用性があります。 @@ -305,13 +305,13 @@ ClickHouse Keeper ノードでデプロイメント手順を実行する際は ``` -### ClickHouse サーバーを構成する +### ClickHouse サーバーを構成する {#configure-clickhouse-server} :::note best practice このガイドのいくつかの手順では、設定ファイルを `/etc/clickhouse-server/config.d/` に配置するように求められます。これは、Linux システムにおける設定オーバーライド用ファイルのデフォルトの配置場所です。このディレクトリにファイルを配置すると、ClickHouse はその内容をデフォルト設定とマージします。`config.d` ディレクトリにこれらのファイルを置くことで、アップグレード時に設定が失われるのを防ぐことができます。 ::: -#### ネットワーキング +#### ネットワーキング {#networking} デフォルトでは、ClickHouse はループバックインターフェイスで待ち受けますが、レプリケーション構成ではマシン間のネットワーク接続が必要です。すべてのインターフェイスで待ち受けるには、次のように設定します。 @@ -321,7 +321,7 @@ ClickHouse Keeper ノードでデプロイメント手順を実行する際は ``` -#### リモート ClickHouse Keeper サーバー +#### リモート ClickHouse Keeper サーバー {#remote-clickhouse-keeper-servers} レプリケーションは ClickHouse Keeper によって制御されます。この設定ファイルでは、ClickHouse Keeper ノードをホスト名とポート番号で識別します。 @@ -346,7 +346,7 @@ ClickHouse Keeper ノードでデプロイメント手順を実行する際は ``` -#### リモート ClickHouse サーバー +#### リモート ClickHouse サーバー {#remote-clickhouse-servers} このファイルでは、クラスタ内の各 ClickHouse サーバーのホスト名とポートを設定します。デフォルトの設定ファイルにはサンプルのクラスタ定義が含まれています。完全に構成されたクラスタのみを使用するために、この設定がデフォルト設定とマージされた際に `remote_servers` セクションへ追加されるのではなく、その内容を置き換えるよう、`remote_servers` エントリにはタグ `replace="true"` が追加されています。 @@ -372,7 +372,7 @@ ClickHouse Keeper ノードでデプロイメント手順を実行する際は ``` -#### レプリカの識別 +#### レプリカの識別 {#replica-identification} このファイルでは、ClickHouse Keeper 上のパスに関連する設定を行います。具体的には、データがどのレプリカに属しているかを識別するためのマクロを設定します。1 台目のサーバーではレプリカを `replica_1`、もう一方のサーバーでは `replica_2` と指定します。名前は変更しても構いません。たとえば、1 つのレプリカをサウスカロライナ、もう 1 つをノーザンバージニアに配置する例に基づくと、値は `carolina` と `virginia` のようにしてもかまいません。ただし、各マシンで異なる値になるようにしてください。 @@ -390,7 +390,7 @@ ClickHouse Keeper ノードでデプロイメント手順を実行する際は ``` -#### GCS でのストレージ +#### GCS でのストレージ {#storage-in-gcs} ClickHouse のストレージ構成には `disks` と `policies` が含まれます。以下で構成しているディスク名は `gcs` で、`type` は `s3` です。`type` が s3 になっているのは、ClickHouse が GCS バケットに対して、AWS S3 バケットと同様の方法でアクセスするためです。この構成は 2 部用意し、ClickHouse サーバーノードごとに 1 つずつ使用します。 @@ -438,7 +438,7 @@ ClickHouse のストレージ構成には `disks` と `policies` が含まれま ``` -### ClickHouse Keeper を起動する +### ClickHouse Keeper を起動する {#start-clickhouse-keeper} お使いのオペレーティングシステム向けのコマンドを使用してください。たとえば、次のとおりです。 @@ -448,7 +448,7 @@ sudo systemctl start clickhouse-keeper sudo systemctl status clickhouse-keeper ``` -#### ClickHouse Keeper のステータスを確認する +#### ClickHouse Keeper のステータスを確認する {#check-clickhouse-keeper-status} `netcat` を使って ClickHouse Keeper にコマンドを送信します。たとえば、`mntr` は ClickHouse Keeper クラスターの状態を返します。各 Keeper ノードでこのコマンドを実行すると、1 つがリーダーで、残りの 2 つがフォロワーであることがわかります。 @@ -464,11 +464,11 @@ zk_max_latency 11 zk_min_latency 0 zk_packets_received 1783 zk_packets_sent 1783 -# highlight-start +# highlight-start {#highlight-start} zk_num_alive_connections 2 zk_outstanding_requests 0 zk_server_state leader -# highlight-end +# highlight-end {#highlight-end} zk_znode_count 135 zk_watch_count 8 zk_ephemerals_count 3 @@ -477,13 +477,13 @@ zk_key_arena_size 28672 zk_latest_snapshot_size 0 zk_open_file_descriptor_count 182 zk_max_file_descriptor_count 18446744073709551615 -# highlight-start +# highlight-start {#highlight-start} zk_followers 2 zk_synced_followers 2 -# highlight-end +# highlight-end {#highlight-end} ``` -### ClickHouse サーバーを起動する +### ClickHouse サーバーを起動する {#start-clickhouse-server} `chnode1` と `chnode` で以下を実行します。 @@ -495,9 +495,9 @@ sudo service clickhouse-server start sudo service clickhouse-server status ``` -### 検証 +### 検証 {#verification} -#### ディスク構成の検証 +#### ディスク構成の検証 {#verify-disk-configuration} `system.disks` には、各ディスクのレコードが含まれている必要があります: @@ -565,7 +565,7 @@ cache_path: 3 行が結果セットに含まれています。経過時間: 0.002 秒。 ```` -#### クラスタ上で作成されたテーブルが両ノードに作成されていることを確認する +#### クラスタ上で作成されたテーブルが両ノードに作成されていることを確認する {#verify-that-tables-created-on-the-cluster-are-created-on-both-nodes} ```sql -- highlight-next-line create table trips on cluster 'cluster_1S_2R' ( @@ -600,7 +600,7 @@ SETTINGS storage_policy='gcs_main' 2行のデータセット。経過時間: 0.641秒 ``` -#### データを挿入できることを確認する +#### データを挿入できることを確認する {#verify-that-data-can-be-inserted} ```sql INSERT INTO trips SELECT @@ -621,7 +621,7 @@ FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz' LIMIT 1000000 ``` -#### テーブルでストレージポリシー `gcs_main` が使用されていることを確認します。 +#### テーブルでストレージポリシー `gcs_main` が使用されていることを確認します。 {#verify-that-the-storage-policy-gcs_main-is-used-for-the-table} ```sql SELECT @@ -647,14 +647,14 @@ formatReadableSize(total_bytes): 36.42 MiB 1行を取得しました。経過時間: 0.002秒 ``` -#### Google Cloud コンソールでの確認 +#### Google Cloud コンソールでの確認 {#verify-in-google-cloud-console} バケットを確認すると、`storage.xml` 構成ファイルで指定した名前のフォルダが、各バケット内に作成されていることがわかります。フォルダを展開すると、多数のファイルがあり、これらがデータパーティションを表しています。 -#### レプリカ 1 用バケット +#### レプリカ 1 用バケット {#bucket-for-replica-one} Google Cloud Storage におけるレプリカ 1 のバケット。データパーティションを含むフォルダ構造が表示されている -#### レプリカ 2 用バケット +#### レプリカ 2 用バケット {#bucket-for-replica-two} Google Cloud Storage におけるレプリカ 2 のバケット。データパーティションを含むフォルダ構造が表示されている diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md index e05c5a858e1..170b5f065a5 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md @@ -11,7 +11,7 @@ keywords: ['Google Dataflow ClickHouse', 'Dataflow ClickHouse integration', 'Apa import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Google Dataflow と ClickHouse の統合 +# Google Dataflow と ClickHouse の統合 {#integrating-google-dataflow-with-clickhouse} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md index def78a71397..9262e134ff7 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md @@ -11,7 +11,7 @@ keywords: ['Dataflow Java Runner', 'Google Dataflow ClickHouse', 'Apache Beam Ja import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Dataflow Java ランナー +# Dataflow Java ランナー {#dataflow-java-runner} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md index 03b9690b8ad..45ccd449073 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md @@ -11,7 +11,7 @@ keywords: ['google dataflow', 'gcp', 'データパイプライン', 'テンプ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Google Dataflow テンプレート +# Google Dataflow テンプレート {#google-dataflow-templates} diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md index 13f288394fc..c6f666db706 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md @@ -19,7 +19,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Dataflow BigQuery から ClickHouse へのテンプレート +# Dataflow BigQuery から ClickHouse へのテンプレート {#dataflow-bigquery-to-clickhouse-template} BigQuery から ClickHouse への Dataflow テンプレートは、BigQuery テーブルから ClickHouse テーブルへデータをバッチで取り込むパイプラインです。 このテンプレートは、テーブル全体を読み取ることも、指定された SQL クエリを使用して特定のレコードに絞り込むこともできます。 diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md index 332f305972b..a6bf3d5162b 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md @@ -9,7 +9,7 @@ doc_type: 'guide' keywords: ['ローカルファイル インポート ClickHouse', 'ClickHouse ローカルファイル インポート', 'clickhouse-client ファイルアップロード'] --- -# ローカルファイルの挿入 +# ローカルファイルの挿入 {#insert-local-files} `clickhouse-client` を使用して、ローカルファイルを ClickHouse サービスにストリーミングできます。これにより、ClickHouse が備える数多くの強力かつ便利な関数を使ってデータを前処理できます。例を見てみましょう... @@ -79,7 +79,6 @@ LIMIT 7 結果は以下のとおりです。 - ```response │ 488 │ comment │ mynameishere │ 2007-02-22 14:48:18 │ "It's too bad. Javascript-in-the-browser and Ajax are both nasty hacks that force programmers to do all sorts of shameful things. And the result is--wanky html tricks. Java, for its faults, is fairly clean when run in the applet environment. It has every superiority over JITBAJAX, except for install issues and a chunky load process. Yahoo games seems like just about the only applet success story. Of course, back in the day, non-trivial Applets tended to be too large for the dial-up accounts people had. At least that is changed." │ [454927] │ ['It','s','too','bad','Javascript','in','the','browser','and','Ajax','are','both','nasty','hacks','that','force','programmers','to','do','all','sorts','of','shameful','things','And','the','result','is','wanky','html','tricks','Java','for','its','faults','is','fairly','clean','when','run','in','the','applet','environment','It','has','every','superiority','over','JITBAJAX','except','for','install','issues','and','a','chunky','load','process','Yahoo','games','seems','like','just','about','the','only','applet','success','story','Of','course','back','in','the','day','non','trivial','Applets','tended','to','be','too','large','for','the','dial','up','accounts','people','had','At','least','that','is','changed'] │ │ 575 │ comment │ leoc │ 2007-02-23 00:09:49 │ "I can't find the reference now, but I *think* I've just read something suggesting that the install process for an Apollo applet will involve an "install-this-application?" confirmation dialog followed by a download of 30 seconds or so. If so then Apollo's less promising than I hoped. That kind of install may be low-friction by desktop-app standards but it doesn't compare to the ease of starting a browser-based AJAX or Flash application. (Consider how easy it is to use maps.google.com for the first time.)

Surely it will at least be that Apollo applications will run untrusted by default, and that an already-installed app will start automatically whenever you take your browser to the URL you downloaded it from?" │ [455071] │ ['I','can','t','find','the','reference','now','but','I','think','I','ve','just','read','something','suggesting','that','the','install','process','for','an','Apollo','applet','will','involve','an','34','install','this','application','34','confirmation','dialog','followed','by','a','download','of','30','seconds','or','so','If','so','then','Apollo','s','less','promising','than','I','hoped','That','kind','of','install','may','be','low','friction','by','desktop','app','standards','but','it','doesn','t','compare','to','the','ease','of','starting','a','browser','based','AJAX','or','Flash','application','Consider','how','easy','it','is','to','use','maps','google','com','for','the','first','time','p','Surely','it','will','at','least','be','that','Apollo','applications','will','run','untrusted','by','default','and','that','an','already','installed','app','will','start','automatically','whenever','you','take','your','browser','to','the','URL','you','downloaded','it','from'] │ diff --git a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md index d817065d007..99485d24e43 100644 --- a/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md +++ b/i18n/jp/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md @@ -12,11 +12,11 @@ integration: - website: 'https://clickhouse.com/cloud/clickpipes' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/jp/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; -# Confluent Cloud と ClickHouse との連携 +# Confluent Cloud と ClickHouse との連携 {#integrating-confluent-cloud-with-clickhouse}

\ No newline at end of file + + + + +fullscreen; +picture-in-picture" + allowfullscreen + />
-
+
Существует несколько вариантов миграции данных в ClickHouse Cloud в зависимости от того, где сейчас находятся ваши данные: -- [Self-managed to Cloud](/cloud/migration/clickhouse-to-cloud): используйте функцию `remoteSecure` для переноса данных -- [Another DBMS](/cloud/migration/clickhouse-local): используйте ETL-инструмент [clickhouse-local] вместе с соответствующей табличной функцией ClickHouse для вашей текущей СУБД -- [Anywhere!](/cloud/migration/etl-tool-to-clickhouse): используйте один из множества популярных ETL/ELT-инструментов, которые подключаются к самым разным источникам данных -- [Object Storage](/integrations/migration/object-storage-to-clickhouse): просто загружайте данные из S3 в ClickHouse +* [Self-managed to Cloud](/cloud/migration/clickhouse-to-cloud): используйте функцию `remoteSecure` для переноса данных +* [Another DBMS](/cloud/migration/clickhouse-local): используйте ETL-инструмент [clickhouse-local] вместе с соответствующей табличной функцией ClickHouse для вашей текущей СУБД +* [Anywhere!](/cloud/migration/etl-tool-to-clickhouse): используйте один из множества популярных ETL/ELT-инструментов, которые подключаются к самым разным источникам данных +* [Object Storage](/integrations/migration/object-storage-to-clickhouse): просто загружайте данные из S3 в ClickHouse В примере [Migrate from Redshift](/migrations/redshift/migration-guide) мы приводим три способа миграции данных в ClickHouse. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md index a95770adac4..d64cbafdc04 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Сравнение ClickHouse с PostgreSQL +# Сравнение ClickHouse с PostgreSQL {#comparing-clickhouse-and-postgresql} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md index 8b1fb22997e..de3376e2b83 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md @@ -129,7 +129,7 @@ ClickHouse обеспечивает свойства ACID при [огранич -## Сжатие +## Сжатие {#compression} Колоночное хранилище ClickHouse означает, что степень сжатия часто будет значительно выше по сравнению с Postgres. Ниже показано, как отличаются требования к хранилищу для всех таблиц Stack Overflow в обеих базах данных: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md index 251b14c75f0..d9a55d4d96d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md @@ -31,49 +31,49 @@ import Image from '@theme/IdealImage'; ```bash -# пользователи +# пользователи {#users} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/users.sql.gz gzip -d users.sql.gz psql < users.sql ``` -# posts +# posts {#posts} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posts.sql.gz gzip -d posts.sql.gz psql < posts.sql -# posthistory +# posthistory {#posthistory} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posthistory.sql.gz gzip -d posthistory.sql.gz psql < posthistory.sql -# комментарии +# комментарии {#comments} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/comments.sql.gz gzip -d comments.sql.gz psql < comments.sql -# Голоса +# Голоса {#votes} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/votes.sql.gz gzip -d votes.sql.gz psql < votes.sql -# Значки +# Значки {#badges} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/badges.sql.gz gzip -d badges.sql.gz psql < badges.sql -# postlinks +# postlinks {#postlinks} wget [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz) gzip -d postlinks.sql.gz @@ -87,9 +87,9 @@ psql < postlinks.sql ``` -## Миграция данных +## Миграция данных {#migrating-data} -### Репликация в режиме реального времени (CDC) +### Репликация в режиме реального времени (CDC) {#real-time-replication-or-cdc} Обратитесь к этому [руководству](/integrations/clickpipes/postgres), чтобы настроить ClickPipes для PostgreSQL. В нём рассматриваются многие типы исходных экземпляров Postgres. @@ -125,7 +125,7 @@ ORDER BY id; После настройки ClickPipes начинает миграцию всех данных из PostgreSQL в ClickHouse. В зависимости от сети и масштаба развертывания для набора данных Stack Overflow это должно занять всего несколько минут. -### Ручная массовая загрузка с периодическими обновлениями +### Ручная массовая загрузка с периодическими обновлениями {#initial-bulk-load-with-periodic-updates} При использовании ручного подхода первоначальная массовая загрузка набора данных может быть выполнена с помощью: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md index 5e942043279..7eb2f2f4140 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md @@ -21,7 +21,7 @@ doc_type: 'guide' -## Оптимизация запросов в ClickHouse +## Оптимизация запросов в ClickHouse {#optimize-queries-in-clickhouse} Хотя можно выполнить миграцию с минимальной переработкой запросов, рекомендуется использовать возможности ClickHouse, чтобы существенно упростить запросы и дополнительно улучшить их производительность. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md index b3d641f0702..225bb153a08 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md @@ -49,7 +49,7 @@ import Image from '@theme/IdealImage'; -## Партиции +## Партиции {#partitions} Пользователям Postgres знакома концепция партиционирования таблиц, которая используется для повышения производительности и управляемости крупных баз данных за счёт разделения таблиц на более мелкие, удобные в обслуживании части, называемые партициями. Такое партиционирование может выполняться по диапазону значений для указанного столбца (например, по датам), по заданным спискам или по хешу ключа. Это позволяет администраторам организовывать данные на основе конкретных критериев, таких как диапазоны дат или географические регионы. Партиционирование помогает улучшить производительность запросов за счёт более быстрого доступа к данным через отсечение партиций (partition pruning) и более эффективного индексирования. Оно также упрощает задачи обслуживания, такие как резервное копирование и очистка данных, позволяя выполнять операции над отдельными партициями, а не над всей таблицей целиком. Кроме того, партиционирование может существенно повысить масштабируемость баз данных PostgreSQL за счёт распределения нагрузки по нескольким партициям. @@ -76,7 +76,7 @@ PARTITION BY toYear(CreationDate) Для полного описания партиционирования см. ["Партиции таблиц"](/partitions). -### Применение партиционирования +### Применение партиционирования {#applications-of-partitions} Партиционирование в ClickHouse имеет схожие области применения с Postgres, но с некоторыми тонкими отличиями. В частности: @@ -132,7 +132,7 @@ Ok. -## Материализованные представления и проекции +## Материализованные представления и проекции {#materialized-views-vs-projections} Postgres позволяет создавать несколько индексов для одной таблицы, что позволяет оптимизировать ее под различные паттерны доступа. Эта гибкость позволяет администраторам и разработчикам настраивать производительность базы данных под конкретные запросы и операционные потребности. Концепция проекций в ClickHouse, хотя и не является полной аналогией этого, позволяет пользователям задавать несколько выражений `ORDER BY` для таблицы. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md index d46e2ba546a..d92e3e2e0c1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md @@ -12,7 +12,7 @@ import bigquery_1 from '@site/static/images/migrations/bigquery-1.png'; import Image from '@theme/IdealImage'; -# Сравнение ClickHouse Cloud и BigQuery +# Сравнение ClickHouse Cloud и BigQuery {#comparing-clickhouse-cloud-and-bigquery} @@ -186,7 +186,7 @@ ClickHouse использует стандартный SQL с множество -## Массивы +## Массивы {#arrays} По сравнению с восемью функциями работы с массивами в BigQuery, в ClickHouse доступно более 80 [встроенных функций для работы с массивами](/sql-reference/functions/array-functions), которые позволяют элегантно и просто моделировать и решать широкий круг задач. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md index 9354bd14098..4e904afd8dd 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md @@ -75,7 +75,7 @@ CDC (фиксация изменений данных) — это процесс -## Проектирование схем +## Проектирование схем {#designing-schemas} Набор данных Stack Overflow содержит ряд связанных таблиц. Рекомендуем сначала сосредоточиться на миграции основной таблицы. Это не обязательно самая большая таблица, а та, по которой вы ожидаете получать больше всего аналитических запросов. Это позволит вам познакомиться с основными концепциями ClickHouse. По мере добавления дополнительных таблиц структура этой таблицы может потребовать пересмотра, чтобы в полной мере использовать возможности ClickHouse и обеспечить оптимальную производительность. Мы рассматриваем этот процесс моделирования в нашей [документации по моделированию данных](/data-modeling/schema-design#next-data-modeling-techniques). @@ -108,7 +108,7 @@ CREATE TABLE stackoverflow.posts ( ); ``` -### Оптимизация типов +### Оптимизация типов {#optimizing-types} Применение процесса, [описанного здесь](/data-modeling/schema-design), приводит к следующей схеме: @@ -174,11 +174,11 @@ INSERT INTO stackoverflow.posts SELECT * FROM gcs( 'gs://clickhouse-public-datas -## Подходы к моделированию данных +## Подходы к моделированию данных {#data-modeling-techniques} Мы рекомендуем пользователям, мигрирующим с BigQuery, ознакомиться с [руководством по моделированию данных в ClickHouse](/data-modeling/schema-design). В этом руководстве используется тот же набор данных Stack Overflow и рассматриваются несколько подходов с использованием возможностей ClickHouse. -### Партиционирование +### Партиционирование {#partitions} Пользователи BigQuery знакомы с концепцией партиционирования таблиц, которая повышает производительность и управляемость крупных баз данных за счёт деления таблиц на более мелкие, удобные для управления части, называемые партициями. Такое партиционирование может осуществляться с использованием диапазона по заданному столбцу (например, по датам), определённых списков или хеша по ключу. Это позволяет администраторам организовывать данные на основе конкретных критериев, таких как диапазоны дат или географическое расположение. @@ -205,7 +205,7 @@ ORDER BY (PostTypeId, toDate(CreationDate), CreationDate) PARTITION BY toYear(CreationDate) ``` -#### Применение +#### Применение {#applications} Разбиение на разделы (partitioning) в ClickHouse имеет сходные области применения с BigQuery, но и некоторые тонкие отличия. В частности: @@ -259,7 +259,7 @@ Ok. -## Материализованные представления и проекции +## Материализованные представления и проекции {#materialized-views-vs-projections} Концепция проекций в ClickHouse позволяет задавать для одной таблицы несколько вариантов `ORDER BY`. @@ -413,7 +413,7 @@ WHERE UserId = 8592047 ``` -## Переписывание запросов BigQuery на ClickHouse +## Переписывание запросов BigQuery на ClickHouse {#rewriting-bigquery-queries-in-clickhouse} Ниже приведены примеры запросов для сравнения BigQuery и ClickHouse. Этот список призван показать, как использовать возможности ClickHouse для значительного упрощения запросов. В примерах используется полный набор данных Stack Overflow (до апреля 2024 года включительно). @@ -481,7 +481,7 @@ LIMIT 5 ``` -## Агрегатные функции +## Агрегатные функции {#aggregate-functions} Где это возможно, пользователям следует использовать агрегатные функции ClickHouse. Ниже показано использование [функции `argMax`](/sql-reference/aggregate-functions/reference/argmax) для вычисления самого просматриваемого вопроса за каждый год. @@ -536,7 +536,7 @@ Peak memory usage: 377.26 MiB. ``` -## Условные выражения и массивы +## Условные выражения и массивы {#conditionals-and-arrays} Условные выражения и функции для работы с массивами значительно упрощают запросы. Следующий запрос вычисляет теги (встречающиеся более 10 000 раз) с наибольшим процентным ростом с 2022 по 2023 год. Обратите внимание, насколько лаконичен следующий запрос ClickHouse благодаря условным выражениям, функциям для работы с массивами и возможности повторно использовать псевдонимы в предложениях `HAVING` и `SELECT`. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md index 58487c10548..0907106fb45 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md @@ -30,7 +30,7 @@ _Это руководство подходит для ClickHouse Cloud и дл -## Экспорт данных таблицы в GCS +## Экспорт данных таблицы в GCS {#1-export-table-data-to-gcs} На этом шаге мы используем [рабочую область BigQuery SQL](https://cloud.google.com/bigquery/docs/bigquery-web-ui) для выполнения SQL-команд. Ниже мы экспортируем таблицу BigQuery с именем `mytable` в бакет GCS с помощью оператора [`EXPORT DATA`](https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements). @@ -67,7 +67,7 @@ END WHILE; * Parquet как колоночный формат является более подходящим форматом обмена данными, поскольку он изначально сжат и позволяет BigQuery быстрее выполнять экспорт, а ClickHouse — быстрее выполнять запросы. -## Импорт данных в ClickHouse из GCS +## Импорт данных в ClickHouse из GCS {#2-importing-data-into-clickhouse-from-gcs} После завершения экспорта мы можем импортировать эти данные в таблицу ClickHouse. Вы можете использовать [консоль ClickHouse SQL](/integrations/sql-clients/sql-console) или [`clickhouse-client`](/interfaces/cli) для выполнения приведённых ниже команд. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md index 8a7ad8b4166..9fec245b382 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md @@ -13,7 +13,7 @@ import cloud_architecture from '@site/static/images/cloud/onboard/discover/use_c import Image from '@theme/IdealImage'; -# Миграция с Snowflake на ClickHouse +# Миграция с Snowflake на ClickHouse {#snowflake-to-clickhouse-migration} > Этот документ является введением в миграцию данных из Snowflake в ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md index 974b5cb07dd..419371e52c6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md @@ -12,7 +12,7 @@ import migrate_snowflake_clickhouse from '@site/static/images/migrations/migrate import Image from '@theme/IdealImage'; -# Миграция из Snowflake в ClickHouse +# Миграция из Snowflake в ClickHouse {#migrate-from-snowflake-to-clickhouse} > В этом руководстве описывается процесс миграции данных из Snowflake в ClickHouse. @@ -24,7 +24,7 @@ import Image from '@theme/IdealImage'; -## Экспорт данных из Snowflake +## Экспорт данных из Snowflake {#1-exporting-data-from-snowflake} Миграция с Snowflake на ClickHouse @@ -62,7 +62,7 @@ COPY INTO @external_stage/mydataset from mydataset max_file_size=157286400 heade Для набора данных объемом около 5 ТБ с максимальным размером файла 150 МБ и при использовании виртуального склада Snowflake типа 2X-Large, расположенного в том же регионе AWS `us-east-1`, копирование данных в бакет S3 займет примерно 30 минут. -## Импорт в ClickHouse +## Импорт в ClickHouse {#2-importing-to-clickhouse} После того как данные размещены во временном объектном хранилище, функции ClickHouse, такие как [табличная функция s3](/sql-reference/table-functions/s3), можно использовать для вставки данных в таблицу, как показано ниже. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md index bdfc01b1a38..1cd3450242b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# Руководство по преобразованию SQL-запросов Snowflake +# Руководство по преобразованию SQL-запросов Snowflake {#snowflake-sql-translation-guide} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md index 88fe3de3174..8365ea362ee 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md @@ -8,6 +8,6 @@ show_related_blogs: true doc_type: 'landing-page' --- -# Миграция с Elasticsearch на ClickHouse +# Миграция с Elasticsearch на ClickHouse {#elasticsearch-to-clickhouse-migration} Для сценариев наблюдаемости см. документацию по миграции [с Elasticsearch на ClickStack](/use-cases/observability/clickstack/migration/elastic). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md index 860c119f448..852d600c25c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Миграция с Amazon Redshift на ClickHouse +# Миграция с Amazon Redshift на ClickHouse {#amazon-redshift-to-clickhouse-migration} > Этот документ является вводным руководством по миграции данных из Amazon Redshift в ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md index 54a3d34c932..9c30be7822e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md @@ -7,9 +7,8 @@ title: 'Руководство по миграции с Amazon Redshift на Cli doc_type: 'guide' --- -import MigrationGuide from '@site/docs/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +import MigrationGuide from '@site/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +# Руководство по миграции с Amazon Redshift на ClickHouse {#amazon-redshift-to-clickhouse-migration-guide} -# Руководство по миграции с Amazon Redshift на ClickHouse - - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md index 92d41d4e724..c03693dc915 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Руководство по преобразованию SQL-запросов Amazon Redshift +# Руководство по преобразованию SQL-запросов Amazon Redshift {#amazon-redshift-sql-translation-guide} @@ -65,9 +65,9 @@ String в ClickHouse, таким образом, не имеет огранич -## Синтаксис DDL +## Синтаксис DDL {#compression} -### Ключи сортировки +### Ключи сортировки {#sorting-keys} И в ClickHouse, и в Redshift есть понятие «ключ сортировки», который определяет, как данные упорядочиваются при сохранении. В Redshift ключ сортировки задаётся с помощью diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md index 894633ec6ad..176b740deef 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md @@ -8,7 +8,7 @@ keywords: ['миграция', 'ClickHouse Cloud', 'OSS', 'миграция са --- import Image from '@theme/IdealImage'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import self_managed_01 from '@site/static/images/integrations/migration/self-managed-01.png'; import self_managed_02 from '@site/static/images/integrations/migration/self-managed-02.png'; import self_managed_03 from '@site/static/images/integrations/migration/self-managed-03.png'; @@ -16,16 +16,13 @@ import self_managed_04 from '@site/static/images/integrations/migration/self-man import self_managed_05 from '@site/static/images/integrations/migration/self-managed-05.png'; import self_managed_06 from '@site/static/images/integrations/migration/self-managed-06.png'; +# Миграция между самостоятельно управляемым ClickHouse и ClickHouse Cloud {#migrating-between-self-managed-clickhouse-and-clickhouse-cloud} -# Миграция между самостоятельно управляемым ClickHouse и ClickHouse Cloud - -Миграция самостоятельно управляемого ClickHouse +Миграция самостоятельно управляемого ClickHouse В этом руководстве показано, как выполнить миграцию с самостоятельно управляемого сервера ClickHouse в ClickHouse Cloud, а также как выполнять миграцию между сервисами ClickHouse Cloud. Функция [`remoteSecure`](/sql-reference/table-functions/remote) используется в запросах `SELECT` и `INSERT` для обеспечения доступа к удалённым серверам ClickHouse, что делает миграцию таблиц настолько же простой, как написание запроса `INSERT INTO` с вложенным `SELECT`. - - -## Миграция с самостоятельно управляемого ClickHouse в ClickHouse Cloud +## Миграция с самостоятельно управляемого ClickHouse в ClickHouse Cloud {#migrating-from-self-managed-clickhouse-to-clickhouse-cloud} Migrating Self-managed ClickHouse @@ -36,7 +33,7 @@ import self_managed_06 from '@site/static/images/integrations/migration/self-man В этом примере самостоятельно управляемый сервер ClickHouse является *источником*, а сервис ClickHouse Cloud — *приёмником*. -### Обзор +### Обзор {#overview} Процесс выглядит следующим образом: @@ -46,11 +43,11 @@ import self_managed_06 from '@site/static/images/integrations/migration/self-man 4. Удалить исходный сервер из IP Access List на целевой стороне (если применимо) 5. Удалить пользователя с правами только на чтение из исходного сервиса -### Миграция таблиц из одной системы в другую: +### Миграция таблиц из одной системы в другую: {#migration-of-tables-from-one-system-to-another} Этот пример переносит одну таблицу с самостоятельно управляемого сервера ClickHouse в ClickHouse Cloud. -### На исходной системе ClickHouse (системе, которая в данный момент хранит данные) +### На исходной системе ClickHouse (системе, которая в данный момент хранит данные) {#on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data} * Добавьте пользователя с правами только на чтение, который может читать исходную таблицу (`db.table` в этом примере) @@ -72,7 +69,7 @@ FROM system.tables WHERE database = 'db' AND table = 'table' ``` -### В целевой системе ClickHouse Cloud: +### В целевой системе ClickHouse Cloud: {#on-the-destination-clickhouse-cloud-system} * Создайте целевую базу данных: @@ -119,8 +116,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS') SELECT * FROM db.table ``` - -## Миграция между сервисами ClickHouse Cloud +## Миграция между сервисами ClickHouse Cloud {#migrating-between-clickhouse-cloud-services} Миграция самоуправляемого ClickHouse @@ -143,7 +139,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 6. Восстановите IP Access List на сервисе destination 7. Удалите пользователя только для чтения из сервиса source -#### Добавьте пользователя только для чтения в сервис source +#### Добавьте пользователя только для чтения в сервис source {#add-a-read-only-user-to-the-source-service} * Добавьте пользователя только для чтения, который может читать таблицу source (`db.table` в этом примере) @@ -164,7 +160,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', where database = 'db' and table = 'table' ``` -#### Продублируйте структуру таблицы в сервисе destination +#### Продублируйте структуру таблицы в сервисе destination {#duplicate-the-table-structure-on-the-destination-service} В сервисе destination создайте базу данных, если её ещё нет: @@ -181,7 +177,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', CREATE TABLE db.table ... ``` -#### Разрешите удалённый доступ к сервису source +#### Разрешите удалённый доступ к сервису source {#allow-remote-access-to-the-source-service} Чтобы забирать данные из source в destination, сервис source должен разрешать подключения. Временно отключите функциональность "IP Access List" на сервисе source. @@ -191,7 +187,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', Измените allow list и временно разрешите доступ из **Anywhere**. Подробности см. в документации по [IP Access List](/cloud/security/setting-ip-filters). -#### Скопируйте данные из source в destination +#### Скопируйте данные из source в destination {#copy-the-data-from-source-to-destination} * Используйте функцию `remoteSecure` для получения данных из сервиса ClickHouse Cloud source. Подключитесь к destination. Выполните эту команду в сервисе ClickHouse Cloud destination: @@ -203,11 +199,11 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', * Проверьте данные в сервисе destination -#### Восстановите IP Access List на сервисе source +#### Восстановите IP Access List на сервисе source {#re-establish-the-ip-access-list-on-the-source} Если вы ранее экспортировали список доступа, то можете повторно импортировать его с помощью **Share**, иначе заново добавьте свои записи в список доступа. -#### Удалите пользователя только для чтения `exporter` +#### Удалите пользователя только для чтения `exporter` {#remove-the-read-only-exporter-user} ```sql DROP USER exporter diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md index 76a652199ba..ecd078ff360 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md @@ -11,14 +11,14 @@ import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import ch_local_01 from '@site/static/images/integrations/migration/ch-local-01.png'; import ch_local_02 from '@site/static/images/integrations/migration/ch-local-02.png'; import ch_local_03 from '@site/static/images/integrations/migration/ch-local-03.png'; import ch_local_04 from '@site/static/images/integrations/migration/ch-local-04.png'; -# Миграция в ClickHouse с использованием clickhouse-local +# Миграция в ClickHouse с использованием clickhouse-local {#migrating-to-clickhouse-using-clickhouse-local} Миграция в самоуправляемый ClickHouse @@ -94,21 +94,21 @@ ClickHouse предоставляет движки интеграции и та -## Пример 1: Миграция с MySQL в ClickHouse Cloud с использованием интеграционного движка +## Пример 1: Миграция с MySQL в ClickHouse Cloud с использованием интеграционного движка {#example-1-migrating-from-mysql-to-clickhouse-cloud-with-an-integration-engine} Мы будем использовать [интеграционный движок таблиц](/engines/table-engines/integrations/mysql/) (создаваемый на лету с помощью [табличной функции mysql](/sql-reference/table-functions/mysql/)) для чтения данных из исходной базы данных MySQL, а для записи данных в целевую таблицу в вашем облачном сервисе ClickHouse Cloud — [табличную функцию remoteSecure](/sql-reference/table-functions/remote/). Миграция самоуправляемого ClickHouse -### На целевом сервисе ClickHouse Cloud: +### На целевом сервисе ClickHouse Cloud: {#on-the-destination-clickhouse-cloud-service} -#### Создайте целевую базу данных: +#### Создайте целевую базу данных: {#create-the-destination-database} ```sql CREATE DATABASE db ``` -#### Создайте целевую таблицу с такой же схемой, как у таблицы MySQL: +#### Создайте целевую таблицу с такой же схемой, как у таблицы MySQL: {#create-a-destination-table-that-has-a-schema-equivalent-to-the-mysql-table} ```sql CREATE TABLE db.table ... @@ -118,9 +118,9 @@ CREATE TABLE db.table ... Схемы целевой таблицы ClickHouse Cloud и исходной таблицы MySQL должны совпадать (имена и порядок столбцов должны быть одинаковыми, а типы данных столбцов — совместимыми). ::: -### На хосте с clickhouse-local: +### На хосте с clickhouse-local: {#on-the-clickhouse-local-host-machine} -#### Запустите clickhouse-local с миграционным запросом: +#### Запустите clickhouse-local с миграционным запросом: {#run-clickhouse-local-with-the-migration-query} ```sql ./clickhouse-local --query " @@ -135,16 +135,16 @@ SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');" ::: -## Пример 2: миграция с MySQL в ClickHouse Cloud с использованием моста JDBC +## Пример 2: миграция с MySQL в ClickHouse Cloud с использованием моста JDBC {#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge} Мы будем использовать [табличный движок интеграции с JDBC](/engines/table-engines/integrations/jdbc.md) (создаваемый на лету с помощью [табличной функции JDBC](/sql-reference/table-functions/jdbc.md)) вместе с [ClickHouse JDBC Bridge](https://github.com/ClickHouse/clickhouse-jdbc-bridge) и драйвером MySQL JDBC для чтения данных из исходной базы данных MySQL, а также [табличную функцию remoteSecure](/sql-reference/table-functions/remote.md) для записи данных в целевую таблицу в вашем сервисе ClickHouse Cloud. Миграция самоуправляемого ClickHouse -### На целевом сервисе ClickHouse Cloud: +### На целевом сервисе ClickHouse Cloud: {#on-the-destination-clickhouse-cloud-service-1} -#### Создайте целевую базу данных: +#### Создайте целевую базу данных: {#create-the-destination-database-1} ```sql CREATE DATABASE db diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md index 007f7ca232c..86bb2f04640 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md @@ -10,15 +10,14 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import third_party_01 from '@site/static/images/integrations/migration/third-party-01.png'; +# Использование стороннего ETL-инструмента {#using-a-3rd-party-etl-tool} -# Использование стороннего ETL-инструмента - -Миграция самостоятельно управляемого ClickHouse +Миграция самостоятельно управляемого ClickHouse Отличный вариант переноса данных из внешнего источника в ClickHouse — использовать один из многих популярных ETL- и ELT-инструментов. У нас есть документация по следующим решениям: -- [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) -- [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) -- [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) +* [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) +* [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) +* [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) Но существует и множество других ETL/ELT-инструментов, которые интегрируются с ClickHouse, поэтому обратитесь к документации используемого вами инструмента за подробной информацией. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md index 3c75c3a39dd..2d71bc1aa64 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md @@ -9,18 +9,17 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import object_storage_01 from '@site/static/images/integrations/migration/object-storage-01.png'; +# Перенос данных из облачного объектного хранилища в ClickHouse Cloud {#move-data-from-cloud-object-storage-to-clickhouse-cloud} -# Перенос данных из облачного объектного хранилища в ClickHouse Cloud - -Миграция самостоятельно развернутого ClickHouse +Миграция самостоятельно развернутого ClickHouse Если вы используете облачное объектное хранилище как озеро данных и хотите импортировать эти данные в ClickHouse Cloud, или если ваша текущая система управления базами данных может напрямую выгружать данные в облачное объектное хранилище, то вы можете использовать одну из табличных функций для миграции данных, хранящихся в облачном объектном хранилище, в таблицу ClickHouse Cloud: -- [s3](/sql-reference/table-functions/s3.md) или [s3Cluster](/sql-reference/table-functions/s3Cluster.md) -- [gcs](/sql-reference/table-functions/gcs) -- [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) +* [s3](/sql-reference/table-functions/s3.md) или [s3Cluster](/sql-reference/table-functions/s3Cluster.md) +* [gcs](/sql-reference/table-functions/gcs) +* [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) Если ваша текущая система управления базами данных не может напрямую выгружать данные в облачное объектное хранилище, вы можете использовать [сторонний ETL/ELT-инструмент](/cloud/migration/etl-tool-to-clickhouse) или [clickhouse-local](/cloud/migration/clickhouse-local) для переноса данных из вашей текущей системы управления базами данных в облачное объектное хранилище, чтобы на втором этапе мигрировать эти данные в таблицу ClickHouse Cloud. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md index e3209d56939..33fd8034d5c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md @@ -7,12 +7,12 @@ hide_title: true doc_type: 'guide' --- -import TableOfContentsBestPractices from '@site/docs/best-practices/_snippets/_table_of_contents.md'; -import TableOfContentsOptimizationAndPerformance from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; -import TableOfContentsSecurity from '@site/docs/cloud/_snippets/_security_table_of_contents.md'; +import TableOfContentsBestPractices from '@site/i18n/ru/docusaurus-plugin-content-docs/current/best-practices/_snippets/_table_of_contents.md'; +import TableOfContentsOptimizationAndPerformance from '@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContentsSecurity from '@site/i18n/ru/docusaurus-plugin-content-docs/current/cloud/_snippets/_security_table_of_contents.md'; -# Обзор ресурсов +# Обзор ресурсов {#resource-tour} В этой статье представлен обзор доступных в документации ресурсов, которые помогут вам максимально эффективно использовать развертывание ClickHouse Cloud. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/index.md index 16834d39c86..870014d9c92 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/onboard/index.md @@ -9,7 +9,7 @@ keywords: ['онбординг', 'начало работы', 'настройк -# Начало работы с ClickHouse Cloud +# Начало работы с ClickHouse Cloud {#get-started-with-clickhouse-cloud} Впервые используете ClickHouse Cloud и не знаете, с чего начать? В этом разделе документации мы покажем вам всё необходимое для быстрого запуска и начала работы. Мы diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/01_changelog.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/01_changelog.md index b75a67a460e..8455857e59e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/01_changelog.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/01_changelog.md @@ -214,7 +214,7 @@ import dashboards from '@site/static/images/cloud/reference/may-30-dashboards.pn созданного для упрощения мониторинга ваших сервисов ClickHouse Cloud. Этот миксин использует наш совместимый с Prometheus конечный API-адрес для бесшовной интеграции метрик ClickHouse в вашу существующую инсталляцию Prometheus и Grafana. В его состав - входит преднастроенная панель мониторинга, которая обеспечивает Обзервабилити в режиме реального времени + входит преднастроенная панель мониторинга, которая обеспечивает наблюдаемость в режиме реального времени за состоянием и производительностью ваших сервисов. Дополнительную информацию см. в [блоге о запуске](https://clickhouse.com/blog/monitor-with-new-prometheus-grafana-mix-in). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md index 45c212b1caa..b88ceca6abc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md @@ -12,7 +12,7 @@ doc_type: 'changelog' -#### Обратно несовместимое изменение +#### Обратно несовместимое изменение {#backward-incompatible-change} * Теперь выполняется проверка подозрительных/экспериментальных типов во вложенных типах. Ранее такие типы (кроме JSON) не проверялись во вложенных типах, таких как Array/Tuple/Map. [#59385](https://github.com/ClickHouse/ClickHouse/pull/59385) ([Kruglov Pavel](https://github.com/Avogar)). * Условие сортировки `ORDER BY ALL` (введённое в версии 23.12) заменено на `ORDER BY *`. Предыдущий синтаксис слишком часто приводил к ошибкам в таблицах со столбцом `all`. [#59450](https://github.com/ClickHouse/ClickHouse/pull/59450) ([Robert Schulze](https://github.com/rschu1ze)). @@ -29,7 +29,7 @@ doc_type: 'changelog' -#### Новая возможность +#### Новая возможность {#new-feature} * Режим работы topK/topKWeighted, возвращающий количество значений и оценку погрешности. [#54508](https://github.com/ClickHouse/ClickHouse/pull/54508) ([UnamedRus](https://github.com/UnamedRus)). * Добавлен новый синтаксис, позволяющий указать пользователя-определителя в представлении/материализованном представлении. Это позволяет выполнять SELECT/INSERT из представлений без явной выдачи прав на базовые таблицы. [#54901](https://github.com/ClickHouse/ClickHouse/pull/54901) ([pufit](https://github.com/pufit)). @@ -57,7 +57,7 @@ doc_type: 'changelog' -#### Повышение производительности +#### Повышение производительности {#performance-improvement} * Удаляет агрегаторы min/max/any/anyLast по ключам GROUP BY в списке SELECT. [#52230](https://github.com/ClickHouse/ClickHouse/pull/52230) ([JackyWoo](https://github.com/JackyWoo)). * Улучшена производительность метода сериализованной агрегации при работе с несколькими столбцами [nullable]. Это обобщённая версия [#51399](https://github.com/ClickHouse/ClickHouse/issues/51399), не нарушающая целостность абстракции. [#55809](https://github.com/ClickHouse/ClickHouse/pull/55809) ([Amos Bird](https://github.com/amosbird)). @@ -86,7 +86,7 @@ doc_type: 'changelog' -#### Улучшение +#### Улучшение {#improvement} * При выполнении запроса MODIFY COLUMN для материализованных представлений проверьте структуру внутренней таблицы, чтобы убедиться, что все столбцы присутствуют. [#47427](https://github.com/ClickHouse/ClickHouse/pull/47427) ([sunny](https://github.com/sunny19930321)). * Добавлена таблица `system.keywords`, которая содержит все ключевые слова из парсера. Она предназначена главным образом для улучшения фаззинга и подсветки синтаксиса. [#51808](https://github.com/ClickHouse/ClickHouse/pull/51808) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov)). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md index d3faa4c8ef6..633c1da6378 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# Журнал изменений версии 24.5 для Cloud +# Журнал изменений версии 24.5 для Cloud {#v245-changelog-for-cloud} Актуальные изменения в сервисах ClickHouse Cloud в релизе v24.5. @@ -128,7 +128,7 @@ doc_type: 'changelog' -# Улучшения +# Улучшения {#improvements} * Удалена настройка `optimize_monotonous_functions_in_order_by`, так как она по сути стала пустой операцией (no-op). [#63004](https://github.com/ClickHouse/ClickHouse/pull/63004) (Raúl Marín). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md index 897ddd1ee1b..852f9e8de5d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# Журнал изменений v24.6 для Cloud +# Журнал изменений v24.6 для Cloud {#v246-changelog-for-cloud} Актуальные изменения для сервисов ClickHouse Cloud в релизе v24.6. @@ -110,7 +110,7 @@ doc_type: 'changelog' -## Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном релизе) +## Исправление ошибки (некорректное поведение, заметное пользователям, в официальном стабильном релизе) {#bug-fix-user-visible-misbehavior-in-an-official-stable-release} * Исправлена проблема, из-за которой пропускной индекс 'set' не работал с IN и indexHint(). #62083 (Michael Kolupaev). * Исправлены запросы с FINAL, которые давали неверный результат, если таблица не использовала адаптивную гранулярность. #62432 (Duc Canh Le). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md index fb4202315e9..80e11827548 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md @@ -22,7 +22,7 @@ doc_type: 'changelog' -## Новая возможность +## Новая возможность {#new-feature} * Обновляемые материализованные представления готовы к промышленной эксплуатации. [#70550](https://github.com/ClickHouse/ClickHouse/pull/70550) ([Michael Kolupaev](https://github.com/al13n321)). Обновляемые материализованные представления теперь поддерживаются в реплицируемых базах данных. [#60669](https://github.com/ClickHouse/ClickHouse/pull/60669) ([Michael Kolupaev](https://github.com/al13n321)). * Функция `toStartOfInterval()` теперь имеет новую перегрузку, которая эмулирует функцию TimescaleDB `time_bucket()`, а также функцию PostgreSQL `date_bin()` ([#55619](https://github.com/ClickHouse/ClickHouse/issues/55619)). Она позволяет выравнивать значения даты или временной метки по кратным заданному интервалу от *произвольной* точки отсчёта (вместо 0000-01-01 00:00:00.000 как *фиксированной* точки отсчёта). Например, `SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));` возвращает `2023-01-01 14:44:30`, которое кратно интервалу в 1 минуту, начиная от точки отсчёта `2023-01-01 14:35:30`. [#56738](https://github.com/ClickHouse/ClickHouse/pull/56738) ([Yarik Briukhovetskyi](https://github.com/yariks5s)). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/25_08.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/25_08.md index bf872d469b7..86379116691 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/25_08.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/25_08.md @@ -380,7 +380,7 @@ doc_type: 'changelog' * Некоррелированные `EXISTS` выполняются как скалярный подзапрос. Это позволяет использовать кэш скалярного подзапроса и выполнять константное свёртывание результата, что полезно для индексов. Для совместимости добавлена новая настройка `execute_exists_as_scalar_subquery=1`. [#85481](https://github.com/ClickHouse/ClickHouse/pull/85481) ([Nikolai Kochetov](https://github.com/KochetovNicolai)). * Добавлена поддержка большего числа случаев разрешения составных идентификаторов. В частности, это улучшает совместимость `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-tables-and-observability\} +### Системные таблицы и наблюдаемость \{#system-tables-and-observability\} * Добавлены метрики нагрузки в асинхронные метрики 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)). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md index a9530916a74..bf883feb215 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md @@ -11,7 +11,7 @@ import Image from '@theme/IdealImage'; import Architecture from '@site/static/images/cloud/reference/architecture.png'; -# Архитектура ClickHouse Cloud +# Архитектура ClickHouse Cloud {#clickhouse-cloud-architecture} Архитектура ClickHouse Cloud diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md index 9334fe0563b..973ac7dd258 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md @@ -181,9 +181,9 @@ ClickHouse Cloud выставляет счета исходя из исполь -## Часто задаваемые вопросы +## Часто задаваемые вопросы {#faqs} -### Что такое ClickHouse Credit (CHC)? +### Что такое ClickHouse Credit (CHC)? {#what-is-chc} ClickHouse Credit — это единица кредита на использование ClickHouse Cloud Клиентом, равная одному (1) доллару США и применяемая на основе актуального опубликованного прайс‑листа ClickHouse. @@ -191,27 +191,27 @@ ClickHouse Credit — это единица кредита на использо Если вы получаете счета через Stripe, то в своём счёте Stripe вы увидите, что 1 CHC равен $0.01 USD. Это необходимо для точного выставления счетов в Stripe из‑за ограничения сервиса, не позволяющего выставлять счета за дробные количества нашей стандартной позиции (SKU) 1 CHC = $1 USD. ::: -### Где я могу найти устаревшие (legacy) цены? +### Где я могу найти устаревшие (legacy) цены? {#find-legacy-pricing} Информацию об устаревших ценах можно найти [здесь](https://clickhouse.com/pricing?legacy=true). -### Как измеряется потребление вычислительных ресурсов (compute)? +### Как измеряется потребление вычислительных ресурсов (compute)? {#how-is-compute-metered} ClickHouse Cloud измеряет потребление вычислительных ресурсов поминутно, с шагом 8 ГБ ОЗУ. Стоимость вычислений зависит от уровня (tier), региона и поставщика облачных услуг. -### Как рассчитывается использование дискового хранилища? +### Как рассчитывается использование дискового хранилища? {#how-is-storage-on-disk-calculated} ClickHouse Cloud использует облачное объектное хранилище, а использование измеряется по сжатому размеру данных, хранящихся в таблицах ClickHouse. Стоимость хранения одинакова для всех уровней и зависит от региона и поставщика облачных услуг. -### Засчитываются ли резервные копии в общий объём хранилища? +### Засчитываются ли резервные копии в общий объём хранилища? {#do-backups-count-toward-total-storage} Хранилище и резервные копии учитываются при расчёте стоимости хранения и тарифицируются отдельными позициями. Все сервисы по умолчанию имеют одну резервную копию с хранением в течение одного дня. Пользователи, которым требуется больше резервных копий, могут настроить дополнительные [резервные копии](/cloud/manage/backups/overview) на вкладке настроек консоли Cloud. -### Как оценить степень сжатия? +### Как оценить степень сжатия? {#how-do-i-estimate-compression} Степень сжатия может различаться для разных наборов данных. Насколько именно — зависит от того, насколько данные вообще поддаются сжатию (количество полей с высокой и низкой кардинальностью) @@ -228,12 +228,12 @@ FROM system.tables WHERE name = <имя_вашей_таблицы> ``` -### Какие инструменты предоставляет ClickHouse для оценки стоимости работы сервиса в облаке, если у меня есть самостоятельное развертывание? +### Какие инструменты предоставляет ClickHouse для оценки стоимости работы сервиса в облаке, если у меня есть самостоятельное развертывание? {#what-tools-does-clickhouse-offer-to-estimate-the-cost-of-running-a-service-in-the-cloud-if-i-have-a-self-managed-deployment} Журнал запросов ClickHouse фиксирует [ключевые метрики](/operations/system-tables/query_log), которые можно использовать для оценки стоимости выполнения рабочей нагрузки в ClickHouse Cloud. Подробнее о миграции с самостоятельного развертывания в ClickHouse Cloud см. в [документации по миграции](/cloud/migration/clickhouse-to-cloud). Если у вас есть дополнительные вопросы, свяжитесь со [службой поддержки ClickHouse Cloud](https://console.clickhouse.cloud/support). -### Какие варианты биллинга доступны для ClickHouse Cloud? +### Какие варианты биллинга доступны для ClickHouse Cloud? {#what-billing-options-are-available-for-clickhouse-cloud} ClickHouse Cloud поддерживает следующие варианты биллинга: @@ -245,11 +245,11 @@ ClickHouse Cloud поддерживает следующие варианты б Кредиты ClickHouse Cloud для PAYG выставляются счетом с шагом $0.01, что позволяет взимать плату с клиентов за доли кредитов ClickHouse в зависимости от фактического использования. Это отличается от кредитов ClickHouse при фиксированном обязательстве по расходам, которые приобретаются авансом целыми единицами по $1. ::: -### Могу ли я удалить свою банковскую карту? +### Могу ли я удалить свою банковскую карту? {#can-i-delete-my-credit-card} Вы не можете удалить банковскую карту в интерфейсе Billing, но в любое время можете обновить данные карты. Это помогает гарантировать, что у вашей организации всегда есть действительный способ оплаты. Если вам необходимо удалить банковскую карту, обратитесь в [службу поддержки ClickHouse Cloud](https://console.clickhouse.cloud/support) за помощью. -### Какова продолжительность расчетного периода (billing cycle)? +### Какова продолжительность расчетного периода (billing cycle)? {#how-long-is-the-billing-cycle} Начисление платежей происходит помесячно, а датой начала считается день создания организации ClickHouse Cloud. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md index b6ff1f73648..7d06f313bdd 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md @@ -17,21 +17,19 @@ import aws_marketplace_payg_8 from '@site/static/images/cloud/manage/billing/mar import aws_marketplace_payg_9 from '@site/static/images/cloud/manage/billing/marketplace/aws-marketplace-payg-9.png'; import Image from '@theme/IdealImage'; -Начните работу с ClickHouse Cloud в [AWS Marketplace](https://aws.amazon.com/marketplace) через публичное предложение по модели PAYG (Pay-as-you-go, оплата по мере использования). +Начните работу с ClickHouse Cloud на [AWS Marketplace](https://aws.amazon.com/marketplace), воспользовавшись публичным предложением по модели PAYG (Pay-as-you-go). ## Предварительные требования {#prerequisites} -- Учетная запись AWS с правами на совершение покупок, предоставленными вашим администратором по биллингу. -- Для совершения покупки вы должны войти в AWS Marketplace под этой учетной записью. +- Учетная запись AWS с правами на совершение покупок, предоставленными администратором биллинга. +- Для совершения покупки вы должны быть авторизованы в AWS Marketplace под этой учетной записью. - Чтобы подключить организацию ClickHouse к вашей подписке, вы должны быть администратором этой организации. :::note -Одна учетная запись AWS может оформить только одну подписку «ClickHouse Cloud - Pay As You Go», которую можно связать только с одной организацией ClickHouse. +Одна учетная запись AWS может оформить только одну подписку «ClickHouse Cloud - Pay As You Go», которая может быть связана только с одной организацией ClickHouse. ::: - - ## Этапы регистрации {#steps-to-sign-up} @@ -44,46 +42,47 @@ import Image from '@theme/IdealImage'; ### Просмотрите варианты покупки {#purchase-options} -Нажмите на [страницу продукта](https://aws.amazon.com/marketplace/pp/prodview-p4gwofrqpkltu), а затем на **View purchase options**. +Нажмите на [листинг](https://aws.amazon.com/marketplace/pp/prodview-p4gwofrqpkltu), а затем на **View purchase options**. -Варианты покупки в AWS Marketplace +AWS Marketplace — просмотр вариантов покупки ### Оформите подписку {#subscribe} На следующем экране нажмите **Subscribe**. :::note -**Номер заказа на покупку (PO)** указывать необязательно, его можно не заполнять. +**Номер заказа на покупку (Purchase order, PO)** необязателен, им можно пренебречь. +**В этом листинге доступны два предложения.** Если вы выберете вариант «ClickHouse Cloud - Pay As You Go Free Trial», вы подпишетесь на управляемую AWS 30‑дневную бесплатную пробную версию. Однако по истечении 30 дней подписка на листинг завершится, и вам потребуется повторно оформить подписку уже на другое предложение «ClickHouse Cloud - Pay As You Go» в этом листинге, чтобы продолжить использовать ClickHouse Pay As You Go. ::: Оформление подписки в AWS Marketplace -### Настройте свою учетную запись {#set-up-your-account} +### Настройте учетную запись {#set-up-your-account} -Обратите внимание, что на данном этапе настройка еще не завершена, и вашей организации ClickHouse Cloud пока не выставляются счета через Marketplace. Теперь вам нужно нажать **Set up your account** в вашей подписке Marketplace, чтобы перейти в ClickHouse Cloud и завершить настройку. +Обратите внимание, что на этом этапе настройка еще не завершена, и ваша организация ClickHouse Cloud пока не тарифицируется через AWS Marketplace. Теперь вам нужно нажать **Set up your account** в подписке AWS Marketplace, чтобы перейти в ClickHouse Cloud и завершить настройку. Настройка учетной записи -После перенаправления в ClickHouse Cloud вы можете войти под существующей учетной записью или зарегистрировать новую. Этот шаг очень важен, поскольку он позволяет привязать вашу организацию ClickHouse Cloud к выставлению счетов через AWS Marketplace. +После перехода в ClickHouse Cloud вы можете либо войти с существующей учетной записью, либо зарегистрировать новую. Этот шаг очень важен, поскольку он позволяет привязать вашу организацию ClickHouse Cloud к биллингу AWS Marketplace. :::note[Новые пользователи ClickHouse Cloud] -Если вы новый пользователь ClickHouse Cloud, выполните действия, приведенные ниже. +Если вы новый пользователь ClickHouse Cloud, выполните шаги ниже. :::
Шаги для новых пользователей -Если вы новый пользователь ClickHouse Cloud, нажмите **Register** в нижней части страницы. Вам будет предложено создать нового пользователя и подтвердить адрес электронной почты. После подтверждения электронной почты вы можете закрыть страницу входа в ClickHouse Cloud и войти, используя новое имя пользователя, на https://console.clickhouse.cloud. +Если вы новый пользователь ClickHouse Cloud, нажмите **Register** внизу страницы. Вам будет предложено создать нового пользователя и подтвердить адрес электронной почты. После подтверждения email вы можете закрыть страницу входа ClickHouse Cloud и войти, используя новое имя пользователя, на https://console.clickhouse.cloud. Регистрация в ClickHouse Cloud :::note[Новые пользователи] -Вам также потребуется предоставить некоторую основную информацию о вашей компании. См. скриншоты ниже. +Вам также потребуется предоставить некоторую основную информацию о вашем бизнесе. См. скриншоты ниже. ::: -Прежде чем начать +Перед началом работы -Прежде чем начать, продолжение +Перед началом работы — продолжение
@@ -91,20 +90,18 @@ import Image from '@theme/IdealImage'; ### Добавьте подписку Marketplace к организации {#add-marketplace-subscription} -После успешного входа вы можете выбрать: создать новую организацию для выставления счетов по этой подписке Marketplace или использовать существующую организацию для выставления счетов по этой подписке. +После успешного входа вы можете выбрать, создать ли новую организацию для выставления счетов по этой подписке AWS Marketplace или использовать существующую организацию для выставления счетов по данной подписке. Добавление подписки Marketplace -После завершения этого шага ваша организация будет подключена к этой подписке AWS, и все потребление будет выставляться на оплату через ваш аккаунт AWS. +После завершения этого шага ваша организация будет подключена к этой подписке AWS, и все использование будет тарифицироваться через ваш AWS‑аккаунт. -На странице выставления счетов организации в интерфейсе ClickHouse вы можете убедиться, что биллинг теперь действительно связан с AWS Marketplace. +Вы можете убедиться на странице биллинга организации в интерфейсе ClickHouse, что биллинг теперь действительно связан с AWS Marketplace. -Подтверждение на странице выставления счетов +Подтверждение на странице биллинга
- - ## Поддержка {#support} -Если у вас возникнут какие-либо проблемы, обращайтесь в [нашу службу поддержки](https://clickhouse.com/support/program). +Если у вас возникнут проблемы, обращайтесь в [нашу службу поддержки](https://clickhouse.com/support/program). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx index 3b558008273..92da42236dd 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['выставление счетов', 'передача данных по сети', 'исходящий трафик данных', 'затраты', 'тарифы'] --- -import NetworkPricing from '@site/docs/cloud/reference/_snippets/_network_transfer_rates.md'; +import NetworkPricing from '@site/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/_snippets/_network_transfer_rates.md'; ClickHouse Cloud измеряет объем входящего и исходящего трафика данных. Сюда включаются любые данные, поступающие в ClickHouse Cloud и исходящие из него, а также diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md index fb7196cc702..6c1eb47aa27 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md @@ -7,9 +7,9 @@ keywords: ['выставление счетов', 'платёжные порог doc_type: 'guide' --- -# Платёжные пороги +# Платёжные пороги {#payment-thresholds} -Когда сумма к оплате за расчётный период в ClickHouse Cloud достигает 10 000 долларов США или эквивалентного значения, с вашего способа оплаты автоматически будет списана эта сумма. В случае неудачного списания по истечении льготного периода произойдёт приостановка или прекращение предоставления услуг. +Когда сумма к оплате за расчётный период в ClickHouse Cloud достигает 10 000 долларов США или эквивалентного значения, с вашего способа оплаты автоматически будет списана эта сумма. В случае неудачного списания по истечении льготного периода произойдёт приостановка или прекращение предоставления услуг. :::note Этот платёжный порог не применяется к клиентам, у которых есть контракт с обязательствами по расходам или иное согласованное договорное соглашение с ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md index c8be1b20642..a626d5451a4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md @@ -11,7 +11,7 @@ import billing_compliance from '@site/static/images/cloud/manage/billing_complia import Image from '@theme/IdealImage'; -# Соответствие биллинга ClickHouse Cloud нормативным требованиям +# Соответствие биллинга ClickHouse Cloud нормативным требованиям {#clickhouse-cloud-billing-compliance} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md index 1d55cea14f4..d73ce271c60 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md @@ -10,7 +10,7 @@ doc_type: 'reference' import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge' -# Поддерживаемые регионы облака +# Поддерживаемые регионы облака {#supported-cloud-regions} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md index 76ba9a1f762..b1672c3c75a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md @@ -10,8 +10,7 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-settings-sidebar.png'; - -# Настройка параметров +# Настройка параметров {#configuring-settings} Чтобы задать настройки для сервиса ClickHouse Cloud для конкретного [пользователя](/operations/access-rights#user-account-management) или [роли](/operations/access-rights#role-management), необходимо использовать [профили настроек на основе SQL](/operations/access-rights#settings-profiles-management). Применение профилей настроек гарантирует, что настроенные вами параметры сохранятся, даже когда ваши сервисы останавливаются, простаивают или обновляются. Чтобы узнать больше о профилях настроек, см. [эту страницу](/operations/settings/settings-profiles.md). @@ -19,4 +18,4 @@ import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-setti Чтобы узнать больше о параметрах, которые вы можете задать для сервиса ClickHouse Cloud, ознакомьтесь со всеми возможными настройками по категориям в [нашей документации](/operations/settings). -Боковая панель настроек Cloud \ No newline at end of file +Боковая панель настроек Cloud \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md index edbf038555c..f11b063df23 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md @@ -10,7 +10,7 @@ import BetaBadge from '@theme/badges/BetaBadge'; import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge'; -# Отчеты по безопасности и соответствию требованиям +# Отчеты по безопасности и соответствию требованиям {#security-and-compliance-reports} ClickHouse оценивает потребности наших клиентов в области безопасности и соответствия требованиям и постоянно расширяет программу по мере появления запросов на дополнительные отчеты. Для получения дополнительной информации или загрузки отчетов посетите наш [Центр доверия](https://trust.clickhouse.com). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md index d6deef65810..c9cd437f449 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md @@ -42,7 +42,7 @@ doc_type: 'guide' -## Запрос на закрытие учетной записи +## Запрос на закрытие учетной записи {#request-account-closure} Мы обязаны подтверждать подлинность запросов как на закрытие, так и на удаление. Чтобы обеспечить быструю обработку вашего запроса, выполните шаги, описанные ниже. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/index.md index 981f51e6dce..3f155deeacc 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/cloud/reference/index.md @@ -7,7 +7,7 @@ description: 'Посадочная страница справочного ра doc_type: 'landing-page' --- -# Справочник по ClickHouse Cloud +# Справочник по ClickHouse Cloud {#cloud-reference} Этот раздел служит справочным руководством по более техническим аспектам ClickHouse Cloud и содержит следующие страницы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/glossary.md b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/glossary.md index a2f99fd44b2..fe2c746f7ac 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/glossary.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/glossary.md @@ -10,7 +10,7 @@ doc_type: 'reference' {/* no-glossary */ } -# Глоссарий +# Глоссарий {#glossary} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/olap.md b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/olap.md index 62f06dd3cdb..4d2ba1dc70c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/olap.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/olap.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Что такое OLAP? +# Что такое OLAP? {#what-is-olap} [OLAP](https://en.wikipedia.org/wiki/Online_analytical_processing) расшифровывается как Online Analytical Processing. Это обобщающий термин, на который можно смотреть с двух точек зрения: технической и с точки зрения бизнеса. На самом базовом уровне можно просто прочитать эти слова в обратном порядке: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx index 1e9f2b6055e..026e1f11fb7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx @@ -18,7 +18,7 @@ doc_type: 'guide' ## Уровень хранения: одновременные вставки изолированы друг от друга \{#storage-layer-concurrent-inserts-are-isolated-from-each-other\} - + + + + + + + \ No newline at end of file + - + ## Как работают Projections? {#how-do-projections-work} -Практически Projection можно рассматривать как дополнительную, скрытую таблицу -к исходной таблице. Проекция может иметь иной порядок строк и, следовательно, -другой первичный индекс по сравнению с исходной таблицей, а также может -автоматически и по мере вставки данных предварительно вычислять агрегированные значения. -В результате использование Projections дает два «рычага настройки» для -ускорения выполнения запросов: +На практике Projection можно рассматривать как дополнительную скрытую таблицу для +исходной таблицы. Projection может иметь иной порядок строк и, следовательно, +другой первичный индекс по сравнению с исходной таблицей, а также может автоматически +и инкрементально предварительно вычислять агрегированные значения. В результате использование Projections +предоставляет два механизма оптимизации для ускорения выполнения запросов: - **Корректное использование первичных индексов** - **Предварительное вычисление агрегатов** Projections в некотором смысле похожи на [Materialized Views](/materialized-views), -которые также позволяют иметь несколько порядков строк и предварительно -вычислять агрегации во время вставки. +которые также позволяют иметь несколько порядков строк и предварительно вычислять агрегации +в момент вставки. Projections автоматически обновляются и -поддерживаются в актуальном состоянии и синхронизированными с исходной таблицей, -в отличие от Materialized Views, которые обновляются явно. Когда запрос направлен -к исходной таблице, ClickHouse автоматически сэмплирует первичные ключи и -выбирает таблицу, которая может сгенерировать тот же корректный результат, но -требует чтения наименьшего объема данных, как показано на рисунке ниже: +остаются синхронизированными с исходной таблицей, в отличие от Materialized Views, которые +обновляются явно. Когда запрос направлен к исходной таблице, +ClickHouse автоматически выбирает первичные ключи и таблицу, которая может +сгенерировать тот же корректный результат, но требует чтения наименьшего объема данных, как показано на рисунке ниже: Projections в 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} - -## Примеры - -### Фильтрация по столбцам, которые не входят в первичный ключ +### Фильтрация по столбцам, которые не входят в первичный ключ {#filtering-without-using-primary-keys} В этом примере мы покажем, как добавить проекцию к таблице. -Мы также рассмотрим, как можно использовать проекцию для ускорения запросов, которые фильтруют +Мы также рассмотрим, как проекция может использоваться для ускорения запросов, которые фильтруют по столбцам, не входящим в первичный ключ таблицы. В этом примере мы будем использовать набор данных 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 {#using-projections-to-speed-up-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` +и двух её проекций: -Визуализация основной таблицы 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 сек. ``` -### Дополнительные примеры -В следующих примерах используется тот же набор данных по ценам в Великобритании, чтобы сравнить запросы с проекциями и без них. +### Дополнительные примеры {#further-examples} -Чтобы сохранить нашу исходную таблицу (и производительность), мы снова создаём копию таблицы с помощью `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`: +#### Построим проекцию {#build-projection} + +Давайте создадим агрегатную проекцию по измерениям `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. Средняя годовая цена {#average-price-projections} ```sql runnable SELECT @@ -468,9 +456,10 @@ ORDER BY year ASC ``` -Результаты должны совпадать, но во втором примере производительность будет лучше! +Результат должен быть таким же, но производительность во втором примере будет лучше! -#### Запрос 2. Средняя цена по годам для Лондона + +#### Запрос 2. Средняя цена по годам в Лондоне {#average-price-london-projections} ```sql runnable SELECT @@ -495,9 +484,10 @@ GROUP BY year ORDER BY year ASC ``` -#### Запрос 3. Самые дорогие районы -Условие (date >= '2020-01-01') необходимо изменить так, чтобы оно соответствовало измерению проекции (`toYear(date) >= 2020)`: +#### Запрос 3. Самые дорогие районы {#most-expensive-neighborhoods-projections} + +Условие (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 теперь может использовать несколько -проекций для ускорения одного запроса с несколькими фильтрами. +### Комбинирование проекций в одном запросе {#combining-projections} -Важно, что ClickHouse по-прежнему читает данные только из одной проекции (или базовой таблицы), -но может использовать первичные индексы других проекций, чтобы отбросить ненужные парты до чтения. -Это особенно полезно для запросов, фильтрующих по нескольким столбцам, каждый из которых +Начиная с версии 25.6, на основе поддержки `_part_offset`, добавленной в +предыдущей версии, 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/deployment-guides/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/index.md index 8a88b6e12d5..0cc75531d29 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/index.md @@ -6,7 +6,7 @@ keywords: ['руководства по развертыванию', 'масшт doc_type: 'landing-page' --- -# Развертывание и масштабирование +# Развертывание и масштабирование {#deployment-and-scaling} В этом разделе рассматриваются следующие темы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx index 3b2ba9bedcf..d47248021a3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx @@ -20,15 +20,14 @@ import image_9 from '@site/static/images/deployment-guides/parallel-replicas-9.p - ## Введение \{#introduction\} -ClickHouse обрабатывает запросы чрезвычайно быстро, но как эти запросы -распределяются и выполняются параллельно на нескольких серверах? +ClickHouse обрабатывает запросы чрезвычайно быстро, но как эти запросы +распределяются и выполняются параллельно на нескольких серверах? > В этом руководстве мы сначала рассмотрим, как ClickHouse распределяет запрос -по нескольким шардам с помощью распределённых таблиц, а затем как запрос может -задействовать несколько реплик при выполнении. +> по нескольким шардам с помощью распределённых таблиц, а затем как запрос может +> задействовать несколько реплик при выполнении. ## Шардированная архитектура \{#sharded-architecture\} @@ -48,24 +47,27 @@ ClickHouse обрабатывает запросы чрезвычайно быс На рисунке выше показано, что происходит, когда клиент отправляет запрос к распределённой таблице:
    -
  1. - Запрос SELECT отправляется к распределённой таблице на произвольный узел - (по стратегии round-robin или после маршрутизации балансировщиком нагрузки - на конкретный сервер). Этот узел теперь будет выступать координатором. -
  2. -
  3. - Узел определяет, какие шарды должны выполнить запрос, - используя информацию, указанную в распределённой таблице, и отправляет - запрос на каждый шард. -
  4. -
  5. - Каждый шард локально читает, фильтрует и агрегирует данные, а затем - отправляет агрегируемое состояние координатору. -
  6. -
  7. - Координирующий узел объединяет данные и затем отправляет ответ - обратно клиенту. -
  8. +
  9. + Запрос SELECT отправляется к распределённой таблице на произвольный узел + (по стратегии round-robin или после маршрутизации балансировщиком нагрузки + на конкретный сервер). Этот узел теперь будет выступать координатором. +
  10. + +
  11. + Узел определяет, какие шарды должны выполнить запрос, + используя информацию, указанную в распределённой таблице, и отправляет + запрос на каждый шард. +
  12. + +
  13. + Каждый шард локально читает, фильтрует и агрегирует данные, а затем + отправляет агрегируемое состояние координатору. +
  14. + +
  15. + Координирующий узел объединяет данные и затем отправляет ответ + обратно клиенту. +
Когда мы добавляем реплики, процесс в целом остаётся похожим, с единственным @@ -75,7 +77,7 @@ ClickHouse обрабатывает запросы чрезвычайно быс ## Нешардированная архитектура \{#non-sharded-architecture\} ClickHouse Cloud имеет архитектуру, существенно отличающуюся от представленной выше. -(См. раздел ["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) +(См. раздел ["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) для получения более подробной информации). Благодаря разделению вычислительных ресурсов и хранилища, а также практически неограниченному объёму хранилища, необходимость в шардах во многом отпадает. @@ -112,26 +114,30 @@ ClickHouse Cloud имеет архитектуру, существенно от При использовании параллельных реплик:
    -
  1. - Запрос от клиента отправляется на один узел после прохождения через - балансировщик нагрузки. Этот узел становится координатором для данного запроса. -
  2. -
  3. - Узел анализирует индекс каждой партиции и выбирает подходящие партиции и - гранулы для обработки. -
  4. -
  5. - Координатор разбивает нагрузку на набор гранул, который можно - распределить между разными репликами. -
  6. -
  7. - Каждый набор гранул обрабатывается соответствующими репликами, и по - завершении на координатор отправляется состояние, пригодное для слияния. -
  8. -
  9. - Наконец, координатор объединяет все результаты от реплик и - возвращает ответ клиенту. -
  10. +
  11. + Запрос от клиента отправляется на один узел после прохождения через + балансировщик нагрузки. Этот узел становится координатором для данного запроса. +
  12. + +
  13. + Узел анализирует индекс каждой партиции и выбирает подходящие партиции и + гранулы для обработки. +
  14. + +
  15. + Координатор разбивает нагрузку на набор гранул, который можно + распределить между разными репликами. +
  16. + +
  17. + Каждый набор гранул обрабатывается соответствующими репликами, и по + завершении на координатор отправляется состояние, пригодное для слияния. +
  18. + +
  19. + Наконец, координатор объединяет все результаты от реплик и + возвращает ответ клиенту. +
Вышеописанные шаги показывают, как параллельные реплики работают в теории. @@ -139,22 +145,25 @@ ClickHouse Cloud имеет архитектуру, существенно от идеальной работе такого механизма:
    -
  1. - Некоторые реплики могут быть недоступны. -
  2. -
  3. - Репликация в ClickHouse асинхронная, поэтому в какой-то момент времени - на некоторых репликах могут отсутствовать те же самые части. -
  4. -
  5. - Нужно как‑то обрабатывать «хвостовые» задержки между репликами. -
  6. -
  7. - Кэш файловой системы различается от реплики к реплике в зависимости - от активности на каждой реплике, поэтому случайное назначение - задач может привести к менее оптимальной производительности с точки - зрения локальности кэша. -
  8. +
  9. + Некоторые реплики могут быть недоступны. +
  10. + +
  11. + Репликация в ClickHouse асинхронная, поэтому в какой-то момент времени + на некоторых репликах могут отсутствовать те же самые части. +
  12. + +
  13. + Нужно как‑то обрабатывать «хвостовые» задержки между репликами. +
  14. + +
  15. + Кэш файловой системы различается от реплики к реплике в зависимости + от активности на каждой реплике, поэтому случайное назначение + задач может привести к менее оптимальной производительности с точки + зрения локальности кэша. +
В следующих разделах мы рассмотрим, как удаётся преодолеть эти факторы. @@ -167,30 +176,33 @@ ClickHouse Cloud имеет архитектуру, существенно от Объявления
    -
  1. - Запрос от клиента после прохождения через балансировщик нагрузки - отправляется на один из узлов. Этот узел становится координатором для данного запроса. -
  2. -
  3. - Узел-координатор отправляет запрос на получение объявлений от всех - реплик в кластере. У реплик могут быть немного разные представления о - текущем наборе частей (parts) таблицы. Поэтому нам нужно - собрать эту информацию, чтобы избежать неверных решений при - планировании. -
  4. -
  5. - Затем узел-координатор использует объявления, чтобы определить набор - гранул, которые можно назначить различным репликам. Здесь, например, - мы видим, что ни одна гранула из part 3 не была назначена - реплике 2, потому что эта реплика не указала эту часть в своем - объявлении. Также обратите внимание, что реплике 3 не были назначены - никакие задачи, потому что она не предоставила объявление. -
  6. -
  7. - После того как каждая реплика обработала запрос на своем подмножестве - гранул и объединяемое состояние было отправлено обратно координатору, - координатор объединяет результаты, и ответ отправляется клиенту. -
  8. +
  9. + Запрос от клиента после прохождения через балансировщик нагрузки + отправляется на один из узлов. Этот узел становится координатором для данного запроса. +
  10. + +
  11. + Узел-координатор отправляет запрос на получение объявлений от всех + реплик в кластере. У реплик могут быть немного разные представления о + текущем наборе частей (parts) таблицы. Поэтому нам нужно + собрать эту информацию, чтобы избежать неверных решений при + планировании. +
  12. + +
  13. + Затем узел-координатор использует объявления, чтобы определить набор + гранул, которые можно назначить различным репликам. Здесь, например, + мы видим, что ни одна гранула из part 3 не была назначена + реплике 2, потому что эта реплика не указала эту часть в своем + объявлении. Также обратите внимание, что реплике 3 не были назначены + никакие задачи, потому что она не предоставила объявление. +
  14. + +
  15. + После того как каждая реплика обработала запрос на своем подмножестве + гранул и объединяемое состояние было отправлено обратно координатору, + координатор объединяет результаты, и ответ отправляется клиенту. +
### Динамическая координация \{#dynamic-coordination\} @@ -208,42 +220,46 @@ ClickHouse Cloud имеет архитектуру, существенно от Динамическая координация — часть 1
    -
  1. - Реплики уведомляют узел-координатор, что они готовы обрабатывать - задания, также они могут указать, какой объём работы могут выполнить. -
  2. -
  3. - Координатор назначает задания репликам. -
  4. +
  5. + Реплики уведомляют узел-координатор, что они готовы обрабатывать + задания, также они могут указать, какой объём работы могут выполнить. +
  6. + +
  7. + Координатор назначает задания репликам. +
Динамическая координация — часть 2
    -
  1. - Реплики 1 и 2 могут очень быстро завершить свои задания. Они - запрашивают у узла-координатора новое задание. -
  2. -
  3. - Координатор назначает новые задания репликам 1 и 2. -
  4. +
  5. + Реплики 1 и 2 могут очень быстро завершить свои задания. Они + запрашивают у узла-координатора новое задание. +
  6. + +
  7. + Координатор назначает новые задания репликам 1 и 2. +
Динамическая координация — часть 3
    -
  1. - Все реплики завершили обработку своих заданий. Они - запрашивают дополнительные задания. -
  2. -
  3. - Координатор, используя объявления, проверяет, какие задания - ещё нужно обработать, но оставшихся заданий нет. -
  4. -
  5. - Координатор сообщает репликам, что всё обработано. - Теперь он объединит все состояния, подлежащие слиянию, и вернёт ответ на запрос. -
  6. +
  7. + Все реплики завершили обработку своих заданий. Они + запрашивают дополнительные задания. +
  8. + +
  9. + Координатор, используя объявления, проверяет, какие задания + ещё нужно обработать, но оставшихся заданий нет. +
  10. + +
  11. + Координатор сообщает репликам, что всё обработано. + Теперь он объединит все состояния, подлежащие слиянию, и вернёт ответ на запрос. +
### Управление локальностью кэша \{#managing-cache-locality\} @@ -253,34 +269,38 @@ ClickHouse Cloud имеет архитектуру, существенно от реплику? В предыдущем примере у нас были назначены следующие задачи: - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Реплика 1Реплика 2Реплика 3
Часть 1g1, g6, g7g2, g4, g5g3
Часть 2g1g2, g4, г5g3
Часть 3g1, g6g2, g4, g5g3
+ + Реплика 1Реплика 2Реплика 3
Часть 1g1, g6, g7g2, g4, g5g3
Часть 2g1g2, g4, г5g3
Часть 3g1, g6g2, g4, g5g3
Чтобы гарантировать, что одни и те же задачи назначаются одним и тем же репликам и могут @@ -322,13 +342,13 @@ ClickHouse Cloud имеет архитектуру, существенно от | Setting | Description | |----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `enable_parallel_replicas` | `0`: отключено
`1`: включено
`2`: принудительное использование параллельных реплик, будет сгенерировано исключение, если они не используются. | +| `enable_parallel_replicas` | `0`: отключено
`1`: включено
`2`: принудительное использование параллельных реплик, будет сгенерировано исключение, если они не используются. | | `cluster_for_parallel_replicas` | Имя кластера, используемого для параллельной репликации; если вы используете ClickHouse Cloud, используйте `default`. | | `max_parallel_replicas` | Максимальное количество реплик, используемых для выполнения запроса на нескольких репликах; если указано число, меньшее количества реплик в кластере, узлы будут выбираться случайным образом. Это значение также может быть завышено с учетом горизонтального масштабирования. | -| `parallel_replicas_min_number_of_rows_per_replica` | Позволяет ограничить количество используемых реплик на основе числа строк, которые необходимо обработать. Количество реплик определяется как:
`estimated rows to read` / `min_number_of_rows_per_replica`. | -| `allow_experimental_analyzer` | `0`: использовать старый анализатор
`1`: использовать новый анализатор.

Поведение параллельных реплик может изменяться в зависимости от используемого анализатора. | +| `parallel_replicas_min_number_of_rows_per_replica` | Позволяет ограничить количество используемых реплик на основе числа строк, которые необходимо обработать. Количество реплик определяется как:
`estimated rows to read` / `min_number_of_rows_per_replica`. | +| `allow_experimental_analyzer` | `0`: использовать старый анализатор
`1`: использовать новый анализатор.

Поведение параллельных реплик может изменяться в зависимости от используемого анализатора. | -## Диагностика проблем с параллельными репликами +## Диагностика проблем с параллельными репликами \{#investigating-issues-with-parallel-replicas\} Вы можете проверить, какие настройки используются для каждого запроса, в таблице [`system.query_log`](/docs/operations/system-tables/query_log). Также можно @@ -345,7 +365,6 @@ FROM clusterAllReplicas('default', system.events) WHERE event ILIKE '%ParallelReplicas%' ``` -
Ответ @@ -407,7 +426,6 @@ WHERE query_id = 'ad40c712-d25d-45c4-b1a1-a28ba8d4019c' ORDER BY event_time_microseconds ASC ``` -
Ответ diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md index 422b9c6299b..a296abf4133 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md @@ -9,19 +9,19 @@ keywords: ['репликация', 'высокая доступность', 'н --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ReplicationArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/replication.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > В этом примере вы узнаете, как настроить простой кластер ClickHouse, > который реплицирует данные. Настроено пять серверов. Два из них используются для @@ -34,7 +34,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## Предварительные требования {#pre-requisites} - Ранее вы уже развернули [локальный сервер ClickHouse](/install) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md index 7427ef5c9a6..58bcf8416d9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md @@ -9,19 +9,19 @@ keywords: ['шардинг', 'горизонтальное масштабиро --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ShardingArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/sharding.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > В этом примере вы узнаете, как настроить простой масштабируемый кластер ClickHouse. > Настроено пять серверов: два используются для шардинга данных, @@ -33,7 +33,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## Предварительные требования {#pre-requisites} - Вы уже развернули [локальный сервер ClickHouse](/install) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md index cb9c3396663..39f4926da33 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md @@ -10,14 +10,14 @@ keywords: ['развертывание кластера', 'репликация' import Image from '@theme/IdealImage'; import SharedReplicatedArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/both.png'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import KeeperConfig from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > В этом примере вы узнаете, как развернуть простой кластер ClickHouse, который > одновременно обеспечивает репликацию и масштабирование. Он состоит из двух шардов и двух реплик, @@ -30,7 +30,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## Предварительные требования {#prerequisites} - Вы уже развернули [локальный сервер ClickHouse](/install) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md index 79c7c7312a7..939fb1924f7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md @@ -8,7 +8,7 @@ doc_type: 'guide' keywords: ['развертывание', 'архитектура', 'репликация', 'шардинг', 'настройка кластера'] --- -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; Примеры развертывания в этом разделе основаны на рекомендациях, которые организация ClickHouse Support and Services предоставляет пользователям ClickHouse. Это рабочие примеры, и мы рекомендуем опробовать их, а затем адаптировать под свои нужды. Возможно, вы найдете здесь пример, который точно соответствует вашим требованиям. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/architecture.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/architecture.md index 15fe339f87b..68393afea8a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/architecture.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/architecture.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Обзор архитектуры +# Обзор архитектуры {#architecture-overview} ClickHouse — это по-настоящему колоночная СУБД. Данные хранятся по столбцам и при выполнении запросов обрабатываются массивами (векторами или чанками столбцов). По возможности операции выполняются над массивами, а не над отдельными значениями. @@ -242,7 +242,7 @@ IO‑пул потоков реализован как обычный `ThreadPoo -## Контроль параллелизма +## Контроль параллелизма {#concurrency-control} Запрос, который может выполняться параллельно, использует настройку `max_threads`, чтобы ограничить количество потоков. Значение по умолчанию для этой настройки выбирается таким образом, чтобы один запрос мог наилучшим образом использовать все ядра CPU. Но что, если есть несколько одновременно выполняющихся запросов, и каждый из них использует значение `max_threads` по умолчанию? Тогда запросы будут делить ресурсы CPU. ОС будет обеспечивать справедливое распределение, постоянно переключая потоки, что вносит дополнительные накладные расходы и снижает производительность. `ConcurrencyControl` помогает снизить эти накладные расходы и избежать создания слишком большого числа потоков. Настройка конфигурации `concurrent_threads_soft_limit_num` используется для ограничения того, сколько одновременно выполняющихся потоков может быть выделено до начала применения механизма ограничения нагрузки на CPU. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-arm.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-arm.md index f501a0db522..0a9f8a05c4e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-arm.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-arm.md @@ -7,7 +7,7 @@ title: 'Как собрать ClickHouse на Linux для AARCH64' doc_type: 'guide' --- -# Как собрать ClickHouse на Linux для AArch64 +# Как собрать ClickHouse на Linux для AArch64 {#how-to-build-clickhouse-on-linux-for-aarch64} Для сборки ClickHouse для AArch64 на машине с архитектурой AArch64 не требуются специальные действия. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md index 81da9c998c9..4909b955874 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md @@ -7,15 +7,11 @@ title: 'Сборка на Linux для LoongArch64' doc_type: 'guide' --- - - -# Сборка под Linux для LoongArch64 +# Сборка под Linux для LoongArch64 {#build-on-linux-for-loongarch64} ClickHouse экспериментально поддерживает LoongArch64 - - -## Сборка ClickHouse +## Сборка ClickHouse {#build-clickhouse} Для сборки требуется версия LLVM не ниже 19.1.0. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-osx.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-osx.md index c60419fe21c..8db0f37e816 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-osx.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-osx.md @@ -7,9 +7,7 @@ title: 'Сборка на Linux для macOS' doc_type: 'guide' --- - - -# Как собрать ClickHouse на Linux для macOS +# Как собрать ClickHouse на Linux для macOS {#how-to-build-clickhouse-on-linux-for-macos} Этот документ описывает случай, когда у вас есть машина под управлением Linux, и вы хотите использовать её для сборки бинарного файла `clickhouse`, который будет запускаться на OS X. Основной сценарий использования — проверки в системе непрерывной интеграции, выполняющиеся на Linux-машинах. @@ -21,9 +19,7 @@ doc_type: 'guide' Если вы нацеливаетесь на архитектуру ARM, просто замените все вхождения `x86_64` на `aarch64`. Например, замените `x86_64-apple-darwin` на `aarch64-apple-darwin` на всех этапах. - - -## Установите набор инструментов для кросс-компиляции +## Установите набор инструментов для кросс-компиляции {#install-cross-compilation-toolset} Запомните путь, по которому установлен `cctools`, и обозначьте его как `${CCTOOLS}` @@ -53,8 +49,7 @@ cd ClickHouse/cmake/toolchain/darwin-x86_64 curl -L 'https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.0.sdk.tar.xz' | tar xJ --strip-components=1 ``` - -## Сборка ClickHouse +## Сборка ClickHouse {#build-clickhouse} ```bash cd ClickHouse diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md index 2dc84d6b925..5a005dfb09a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md @@ -7,15 +7,11 @@ title: 'Как собрать ClickHouse на Linux для RISC-V 64' doc_type: 'guide' --- - - -# Как собрать ClickHouse на Linux для RISC-V 64 +# Как собрать ClickHouse на Linux для RISC-V 64 {#how-to-build-clickhouse-on-linux-for-risc-v-64} В ClickHouse есть экспериментальная поддержка архитектуры RISC-V. Доступны не все возможности. - - -## Сборка ClickHouse +## Сборка ClickHouse {#build-clickhouse} Для кросс-компиляции под RISC-V на машине, не основанной на RISC-V: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md index f746fd08ccf..ce92400081d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md @@ -7,39 +7,24 @@ title: 'Сборка на Linux для s390x (zLinux)' doc_type: 'guide' --- +# Сборка в Linux для s390x (zLinux) {#build-on-linux-for-s390x-zlinux} +ClickHouse в экспериментальном режиме поддерживает архитектуру s390x. -# Сборка в Linux для s390x (zLinux) +## Сборка ClickHouse для s390x {#building-clickhouse-for-s390x} -В ClickHouse имеется экспериментальная поддержка архитектуры s390x. +На платформе s390x, как и на других платформах, OpenSSL собирается как статическая библиотека. Если вы хотите собрать с динамическим OpenSSL, необходимо передать `-DENABLE_OPENSSL_DYNAMIC=1` в CMake. - - -## Сборка ClickHouse для s390x - -Для s390x есть две опции сборки, связанные с OpenSSL: - -* По умолчанию OpenSSL на s390x собирается как динамическая библиотека. Это отличается от всех остальных платформ, где OpenSSL собирается как статическая библиотека. -* Чтобы, несмотря на это, собрать OpenSSL как статическую библиотеку, передайте `-DENABLE_OPENSSL_DYNAMIC=0` в CMake. - -В этих инструкциях предполагается, что хост‑система — x86_64 и на ней установлены все инструменты, необходимые для нативной сборки, согласно [инструкциям по сборке](../development/build.md). Также предполагается, что хост работает под управлением Ubuntu 22.04, но следующие инструкции также должны работать на Ubuntu 20.04. +В этих инструкциях предполагается, что хостовая система — Linux x86_64/ARM и на ней установлены все инструменты, необходимые для нативной сборки в соответствии с [инструкцией по сборке](../development/build.md). Также предполагается, что хост — Ubuntu 22.04, но приведённые ниже инструкции также должны работать на Ubuntu 20.04. Помимо установки инструментов, используемых для нативной сборки, необходимо установить следующие дополнительные пакеты: ```bash -apt-get install binutils-s390x-linux-gnu libc6-dev-s390x-cross gcc-s390x-linux-gnu binfmt-support qemu-user-static -``` - -Если вы хотите выполнить кросс-компиляцию кода на Rust, установите целевой таргет Rust для архитектуры s390x: - -```bash +apt-get mold rustup target add s390x-unknown-linux-gnu ``` -Для сборки под s390x используется линкер mold. Скачайте его по ссылке [https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz](https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz) -и добавьте его в `$PATH`. - -Чтобы выполнить сборку для s390x: +Сборка для s390x: ```bash cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake .. @@ -47,30 +32,37 @@ ninja ``` -## Запуск +## Запуск {#running} + +Для эмуляции вам понадобится статический бинарник qemu-user для s390x. В Ubuntu его можно установить с помощью: + +```bash +apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-static +``` -После сборки бинарного файла его можно запустить, например, так: +После сборки бинарный файл можно запустить, например, так: ```bash -qemu-s390x-static -L /usr/s390x-linux-gnu ./clickhouse +qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2" +2 ``` -## Отладка +## Отладка {#debugging} Установите LLDB: ```bash -apt-get install lldb-15 +apt-get install lldb-21 ``` -Чтобы отладить исполняемый файл s390x, запустите ClickHouse под QEMU в отладочном режиме: +Чтобы отладить исполняемый файл s390x, запустите ClickHouse с помощью QEMU в режиме отладки: ```bash qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouse ``` -В другом терминале запустите LLDB и подключитесь к процессу, заменив `` и `` на значения, соответствующие вашей среде. +В другом терминале запустите LLDB и присоединитесь к процессу, заменив `` и `` на значения, соответствующие вашей среде. ```bash lldb-15 @@ -102,16 +94,16 @@ Process 1 stopped ``` -## Интеграция с Visual Studio Code +## Интеграция с Visual Studio Code {#visual-studio-code-integration} -* Для визуальной отладки требуется расширение [CodeLLDB](https://github.com/vadimcn/vscode-lldb). -* Расширение [Command Variable](https://github.com/rioj7/command-variable) может помочь с динамическим запуском при использовании [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md). -* Убедитесь, что в качестве бэкенда указана ваша установка LLVM, например: `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so"`. -* Перед запуском обязательно запустите исполняемый файл clickhouse в режиме отладки. (Также можно создать `preLaunchTask`, который автоматизирует это.) +- Для визуальной отладки требуется расширение [CodeLLDB](https://github.com/vadimcn/vscode-lldb). +- Расширение [Command Variable](https://github.com/rioj7/command-variable) может упростить динамический запуск при использовании [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md). +- Убедитесь, что бекенд настроен на вашу установку LLVM, например: `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"`. +- Перед запуском визуальной отладки предварительно запустите исполняемый файл clickhouse в режиме отладки. (Также можно создать задачу `preLaunchTask`, которая автоматизирует это.) -### Примеры конфигураций +### Примеры конфигураций {#example-configurations} -#### cmake-variants.yaml +#### cmake-variants.yaml {#cmake-variantsyaml} ```yaml buildType: @@ -127,11 +119,11 @@ buildType: buildType: Release relwithdebinfo: short: RelWithDebInfo - long: Релиз с отладочной информацией + long: Релизная сборка с отладочной информацией buildType: RelWithDebInfo tsan: short: MinSizeRel - long: Релиз минимального размера + long: Релизная сборка минимального размера buildType: MinSizeRel toolchain: @@ -148,7 +140,8 @@ toolchain: CMAKE_TOOLCHAIN_FILE: cmake/linux/toolchain-s390x.cmake ``` -#### launch.json + +#### launch.json {#launchjson} ```json { @@ -160,24 +153,26 @@ toolchain: "name": "(lldb) Запуск s390x с qemu", "targetCreateCommands": ["target create ${command:cmake.launchTargetPath}"], "processCreateCommands": ["gdb-remote 2159"], - "preLaunchTask": "Запустить ClickHouse" + "preLaunchTask": "Запуск ClickHouse" } ] } ``` -#### settings.json -Это также поместит разные сборки в разные подкаталоги каталога `build`. +#### settings.json {#settingsjson} + +Это также поместит разные сборки в разные подпапки в каталоге `build`. ```json { "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}", - "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so" + "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so" } ``` -#### run-debug.sh + +#### run-debug.sh {#run-debugsh} ```sh #! /bin/sh @@ -186,9 +181,10 @@ cd $1 qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4 ``` -#### tasks.json -Определяет задачу для запуска скомпилированного исполняемого файла в режиме `server` в папке `tmp` рядом с бинарными файлами, с использованием конфигурации из `programs/server/config.xml`. +#### tasks.json {#tasksjson} + +Определяет задачу для запуска скомпилированного исполняемого файла в режиме `server` в подкаталоге `tmp` рядом с бинарными файлами, с использованием конфигурации из файла `programs/server/config.xml`. ```json { diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-e2k.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-e2k.md index 55afd833d76..bf39aaab6de 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-e2k.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-e2k.md @@ -7,15 +7,11 @@ title: 'Сборка на Linux для E2K' doc_type: 'guide' --- - - -# Сборка на Linux для E2K +# Сборка на Linux для E2K {#build-on-linux-for-e2k} В ClickHouse имеется крайне экспериментальная поддержка архитектуры E2K (Эльбрус‑2000), и он может быть скомпилирован только в нативном режиме с минимальной конфигурацией, используя специально собранные для E2K библиотеки, такие как Boost, CRoaring, libunwind, Zstd. - - -## Сборка ClickHouse +## Сборка ClickHouse {#build-clickhouse} Требуемая версия LLVM для сборки должна быть не ниже 20.1.8. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-osx.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-osx.md index 256755ec317..268a7a472cf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build-osx.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build-osx.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# Как собрать ClickHouse на macOS для macOS +# Как собрать ClickHouse на macOS для macOS {#how-to-build-clickhouse-on-macos-for-macos} :::info Вам не нужно собирать ClickHouse самостоятельно! Вы можете установить предварительно собранный ClickHouse, как описано в разделе [Quick Start](https://clickhouse.com/#quick-start). @@ -22,7 +22,7 @@ ClickHouse можно скомпилировать на macOS x86_64 (Intel) и -## Установка необходимых компонентов +## Установка необходимых компонентов {#install-prerequisites} Сначала ознакомьтесь с общей [документацией по предварительным требованиям](developer-instruction.md). @@ -53,7 +53,7 @@ mkdir build export PATH=$(brew --prefix llvm)/bin:$PATH cmake -S . -B build cmake --build build -# Итоговый исполняемый файл будет создан по пути: build/programs/clickhouse +# Итоговый исполняемый файл будет создан по пути: build/programs/clickhouse {#the-resulting-binary-will-be-created-at-buildprogramsclickhouse} ``` :::note @@ -62,7 +62,7 @@ cmake --build build ::: -## Особенности +## Особенности {#caveats} Если вы планируете запускать `clickhouse-server`, убедитесь, что значение системной переменной `maxfiles` увеличено. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/build.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/build.md index 2c7bead66c9..ce75f3f75d1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/build.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/build.md @@ -1,5 +1,5 @@ --- -description: 'Пошаговое руководство по сборке ClickHouse из исходного кода на Linux-системах' +description: 'Пошаговое руководство по сборке ClickHouse из исходников в операционных системах Linux' sidebar_label: 'Сборка на Linux' sidebar_position: 10 slug: /development/build @@ -7,15 +7,13 @@ title: 'Как собрать ClickHouse на Linux' doc_type: 'guide' --- - - -# Как собрать ClickHouse под Linux +# Как собрать ClickHouse под Linux {#how-to-build-clickhouse-on-linux} :::info Вам не обязательно собирать ClickHouse самостоятельно! -Вы можете установить уже собранный ClickHouse, как описано в разделе [Quick Start](https://clickhouse.com/#quick-start). +Вы можете установить уже собранный ClickHouse, как описано в разделе [Быстрый старт](https://clickhouse.com/#quick-start). ::: -ClickHouse можно собрать на следующих платформах: +ClickHouse может быть собран на следующих платформах: - x86_64 - AArch64 @@ -23,24 +21,20 @@ ClickHouse можно собрать на следующих платформа - s390/x (экспериментально) - RISC-V 64 (экспериментально) - - ## Предположения {#assumptions} -Данное руководство основано на Ubuntu Linux, но при соответствующих изменениях оно должно работать и на любом другом дистрибутиве Linux. +Данное руководство рассчитано на использование в Ubuntu Linux, но при соответствующей настройке оно также должно работать и на любом другом дистрибутиве Linux. Минимально рекомендуемая версия Ubuntu для разработки — 24.04 LTS. -В руководстве предполагается, что у вас локально клонирован репозиторий ClickHouse со всеми подмодулями. - - +Руководство исходит из того, что вы локально клонировали репозиторий ClickHouse со всеми подмодулями. -## Установка предварительных требований +## Установка необходимых зависимостей {#install-prerequisites} Сначала ознакомьтесь с общей [документацией по предварительным требованиям](developer-instruction.md). -ClickHouse при сборке использует CMake и Ninja. +ClickHouse использует CMake и Ninja для сборки. -При желании вы можете установить ccache, чтобы сборка повторно использовала уже скомпилированные объектные файлы. +При желании вы можете установить ccache, чтобы при сборке повторно использовать уже скомпилированные объектные файлы. ```bash sudo apt-get update @@ -48,34 +42,32 @@ sudo apt-get install build-essential git cmake ccache python3 ninja-build nasm y ``` -## Установите компилятор Clang +## Установите компилятор Clang {#install-the-clang-compiler} -Чтобы установить Clang на Ubuntu/Debian, используйте скрипт автоматической установки LLVM с сайта [apt.llvm.org](https://apt.llvm.org/). +Чтобы установить Clang в Ubuntu/Debian, используйте автоматический скрипт установки LLVM, доступный [здесь](https://apt.llvm.org/). ```bash sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ``` -Для других дистрибутивов Linux проверьте, доступны ли для установки какие-либо [предварительно собранные пакеты LLVM](https://releases.llvm.org/download.html). +Для других дистрибутивов Linux проверьте, можно ли установить один из [предварительно собранных пакетов LLVM](https://releases.llvm.org/download.html). -По состоянию на март 2025 года требуется Clang 19 или новее. -GCC и другие компиляторы не поддерживаются. +По состоянию на март 2025 года требуется Clang 19 или выше. +Компилятор GCC и другие компиляторы не поддерживаются. -## Установите компилятор Rust (необязательно) {#install-the-rust-compiler-optional} +## Установка компилятора Rust (необязательно) {#install-the-rust-compiler-optional} :::note -Rust является необязательной зависимостью ClickHouse. -Если Rust не установлен, некоторые возможности ClickHouse не будут включены в сборку. +Rust является необязательной зависимостью для ClickHouse. +Если Rust не установлен, некоторые функции ClickHouse не будут включены в сборку. ::: Сначала выполните шаги из официальной [документации по Rust](https://www.rust-lang.org/tools/install), чтобы установить `rustup`. -Как и для зависимостей C++, ClickHouse использует vendoring, чтобы точно контролировать, что именно устанавливается, и избежать зависимости от сторонних сервисов (таких как реестр `crates.io`). - -Хотя в режиме release любая современная версия toolchain в rustup для Rust должна работать с этими зависимостями, если вы планируете включить санитайзеры, необходимо использовать версию, которая использует точно такую же `std`, как и та, что применяется в CI (для которой мы вендорим crates): - +Так же, как и для зависимостей C++, ClickHouse использует vendoring, чтобы точно контролировать состав устанавливаемых компонентов и не зависеть от сторонних сервисов (таких как реестр `crates.io`). +Хотя в режиме release любая современная версия toolchain `rustup` должна работать с этими зависимостями, если вы планируете включить санитайзеры, необходимо использовать версию, у которой `std` в точности совпадает с той, что используется в CI (для которой мы вендорим соответствующие crates): ```bash rustup toolchain install nightly-2025-07-07 @@ -83,34 +75,35 @@ rustup default nightly-2025-07-07 rustup component add rust-src ``` -## Сборка ClickHouse -Рекомендуем создать отдельный каталог `build` внутри `ClickHouse`, в котором будут находиться все артефакты сборки: +## Сборка ClickHouse {#build-clickhouse} + +Мы рекомендуем создать отдельный каталог `build` внутри `ClickHouse`, в котором будут храниться все артефакты сборки: ```sh mkdir build cd build ``` -Вы можете создавать несколько разных каталогов (например, `build_release`, `build_debug` и т.д.) для различных типов сборки. +Вы можете использовать несколько разных каталогов (например, `build_release`, `build_debug` и т. д.) для разных типов сборок. -Необязательно: если у вас установлено несколько версий компилятора, вы можете при необходимости указать, какой компилятор использовать. +Необязательный шаг: если у вас установлено несколько версий компилятора, при необходимости вы можете указать конкретный компилятор, который следует использовать. ```sh export CC=clang-19 export CXX=clang++-19 ``` -Для разработки рекомендуется использовать отладочные сборки. -По сравнению с релизными сборками, у них ниже уровень оптимизации компилятора (`-O`), что обеспечивает более удобную отладку. -Кроме того, внутренние исключения типа `LOGICAL_ERROR` приводят к немедленному падению вместо корректной обработки ошибки. +Для целей разработки рекомендуется использовать отладочные сборки. +По сравнению с релизными, у них ниже уровень оптимизации компилятора (`-O`), что обеспечивает более удобную отладку. +Также внутренние исключения типа `LOGICAL_ERROR` приводят к немедленному аварийному завершению работы вместо корректной обработки ошибки. ```sh cmake -D CMAKE_BUILD_TYPE=Debug .. ``` :::note -Если вы хотите использовать отладчик, например gdb, добавьте `-D DEBUG_O_LEVEL="0"` к приведённой выше команде, чтобы отключить все оптимизации компилятора, которые могут мешать gdb просматривать и получать доступ к переменным. +Если вы хотите использовать отладчик, такой как gdb, добавьте `-D DEBUG_O_LEVEL="0"` к приведённой выше команде, чтобы полностью отключить оптимизации компилятора, которые могут мешать gdb просматривать переменные и получать к ним доступ. ::: Запустите ninja для сборки: @@ -119,7 +112,7 @@ cmake -D CMAKE_BUILD_TYPE=Debug .. ninja clickhouse ``` -Если вы хотите собрать все бинарные артефакты (утилиты и тесты), запустите ninja без параметров: +Если вы хотите собрать все двоичные файлы (утилиты и тесты), запустите команду `ninja` без параметров: ```sh ninja @@ -132,54 +125,55 @@ ninja -j 1 clickhouse-server clickhouse-client ``` :::tip -CMake предоставляет сокращённые формы для приведённых выше команд: +CMake предоставляет сокращённые варианты для приведённых выше команд: ```sh -cmake -S . -B build # конфигурация сборки, запускается из корневого каталога репозитория +cmake -S . -B build # настройка сборки, запускается из корневого каталога репозитория cmake --build build # компиляция ``` ::: -## Запуск исполняемого файла ClickHouse +## Запуск исполняемого файла ClickHouse {#running-the-clickhouse-executable} -После успешного завершения сборки вы найдете исполняемый файл в `ClickHouse//programs/`: +После успешной сборки вы найдёте исполняемый файл в `ClickHouse//programs/`: Сервер ClickHouse пытается найти файл конфигурации `config.xml` в текущем каталоге. -Также вы можете указать файл конфигурации в командной строке с помощью параметра `-C`. +При необходимости вы можете указать другой файл конфигурации в командной строке через параметр `-C`. -Чтобы подключиться к серверу ClickHouse с помощью `clickhouse-client`, откройте другой терминал, перейдите в `ClickHouse/build/programs/` и выполните `./clickhouse client`. +Чтобы подключиться к серверу ClickHouse с помощью `clickhouse-client`, откройте ещё один терминал, перейдите в `ClickHouse/build/programs/` и выполните `./clickhouse client`. -Если вы видите сообщение `Connection refused` на macOS или FreeBSD, попробуйте указать адрес хоста 127.0.0.1: +Если в macOS или FreeBSD вы получаете сообщение `Connection refused`, попробуйте указать адрес хоста 127.0.0.1: ```bash clickhouse client --host 127.0.0.1 ``` -## Расширенные параметры +## Расширенные настройки {#advanced-options} -### Минимальная сборка +### Минимальная сборка {#minimal-build} -Если вам не нужна функциональность, предоставляемая сторонними библиотеками, вы можете ещё больше ускорить сборку: +Если вам не нужна функциональность, предоставляемая сторонними библиотеками, вы можете ещё больше ускорить процесс сборки: ```sh cmake -DENABLE_LIBRARIES=OFF ``` -В случае проблем вам придётся разбираться самостоятельно ... +В случае проблем вам придётся разбираться самостоятельно… -Для работы Rust требуется подключение к интернету. Чтобы отключить поддержку Rust: +Rust требует подключения к интернету. Чтобы отключить поддержку Rust: ```sh cmake -DENABLE_RUST=OFF ``` -### Запуск исполняемого файла ClickHouse -Вы можете заменить продакшн-версию бинарного файла ClickHouse, установленную в вашей системе, скомпилированным бинарным файлом ClickHouse. -Для этого установите ClickHouse на свою машину, следуя инструкциям на официальном веб‑сайте. +### Запуск исполняемого файла ClickHouse {#running-the-clickhouse-executable-1} + +Вы можете заменить продакшн-версию бинарного файла ClickHouse, установленную в вашей системе, на скомпилированный бинарный файл ClickHouse. +Для этого установите ClickHouse на свою машину, следуя инструкциям на официальном сайте. Затем выполните: ```bash @@ -188,18 +182,19 @@ sudo cp ClickHouse/build/programs/clickhouse /usr/bin/ sudo service clickhouse-server start ``` -Обратите внимание, что `clickhouse-client`, `clickhouse-server` и другие — это символьные ссылки на общий исполняемый файл `clickhouse`. +Обратите внимание, что `clickhouse-client`, `clickhouse-server` и другие — это симлинки на общий бинарный файл `clickhouse`. -Вы также можете запустить собранный вами исполняемый файл ClickHouse с файлом конфигурации из пакета ClickHouse, установленного в вашей системе: +Вы также можете запустить собранный вами бинарный файл ClickHouse с файлом конфигурации из пакета ClickHouse, установленного в вашей системе: ```bash sudo service clickhouse-server stop sudo -u clickhouse ClickHouse/build/programs/clickhouse server --config-file /etc/clickhouse-server/config.xml ``` -### Сборка на любом дистрибутиве Linux -Установите необходимые компоненты в дистрибутиве openSUSE Tumbleweed: +### Сборка в любом дистрибутиве Linux {#building-on-any-linux} + +Установите необходимые зависимости в дистрибутиве openSUSE Tumbleweed: ```bash sudo zypper install git cmake ninja clang-c++ python lld nasm yasm gawk @@ -209,7 +204,7 @@ cmake -S . -B build cmake --build build ``` -Установите необходимые пакеты в Fedora Rawhide: +Установите необходимые зависимости на Fedora Rawhide: ```bash sudo yum update @@ -220,19 +215,20 @@ cmake -S . -B build cmake --build build ``` -### Сборка в Docker -Вы можете запустить любую сборку локально в среде, аналогичной CI, с помощью: +### Сборка в Docker {#building-in-docker} + +Вы можете запустить любую сборку локально в среде, аналогичной CI, используя: ```bash -python -m ci.praktika "BUILD_JOB_NAME" +python -m ci.praktika run "BUILD_JOB_NAME" ``` -где BUILD_JOB_NAME — это имя job'а, отображаемое в отчёте CI, например: "Build (arm_release)", "Build (amd_debug)" +где BUILD_JOB_NAME — это имя задания (job) так, как оно указано в отчёте CI, например, "Build (arm_release)", "Build (amd_debug)". Эта команда загружает соответствующий Docker-образ `clickhouse/binary-builder` со всеми необходимыми зависимостями -и запускает внутри него скрипт сборки: `./ci/jobs/build_clickhouse.py` +и запускает внутри него скрипт сборки: `./ci/jobs/build_clickhouse.py`. -Результат сборки будет размещён в `./ci/tmp/`. +Результат сборки будет помещён в `./ci/tmp/`. -Команда работает как на архитектуре AMD, так и на ARM и не требует дополнительных зависимостей, кроме Docker. +Эта команда работает как на архитектуре AMD, так и на ARM и не требует никаких дополнительных зависимостей, кроме установленного Python с модулем `requests` и Docker. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md index dbf56a721c2..3d0b2524235 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Сборка ClickHouse с DEFLATE_QPL +# Сборка ClickHouse с DEFLATE_QPL {#build-clickhouse-with-deflate_qpl} - Убедитесь, что ваша хост-система удовлетворяет требуемым для QPL [предварительным требованиям](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#prerequisites) - deflate_qpl включён по умолчанию при сборке с помощью CMake. Если вы случайно изменили это, пожалуйста, проверьте флаг сборки: ENABLE_QPL=1 @@ -18,7 +18,7 @@ doc_type: 'guide' -# Запуск бенчмарка с DEFLATE_QPL +# Запуск бенчмарка с DEFLATE_QPL {#run-benchmark-with-deflate_qpl} @@ -35,7 +35,7 @@ doc_type: 'guide' -## Автоматический запуск бенчмарка для схемы «звезда»: +## Автоматический запуск бенчмарка для схемы «звезда»: {#run-benchmark-automatically-for-star-schema} ```bash $ cd ./benchmark_sample/client_scripts @@ -53,7 +53,7 @@ $ sh run_ssb.sh -## Среда +## Среда {#environment} * CPU: Sapphire Rapids * Требования к ОС см. раздел [System Requirements for QPL](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#system-requirements) @@ -81,7 +81,7 @@ $ accel-config list | grep -P 'iax|state' Если вывода нет, это означает, что IAA еще не готов к работе. Пожалуйста, проверьте настройку IAA. -## Генерация необработанных данных +## Генерация необработанных данных {#generate-raw-data} ```bash $ cd ./benchmark_sample @@ -94,7 +94,7 @@ $ mkdir rawdata_dir && cd rawdata_dir Файлы с расширением `*.tbl` должны быть сгенерированы в каталоге `./benchmark_sample/rawdata_dir/ssb-dbgen`: -## Настройка базы данных +## Настройка базы данных {#database-setup} Настройте базу данных с использованием кодека LZ4 @@ -164,7 +164,7 @@ SELECT count() FROM lineorder_flat Это означает, что устройства IAA не готовы; вам нужно заново проверить их настройку. -## Тестирование производительности с одним экземпляром +## Тестирование производительности с одним экземпляром {#benchmark-with-single-instance} * Перед началом бенчмарка отключите режим C6 и переведите регулятор частоты CPU в режим `performance` @@ -218,7 +218,7 @@ zstd.log Нас интересует показатель QPS. Найдите по ключевому слову `QPS_Final` и соберите статистику. -## Тестирование производительности с несколькими инстансами +## Тестирование производительности с несколькими инстансами {#benchmark-with-multi-instances} * Чтобы снизить влияние ограничений по памяти при использовании слишком большого числа потоков, мы рекомендуем запускать тестирование производительности с несколькими инстансами. * Конфигурация с несколькими инстансами означает использование нескольких (2 или 4) серверов, каждый из которых подключён к своему клиенту. @@ -350,7 +350,7 @@ zstd_2insts.log Мы рекомендуем использовать данные бенчмарка для 2 инстансов в качестве итогового отчёта для рассмотрения. -## Советы +## Советы {#tips} Каждый раз перед запуском нового сервера ClickHouse убедитесь, что не осталось запущенных фоновых процессов ClickHouse; при необходимости найдите и завершите старые процессы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/continuous-integration.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/continuous-integration.md index b9b73dc23ec..157b57572ba 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/continuous-integration.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/continuous-integration.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Непрерывная интеграция (CI) +# Непрерывная интеграция (CI) {#continuous-integration-ci} Когда вы отправляете pull request, для вашего кода выполняются автоматические проверки системой ClickHouse [непрерывной интеграции (CI)](tests.md#test-automation). Это происходит после того, как сопровождающий репозитория (кто‑то из команды ClickHouse) просмотрел ваш код и добавил к вашему pull request метку `can be tested`. @@ -75,26 +75,26 @@ git push -## Проверка стиля +## Проверка стиля {#style-check} Выполняет различные проверки стиля кода. В задаче Style Check выполняются следующие базовые проверки: -##### cpp +##### cpp {#cpp} Выполняет простые проверки стиля кода на основе регулярных выражений с помощью скрипта [`ci/jobs/scripts/check_style/check_cpp.sh`](https://github.com/ClickHouse/ClickHouse/blob/master/ci/jobs/scripts/check_style/check_cpp.sh) (его также можно запускать локально).\ Если проверка завершается с ошибкой, исправьте проблемы со стилем в соответствии с [руководством по стилю кода](style.md). -##### codespell, aspell +##### codespell, aspell {#codespell} Проверяют грамматические ошибки и опечатки. -##### mypy +##### mypy {#mypy} Выполняет статическую проверку типов для кода на Python. -### Запуск задачи проверки стиля локально +### Запуск задачи проверки стиля локально {#running-style-check-locally} Всю задачу *Style Check* можно запустить локально в Docker-контейнере с помощью: @@ -112,14 +112,14 @@ python -m ci.praktika run "Style check" --test cpp Дополнительные зависимости не требуются — достаточно Python 3 и Docker. -## Быстрый тест +## Быстрый тест {#fast-test} Обычно это первая проверка, которая запускается для PR. Она собирает ClickHouse и запускает большинство [stateless-функциональных тестов](tests.md#functional-tests), пропуская некоторые. Если она не проходит, последующие проверки не запускаются, пока проблема не будет устранена. Ознакомьтесь с отчетом, чтобы увидеть, какие тесты завершились с ошибкой, затем воспроизведите сбой локально, как описано [здесь](/development/tests#running-a-test-locally). -#### Запуск быстрого теста локально: +#### Запуск быстрого теста локально: {#running-fast-test-locally} ```sh python -m ci.praktika run "Fast test" [--test имя_теста] @@ -129,11 +129,11 @@ python -m ci.praktika run "Fast test" [--test имя_теста] Никаких зависимостей, кроме Python 3 и Docker, не требуется. -## Проверка сборки +## Проверка сборки {#build-check} Выполняет сборку ClickHouse в различных конфигурациях для использования на следующих шагах. -### Локальный запуск сборки +### Локальный запуск сборки {#running-builds-locally} Сборку можно запустить локально в среде, имитирующей CI, с помощью: @@ -143,7 +143,7 @@ python -m ci.praktika run "<ИМЯ_ЗАДАНИЯ_СБОРКИ>" Никаких дополнительных зависимостей, кроме Python 3 и Docker, не требуется. -#### Доступные задания сборки +#### Доступные задания сборки {#available-build-jobs} Имена заданий сборки указаны в точности так, как они отображаются в отчёте CI: @@ -181,7 +181,7 @@ python -m ci.praktika run "<ИМЯ_ЗАДАНИЯ_СБОРКИ>" **Примечание:** Для сборок, не относящихся к категории «Другие архитектуры» (сборки из категории «Другие архитектуры» используют кросс-компиляцию), архитектура вашей локальной машины должна совпадать с типом сборки, чтобы она была выполнена так, как запрошено в `BUILD_JOB_NAME`. -#### Пример +#### Пример {#example-run-local} Чтобы выполнить локальную отладочную сборку: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/contrib.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/contrib.md index 5ea6eb0e29f..c2a7840bcf2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/contrib.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/contrib.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Сторонние библиотеки +# Сторонние библиотеки {#third-party-libraries} ClickHouse использует сторонние библиотеки для различных целей, например, для подключения к другим базам данных, декодирования/кодирования данных при чтении/записи с диска/на диск или для реализации отдельных специализированных SQL‑функций. Чтобы не зависеть от набора библиотек, доступных в целевой системе, каждая сторонняя библиотека импортируется как подмодуль Git в дерево исходного кода ClickHouse и затем компилируется и компонуется вместе с ClickHouse. 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..df3508713d5 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' --- +# Предварительные требования {#prerequisites} +ClickHouse можно собрать под Linux, FreeBSD и macOS. +Если вы используете Windows, вы всё равно можете собрать ClickHouse в виртуальной машине с установленным Linux, например в [VirtualBox](https://www.virtualbox.org/) с Ubuntu. -# Предварительные требования +## Создание репозитория на GitHub {#create-a-repository-on-github} -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). -## Клонируйте репозиторий на свою локальную машину +## Клонируйте репозиторий на рабочую машину {#clone-the-repository-to-your-development-machine} -Сначала скачайте исходные файлы на локальную машину, то есть клонируйте репозиторий: +Сначала скачайте исходные файлы на рабочую машину, то есть клонируйте репозиторий: ```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} +## Создавайте документацию {#write-documentation} -Каждый pull request, добавляющий новую функцию, должен сопровождаться соответствующей документацией. +Каждый pull request, который добавляет новую функциональность, должен сопровождаться соответствующей документацией. Если вы хотите предварительно просмотреть изменения в документации, инструкции по локальной сборке страницы документации доступны в файле README.md [здесь](https://github.com/ClickHouse/clickhouse-docs). При добавлении новой функции в ClickHouse вы можете использовать приведённый ниже шаблон в качестве ориентира: - - ````markdown -# newFunctionName +# newFunctionName {#newfunctionname} -Краткое описание функции. Здесь следует кратко описать её назначение и типичный сценарий использования. +Краткое описание функции. Должно кратко описывать её назначение и типичный сценарий использования. **Синтаксис** @@ -167,40 +157,40 @@ 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 │ └───────────────────────────────────┘ \``` ```` -## Использование тестовых данных +## Использование тестовых данных {#using-test-data} -Разработка 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..17868c47a57 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,40 @@ --- -description: 'Главная страница раздела «Разработка и участие»' +description: 'Индексная страница раздела «Разработка и вклад в проект»' slug: /development/ -title: 'Разработка и участие' +title: 'Разработка и вклад в проект' doc_type: 'landing-page' --- В этом разделе документации представлены следующие страницы: -{/* Приведённое ниже оглавление автоматически генерируется из полей YAML - front matter: title, description, slug с помощью скрипта, расположенного здесь: +{/* Приведённое ниже оглавление автоматически генерируется на основе полей + front matter в YAML: title, description, slug с помощью скрипта отсюда: https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - + Если вы заметили ошибку или хотите улучшить описания, отредактируйте соответствующие файлы напрямую. */ } {/*AUTOGENERATED_START*/ } -| Страница | Описание | -| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| [Developer Prerequisites](/development/developer-instruction) | Требования и инструкции по настройке среды разработки ClickHouse | -| [How to Build ClickHouse on Linux](/development/build) | Пошаговое руководство по сборке ClickHouse из исходного кода на Linux-системах | -| [Build on macOS for macOS](/development/build-osx) | Руководство по сборке ClickHouse из исходного кода на системах macOS | -| [Build on Linux for macOS](/development/build-cross-osx) | Руководство по кросс-компиляции ClickHouse на Linux для систем macOS | -| [How to Build ClickHouse on Linux for AARCH64](/development/build-cross-arm) | Руководство по сборке ClickHouse из исходного кода для архитектуры AARCH64 | -| [How to Build ClickHouse on Linux for RISC-V 64](/development/build-cross-riscv) | Руководство по сборке ClickHouse из исходного кода для архитектуры RISC-V 64 | -| [Build on Linux for s390x (zLinux)](/development/build-cross-s390x) | Руководство по сборке ClickHouse из исходного кода для архитектуры s390x | -| [Build on Linux for E2K](/development/build-e2k) | Руководство по сборке ClickHouse из исходного кода для архитектуры E2K | -| [Build on Linux for LoongArch64](/development/build-cross-loongarch) | Руководство по сборке ClickHouse из исходного кода для архитектуры LoongArch64 | -| [Testing ClickHouse](/development/tests) | Руководство по тестированию ClickHouse и запуску набора тестов | -| [Architecture Overview](/development/architecture) | Подробный обзор архитектуры ClickHouse и его колонко-ориентированной организации данных | -| [Continuous Integration (CI)](/development/continuous-integration) | Обзор системы непрерывной интеграции (CI) 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) | Как собрать ClickHouse и запустить бенчмарк с кодеком DEFLATE_QPL | -| [Integrating Rust Libraries](/development/integrating_rust_libraries) | Руководство по интеграции библиотек Rust в ClickHouse | +| Страница | Описание | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| [Developer Prerequisites](/development/developer-instruction) | Предварительные требования и инструкции по настройке среды для разработки ClickHouse | +| [How to Build ClickHouse on Linux](/development/build) | Пошаговое руководство по сборке ClickHouse из исходного кода в системах Linux | +| [Build on macOS for macOS](/development/build-osx) | Руководство по сборке ClickHouse из исходного кода в системах macOS | +| [Build on Linux for macOS](/development/build-cross-osx) | Руководство по кросс-компиляции ClickHouse в Linux для систем macOS | +| [How to Build ClickHouse on Linux for AARCH64](/development/build-cross-arm) | Руководство по сборке ClickHouse из исходного кода для архитектуры AARCH64 | +| [How to Build ClickHouse on Linux for RISC-V 64](/development/build-cross-riscv) | Руководство по сборке ClickHouse из исходного кода для архитектуры RISC-V 64 | +| [Build on Linux for s390x (zLinux)](/development/build-cross-s390x) | Руководство по сборке ClickHouse из исходного кода для архитектуры s390x | +| [Build on Linux for LoongArch64](/development/build-cross-loongarch) | Руководство по сборке ClickHouse из исходного кода для архитектуры LoongArch64 | +| [Build on Linux for E2K](/development/build-e2k) | Руководство по сборке ClickHouse из исходного кода для архитектуры E2K | +| [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) | Как собрать ClickHouse и запустить бенчмарк с кодеком DEFLATE_QPL | +| [Integrating Rust Libraries](/development/integrating_rust_libraries) | Руководство по интеграции библиотек Rust в ClickHouse | {/*AUTOGENERATED_END*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md index 855b7814529..d27596b00f5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md @@ -6,7 +6,7 @@ title: 'Интеграция библиотек на Rust' doc_type: 'guide' --- -# Библиотеки Rust +# Библиотеки Rust {#rust-libraries} Интеграция библиотеки Rust будет описана на примере интеграции хеш-функции BLAKE3. @@ -80,7 +80,6 @@ pub unsafe extern "C" fn blake3_apply_shim( Также следует использовать атрибут #[no_mangle] и `extern "C"` для каждого C-совместимого элемента. В противном случае библиотека может быть собрана некорректно, а cbindgen не сможет автоматически сгенерировать заголовочный файл. - После выполнения всех этих шагов вы можете протестировать свою библиотеку в небольшом проекте, чтобы выявить все проблемы с совместимостью или генерацией заголовков. Если при генерации заголовков возникают какие-либо проблемы, вы можете попробовать настроить её с помощью файла cbindgen.toml (шаблон можно найти здесь: [https://github.com/eqrion/cbindgen/blob/master/template.toml](https://github.com/eqrion/cbindgen/blob/master/template.toml)). Стоит отметить проблему, возникшую при интеграции BLAKE3: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/style.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/style.md index 4fdfe3eb18a..6c9d00369ae 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/style.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/style.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Руководство по стилю кода C++ +# Руководство по стилю кода C++ {#c-style-guide} @@ -22,7 +22,7 @@ doc_type: 'guide' -## Форматирование +## Форматирование {#formatting} **1.** Большая часть форматирования выполняется автоматически с помощью `clang-format`. @@ -214,7 +214,7 @@ for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ``` -## Комментарии +## Комментарии {#comments} **1.** Обязательно добавляйте комментарии ко всем нетривиальным фрагментам кода. @@ -312,7 +312,7 @@ void executeQuery( ``` -## Имена +## Имена {#names} **1.** Используйте строчные буквы и символ нижнего подчеркивания в именах переменных и членов классов. @@ -431,7 +431,7 @@ enum class CompressionMethod **17.** Имена файлов с исходным кодом C++ должны иметь расширение `.cpp`. Заголовочные файлы должны иметь расширение `.h`. -## Как писать код +## Как писать код {#how-to-write-code} **1.** Управление памятью. @@ -700,7 +700,7 @@ auto s = std::string{"Hello"}; **26.** Для виртуальных функций пишите `virtual` в базовом классе, а в производных классах пишите `override` вместо `virtual`. -## Неиспользуемые возможности C++ +## Неиспользуемые возможности C++ {#unused-features-of-c} **1.** Виртуальное наследование не используется. @@ -830,7 +830,7 @@ auto func(const E & e) // автовыведение возвращаемог -## Дополнительные рекомендации +## Дополнительные рекомендации {#additional-recommendations} **1.** Явное указание `std::` для типов из `stddef.h` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/development/tests.md b/i18n/ru/docusaurus-plugin-content-docs/current/development/tests.md index 994e55b38f0..a8c6a0e7207 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/development/tests.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/development/tests.md @@ -9,11 +9,11 @@ doc_type: 'guide' -# Проверка ClickHouse +# Проверка ClickHouse {#testing-clickhouse} -## Функциональные тесты +## Функциональные тесты {#functional-tests} Функциональные тесты — наиболее простые и удобные в использовании. Большинство возможностей ClickHouse можно протестировать с их помощью, и их обязательно использовать для каждого изменения в коде ClickHouse, которое может быть протестировано таким образом. @@ -34,7 +34,7 @@ doc_type: 'guide' Распространённая ошибка при тестировании типов данных `DateTime` и `DateTime64` — предполагать, что сервер использует конкретный часовой пояс (например, «UTC»). Это не так: часовые пояса в CI‑запусках тестов преднамеренно выбираются случайным образом. Самое простое решение — явно указывать часовой пояс для тестовых значений, например: `toDateTime64(val, 3, 'Europe/Amsterdam')`. ::: -### Запуск теста локально +### Запуск теста локально {#running-a-test-locally} Запустите сервер ClickHouse локально, прослушивающий порт по умолчанию (9000). Чтобы запустить, например, тест `01428_hash_set_nan_key`, перейдите в каталог репозитория и выполните следующую команду: @@ -49,7 +49,7 @@ PATH=:$PATH tests/clickhouse-test 01428_hash_set_nan_ Вы можете запустить все тесты или только их подмножество, указав фильтр по именам тестов: `./clickhouse-test substring`. Также есть параметры для запуска тестов параллельно или в случайном порядке. -### Добавление нового теста +### Добавление нового теста {#adding-a-new-test} Чтобы добавить новый тест, сначала создайте файл `.sql` или `.sh` в директории `queries/0_stateless`. Затем сгенерируйте соответствующий файл `.reference`, используя `clickhouse-client < 12345_test.sql > 12345_test.reference` или `./12345_test.sh > ./12345_test.reference`. @@ -76,7 +76,7 @@ sudo ./install.sh * удостоверяться, что другие тесты не проверяют то же самое (т.е. сначала выполните grep). ::: -### Ограничение запусков тестов +### Ограничение запусков тестов {#restricting-test-runs} Тест может иметь ноль или более *тегов*, задающих ограничения, в каких контекстах тест запускается в CI. @@ -95,9 +95,9 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Tags: no-fasttest, no-replicated-database -# - no-fasttest: <укажите причину для данного тега> -# - no-replicated-database: <укажите причину для данного тега> +# Tags: no-fasttest, no-replicated-database {#tags-no-fasttest-no-replicated-database} +# - no-fasttest: <укажите причину для данного тега> {#no-fasttest-provide_a_reason_for_the_tag_here} +# - no-replicated-database: <укажите причину для данного тега> {#no-replicated-database-provide_a_reason_here} ``` Список доступных тегов: @@ -134,7 +134,7 @@ SELECT 1 В дополнение к приведённым выше настройкам вы можете использовать флаги `USE_*` из `system.build_options` для указания использования отдельных возможностей ClickHouse. Например, если ваш тест использует таблицу MySQL, вам следует добавить тег `use-mysql`. -### Указание ограничений для случайных настроек +### Указание ограничений для случайных настроек {#specifying-limits-for-random-settings} Тест может задавать минимальные и максимальные допустимые значения для настроек, которые могут случайным образом изменяться во время выполнения теста. @@ -143,8 +143,8 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Теги: no-fasttest -# Ограничения случайных настроек: max_block_size=(1000, 10000); index_granularity=(100, None) +# Теги: no-fasttest {#tags-no-fasttest} +# Ограничения случайных настроек: max_block_size=(1000, 10000); index_granularity=(100, None) {#random-settings-limits-max_block_size1000-10000-index_granularity100-none} ``` Для `.sql`-тестов теги размещаются как SQL-комментарий в строке рядом с тестом или в первой строке: @@ -157,7 +157,7 @@ SELECT 1 Если вам нужно указать только одно ограничение, вы можете использовать `None` для второго. -### Выбор имени теста +### Выбор имени теста {#choosing-the-test-name} Имя теста начинается с пятизначного префикса, за которым следует описательное имя, например `00422_hash_function_constexpr.sql`. Чтобы выбрать префикс, найдите наибольший префикс, уже присутствующий в каталоге, и увеличьте его на единицу. @@ -168,7 +168,7 @@ ls tests/queries/0_stateless/[0-9]*.reference | tail -n 1 Параллельно могут быть добавлены другие тесты с тем же числовым префиксом, но это допустимо и не приводит к каким-либо проблемам; впоследствии ничего менять не нужно. -### Проверка ошибки, которая должна произойти +### Проверка ошибки, которая должна произойти {#checking-for-an-error-that-must-occur} Иногда требуется протестировать, что для некорректного запроса возникает ошибка сервера. В SQL-тестах для этого поддерживаются специальные аннотации следующего вида: @@ -184,12 +184,12 @@ SELECT x; -- { serverError 49 } Проверяйте только код ошибки. Если существующий код ошибки недостаточно точен для ваших нужд, рассмотрите возможность добавления нового. -### Тестирование распределённого запроса +### Тестирование распределённого запроса {#testing-a-distributed-query} Если вы хотите использовать распределённые запросы в функциональных тестах, вы можете воспользоваться табличной функцией `remote` с адресами `127.0.0.{1..2}`, чтобы сервер выполнял запрос к самому себе; либо вы можете использовать предопределённые тестовые кластеры в конфигурационном файле сервера, такие как `test_shard_localhost`. Не забудьте добавить слова `shard` или `distributed` в имя теста, чтобы он запускался в CI в корректных конфигурациях, где сервер настроен на поддержку распределённых запросов. -### Работа с временными файлами +### Работа с временными файлами {#working-with-temporary-files} Иногда в shell-тесте может потребоваться на лету создать файл для работы. Имейте в виду, что некоторые проверки в CI запускают тесты параллельно, поэтому если вы создаёте или удаляете временный файл в своём скрипте без уникального имени, это может привести к сбоям некоторых проверок CI, таких как Flaky. @@ -217,7 +217,7 @@ SELECT x; -- { serverError 49 } -## Модульные тесты +## Модульные тесты {#unit-tests} Модульные тесты полезны, когда вы хотите протестировать не ClickHouse целиком, а отдельную изолированную библиотеку или класс. Сборку тестов можно включить или отключить с помощью опции CMake `ENABLE_TESTS`. @@ -272,7 +272,7 @@ $ ./src/unit_tests_dbms --gtest_filter=LocalAddress* -## Ручное тестирование +## Ручное тестирование {#manual-testing} Когда вы разрабатываете новую функциональность, имеет смысл также протестировать её вручную. Вы можете сделать это, выполнив следующие шаги: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/dictionary/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/dictionary/index.md index b9ca5aa5de7..ebaf4f79298 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/dictionary/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/dictionary/index.md @@ -2,7 +2,7 @@ slug: /dictionary title: 'Словарь' keywords: ['словарь', 'словари'] -description: 'Словарь предоставляет представление данных в формате ключ-значение для быстрого поиска.' +description: 'Словарь представляет данные в формате ключ-значение для быстрого поиска.' doc_type: 'reference' --- @@ -11,36 +11,35 @@ import dictionaryLeftAnyJoin from '@site/static/images/dictionary/dictionary-lef import Image from '@theme/IdealImage'; -# Словарь +# Словарь {#dictionary} -Словарь в ClickHouse предоставляет представление данных в оперативной памяти в формате [key-value](https://en.wikipedia.org/wiki/Key%E2%80%93value_database) из различных [внутренних и внешних источников](/sql-reference/dictionaries#dictionary-sources), оптимизированное для запросов с крайне низкой задержкой поиска. +Словарь в ClickHouse предоставляет хранящееся в памяти представление данных в формате [key-value](https://en.wikipedia.org/wiki/Key%E2%80%93value_database) из различных [внутренних и внешних источников](/sql-reference/dictionaries#dictionary-sources), оптимизированное для операций поиска с крайне низкой задержкой. Словари полезны для: -- Повышения производительности запросов, особенно при использовании в операциях `JOIN` -- Обогащения данных на лету в процессе ингестии, не замедляя её -Сценарии использования словарей в ClickHouse +- Повышения производительности запросов, особенно при использовании с операциями `JOIN` +- Обогащения поступающих данных «на лету» без замедления процесса ингестии +Сценарии использования словаря в ClickHouse +## Ускорение соединений с использованием словаря {#speeding-up-joins-using-a-dictionary} -## Ускорение соединений с помощью Dictionary +Словари можно использовать для ускорения определённого типа операции `JOIN`: типа [`LEFT ANY`](/sql-reference/statements/select/join#supported-types-of-join), когда ключ соединения совпадает с ключевым атрибутом подлежащего хранилища ключ-значение. -Dictionary можно использовать для ускорения определённого типа `JOIN`: [`LEFT ANY`](/sql-reference/statements/select/join#supported-types-of-join), когда ключ соединения должен совпадать с ключевым атрибутом базового key-value-хранилища. +Использование словаря с LEFT ANY JOIN -Использование Dictionary с LEFT ANY JOIN +В таком случае ClickHouse может использовать словарь для выполнения [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join). Это самый быстрый алгоритм соединения в ClickHouse, применимый, когда базовый [движок таблицы](/engines/table-engines) для таблицы справа поддерживает запросы к хранилищу ключ-значение с низкой задержкой. В ClickHouse есть три движка таблиц, которые это поддерживают: [Join](/engines/table-engines/special/join) (по сути, предварительно вычисленная хеш-таблица), [EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb) и [Dictionary](/engines/table-engines/special/dictionary). Мы опишем подход, основанный на словаре, но механика одинакова для всех трёх движков. -В таком случае ClickHouse может использовать Dictionary для выполнения [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join). Это самый быстрый алгоритм соединения в ClickHouse, и он применим, когда базовый [движок таблицы](/engines/table-engines) для таблицы правой части поддерживает key-value-запросы с низкой задержкой. В ClickHouse есть три движка таблиц, обеспечивающие это: [Join](/engines/table-engines/special/join) (по сути, предварительно вычисленная хеш-таблица), [EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb) и [Dictionary](/engines/table-engines/special/dictionary). Мы опишем подход на основе Dictionary, но механика одинакова для всех трёх движков. +Алгоритм Direct Join требует, чтобы правая таблица опиралась на словарь, благодаря чему данные для соединения из этой таблицы уже находятся в памяти в виде структуры данных хранилища ключ-значение с низкой задержкой. -Алгоритм Direct Join требует, чтобы правая таблица была реализована на основе Dictionary, так, чтобы данные, которые нужно присоединять из этой таблицы, уже находились в памяти в виде key-value-структуры данных с низкой задержкой. +### Пример {#example} -### Пример - -Используя набор данных Stack Overflow, ответим на вопрос: +Используя [датасет Stack Overflow](/getting-started/example-datasets/stackoverflow), ответим на вопрос: *Какой пост, касающийся SQL, является самым спорным на Hacker News?* -Мы будем считать пост спорным, если у него схожее количество голосов «за» и «против». Мы вычислим эту абсолютную разницу, где значение, ближе к нулю, означает большую спорность. Будем считать, что у поста должно быть как минимум 10 голосов «за» и 10 «против» — посты, за которые почти не голосуют, не слишком спорные. +Мы будем считать пост спорным, если у него схожее количество голосов «за» и «против». Мы вычислим абсолютную разницу между ними: чем ближе значение к 0, тем сильнее спорность. Также будем считать, что у поста должно быть как минимум 10 голосов «за» и 10 голосов «против» — посты, за которые почти не голосуют, вряд ли можно считать спорными. -При нормализованных данных этот запрос в текущем виде требует `JOIN` с использованием таблиц `posts` и `votes`: +При нормализованных данных этот запрос требует `JOIN` с использованием таблиц `posts` и `votes`: ```sql WITH PostIds AS @@ -79,38 +78,38 @@ UpVotes: 13 DownVotes: 13 Controversial_ratio: 0 -1 строка в наборе. Прошло: 1.283 сек. Обработано 418.44 млн строк, 7.23 ГБ (326.07 млн строк/с., 5.63 ГБ/с.) -Пиковое использование памяти: 3.18 ГиБ. +Обработана 1 строка. Затрачено: 1,283 сек. Обработано 418,44 млн строк, 7,23 ГБ (326,07 млн строк/с., 5,63 ГБ/с.) +Пиковое использование памяти: 3,18 ГиБ. ``` -> **Используйте меньшие наборы данных в правой части `JOIN`**: Этот запрос может показаться избыточно многословным, так как фильтрация по `PostId` выполняется и во внешнем, и во вложенном запросах. Это оптимизация производительности, которая обеспечивает быстрое время отклика запроса. Для оптимальной производительности всегда следите за тем, чтобы правая сторона `JOIN` была меньшим набором и по возможности как можно меньшего размера. Советы по оптимизации производительности `JOIN` и обзору доступных алгоритмов приведены в [этой серии статей в блоге](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1). +> **Используйте меньшие наборы данных в правой части `JOIN`**: Этот запрос может показаться более многословным, чем требуется, поскольку фильтрация по `PostId` выполняется как во внешнем, так и во вложенном запросе. Это оптимизация производительности, которая обеспечивает быстрое время ответа. Для оптимальной производительности всегда следите за тем, чтобы правая сторона `JOIN` была меньшим набором данных и оставалась как можно меньше. Советы по оптимизации производительности JOIN и обзору доступных алгоритмов приведены в [этой серии статей в блоге](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1). -Хотя этот запрос работает быстро, он требует от нас аккуратного использования `JOIN`, чтобы достичь хорошей производительности. В идеале мы бы просто отфильтровали посты по тем, которые содержат «SQL», прежде чем анализировать значения `UpVote` и `DownVote` для этого подмножества блогов, чтобы вычислить нашу метрику. +Хотя этот запрос и работает быстро, он требует от нас аккуратного использования `JOIN`, чтобы добиться хорошей производительности. В идеале мы бы просто отфильтровали записи до тех, которые содержат «SQL», прежде чем смотреть на значения `UpVote` и `DownVote` для подмножества блогов, чтобы вычислить нашу метрику. -#### Применение словаря -Чтобы продемонстрировать эти концепции, мы используем словарь для наших данных о голосах. Поскольку словари обычно хранятся в памяти ([ssd_cache](/sql-reference/dictionaries#ssd_cache) — исключение), пользователям следует учитывать размер данных. Проверим размер нашей таблицы `votes`: +#### Применение словаря {#applying-a-dictionary} +Чтобы продемонстрировать эти концепции, мы используем словарь для наших данных о голосовании. Поскольку словари обычно хранятся в памяти ([ssd_cache](/sql-reference/dictionaries#ssd_cache) — исключение), пользователям следует учитывать объём данных. Проверим размер нашей таблицы `votes`: ```sql SELECT table, - formatReadableSize(sum(data_compressed_bytes)) AS размер_сжатых_данных, - formatReadableSize(sum(data_uncompressed_bytes)) AS размер_несжатых_данных, - round(sum(data_uncompressed_bytes) / sum(data_compressed_bytes), 2) AS коэффициент + formatReadableSize(sum(data_compressed_bytes)) AS compressed_size, + formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size, + round(sum(data_uncompressed_bytes) / sum(data_compressed_bytes), 2) AS ratio FROM system.columns WHERE table IN ('votes') GROUP BY table -┌─table───────────┬─размер_сжатых_данных─┬─размер_несжатых_данных─┬─коэффициент─┐ -│ votes │ 1.25 GiB │ 3.79 GiB │ 3.04 │ -└─────────────────┴──────────────────────┴────────────────────────┴─────────────┘ +┌─table───────────┬─compressed_size─┬─uncompressed_size─┬─ratio─┐ +│ votes │ 1.25 GiB │ 3.79 GiB │ 3.04 │ +└─────────────────┴─────────────────┴───────────────────┴───────┘ ``` -Данные будут храниться в нашем словаре без сжатия, поэтому нам требуется как минимум 4 ГБ памяти, если бы мы сохраняли все столбцы (мы этого делать не будем) в словаре. Словарь будет реплицирован по нашему кластеру, поэтому этот объём памяти нужно зарезервировать *на каждый узел*. +Данные будут храниться в нашем словаре без сжатия, поэтому нам потребуется как минимум 4 ГБ памяти, если бы мы собирались хранить все столбцы (мы не будем) в словаре. Словарь будет реплицирован по нашему кластеру, поэтому этот объём памяти должен быть зарезервирован *на каждый узел*. -> В приведённом ниже примере данные для нашего словаря берутся из таблицы ClickHouse. Хотя это и является наиболее распространённым источником словарей, поддерживается [ряд источников](/sql-reference/dictionaries#dictionary-sources), включая файлы, HTTP и базы данных, в том числе [Postgres](/sql-reference/dictionaries#postgresql). Как мы покажем, словари могут автоматически обновляться, что является идеальным способом обеспечить доступность небольших наборов данных, подверженных частым изменениям, для прямых JOIN-ов. +> В примере ниже данные для нашего словаря поступают из таблицы ClickHouse. Хотя это и является наиболее распространённым источником словарей, поддерживается [ряд источников](/sql-reference/dictionaries#dictionary-sources), включая файлы, HTTP и базы данных, в том числе [Postgres](/sql-reference/dictionaries#postgresql). Как мы покажем, словари могут автоматически обновляться, что делает их идеальным способом обеспечить доступность небольших наборов данных, подверженных частым изменениям, для прямых JOIN. -Для нашего словаря необходим первичный ключ, по которому будут выполняться поиски. Концептуально он идентичен первичному ключу в транзакционной базе данных и должен быть уникальным. Наш запрос выше требует поиска по ключу соединения — `PostId`. Словарь, в свою очередь, должен быть заполнен суммарным количеством голосов «за» и «против» для каждого `PostId` из нашей таблицы `votes`. Ниже приведён запрос для получения данных для этого словаря: +Для нашего словаря требуется первичный ключ, по которому будут выполняться обращения. Концептуально это идентично первичному ключу транзакционной базы данных и должно быть уникальным. Наш запрос выше требует обращения по ключу соединения — `PostId`. Словарь, в свою очередь, должен быть заполнен суммарными значениями голосов «за» и «против» по `PostId` из нашей таблицы `votes`. Ниже приведён запрос для получения данных этого словаря: ```sql SELECT PostId, @@ -120,7 +119,7 @@ FROM votes GROUP BY PostId ``` -Чтобы создать наш словарь, потребуется следующий DDL — обратите внимание на использование нашего запроса, приведённого выше: +Для создания нашего словаря используем следующий DDL — обратите внимание на использование приведённого выше запроса: ```sql CREATE DICTIONARY votes_dict @@ -137,9 +136,9 @@ LAYOUT(HASHED()) 0 строк в наборе. Затрачено: 36.063 сек. ``` -> В самоуправляемой установке OSS приведённую выше команду необходимо выполнить на всех узлах. В ClickHouse Cloud словарь будет автоматически реплицирован на все узлы. Эту операцию выполняли на узле ClickHouse Cloud с 64 ГБ ОЗУ, загрузка заняла 36 с. +> В самоуправляемой OSS-установке указанную выше команду нужно выполнить на всех узлах. В ClickHouse Cloud словарь будет автоматически реплицирован на все узлы. Эта команда была выполнена на узле ClickHouse Cloud с 64 ГБ ОЗУ, загрузка заняла 36 секунд. -Чтобы проверить объём памяти, потребляемой нашим словарём: +Чтобы подтвердить объём памяти, потребляемый нашим словарём: ```sql SELECT formatReadableSize(bytes_allocated) AS size @@ -151,7 +150,8 @@ WHERE name = 'votes_dict' └──────────┘ ``` -Теперь получение голосов «за» и «против» для конкретного `PostId` сводится к использованию простой функции `dictGet`. Ниже показано, как получить значения для поста `11227902`: +Получить количество голосов «за» и «против» для конкретного `PostId` теперь можно с помощью простой функции `dictGet`. Ниже мы получаем значения для поста `11227902`: + ```sql SELECT dictGet('votes_dict', ('UpVotes', 'DownVotes'), '11227902') AS votes @@ -181,12 +181,12 @@ LIMIT 3 Пиковое использование памяти: 552.26 МиБ. ``` -Мало того, что этот запрос значительно проще, он ещё и более чем вдвое быстрее! Его можно дополнительно оптимизировать, загружая в словарь только посты с более чем 10 голосами «за» и «против» и сохраняя лишь заранее вычисленное значение спорности. +Этот запрос не только гораздо проще, но и более чем в два раза быстрее! Его можно дополнительно оптимизировать, загружая в словарь только посты с более чем 10 голосами «за» и «против» и сохраняя только предварительно вычисленное значение степени спорности. -## Обогащение данных при выполнении запроса +## Обогащение при выполнении запроса {#query-time-enrichment} -Словари можно использовать для поиска значений в момент выполнения запроса. Эти значения могут возвращаться в результатах запроса или использоваться в агрегациях. Предположим, мы создаём словарь для сопоставления идентификаторов пользователей с их местоположением: +Словари можно использовать для поиска значений при выполнении запроса. Эти значения могут возвращаться в результатах или использоваться в агрегациях. Предположим, мы создаём словарь для отображения идентификаторов пользователей на их местоположения: ```sql CREATE DICTIONARY users_dict @@ -200,7 +200,7 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -Мы можем использовать этот словарь для обогащения результатов: +Мы можем использовать этот словарь для обогащения результатов по постам: ```sql SELECT @@ -213,18 +213,18 @@ LIMIT 5 FORMAT PrettyCompactMonoBlock ┌───────Id─┬─Title─────────────────────────────────────────────────────────┬─Location──────────────┐ -│ 52296928 │ Сравнение двух строк в ClickHouse │ Spain │ -│ 52345137 │ Как использовать файл для миграции данных из MySQL в ClickHouse? │ 中国江苏省Nanjing Shi │ -│ 61452077 │ Как изменить PARTITION в ClickHouse │ Guangzhou, 广东省中国 │ -│ 55608325 │ Выбор последней записи в ClickHouse без max() для всей таблицы │ Moscow, Russia │ -│ 55758594 │ Создание временной таблицы в ClickHouse │ Perm', Russia │ +│ 52296928 │ Comparison between two Strings in ClickHouse │ Spain │ +│ 52345137 │ How to use a file to migrate data from mysql to a clickhouse? │ 中国江苏省Nanjing Shi │ +│ 61452077 │ How to change PARTITION in clickhouse │ Guangzhou, 广东省中国 │ +│ 55608325 │ Clickhouse select last record without max() on all table │ Moscow, Russia │ +│ 55758594 │ ClickHouse create temporary table │ Perm', Russia │ └──────────┴───────────────────────────────────────────────────────────────┴───────────────────────┘ Получено 5 строк. Затрачено: 0,033 сек. Обработано 4,25 млн строк, 82,84 МБ (130,62 млн строк/с., 2,55 ГБ/с.) Пиковое использование памяти: 249,32 МиБ. ``` -Аналогично приведённому выше примеру join, мы можем использовать тот же словарь, чтобы эффективно определить, откуда происходит большинство постов: +Аналогично нашему примеру выше с JOIN, мы можем использовать тот же словарь, чтобы эффективно определить, откуда происходит большинство постов: ```sql SELECT @@ -249,13 +249,13 @@ LIMIT 5 ``` -## Обогащение во время индексации +## Обогащение на этапе вставки (index time) {#index-time-enrichment} -В приведённом выше примере мы использовали словарь на этапе выполнения запроса, чтобы убрать `JOIN`. Словари также можно использовать для обогащения строк на этапе вставки. Это обычно уместно, если значение для обогащения не меняется и существует во внешнем источнике, который можно использовать для заполнения словаря. В таком случае обогащение строки на этапе вставки позволяет избежать обращения к словарю во время выполнения запроса. +В приведённом выше примере мы использовали словарь на этапе выполнения запроса, чтобы убрать операцию JOIN. Словари также можно использовать для обогащения строк на этапе вставки. Это обычно целесообразно, если значение для обогащения не меняется и существует во внешнем источнике, который можно использовать для заполнения словаря. В этом случае обогащение строки на этапе вставки позволяет избежать поиска в словаре во время выполнения запроса. -Предположим, что `Location` пользователя в Stack Overflow никогда не меняется (в реальности это не так), а именно столбец `Location` таблицы `users`. Допустим, мы хотим выполнить аналитический запрос к таблице `posts` по местоположению. В этой таблице есть столбец `UserId`. +Предположим, что `Location` пользователя в Stack Overflow никогда не меняется (в реальности это не так), а именно столбец `Location` таблицы `users`. Допустим, мы хотим выполнить аналитический запрос к таблице `posts` по местоположению. В ней содержится столбец `UserId`. -Словарь предоставляет соответствие между идентификатором пользователя и его местоположением, используя таблицу `users`: +Словарь задаёт соответствие между идентификатором пользователя и его местоположением, опираясь на таблицу `users`: ```sql CREATE DICTIONARY users_dict @@ -269,9 +269,9 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -> Мы исключаем пользователей с `Id < 0`, что позволяет использовать тип словаря `Hashed`. Пользователи с `Id < 0` — это системные пользователи. +> Мы исключаем пользователей с `Id < 0`, что позволяет нам использовать тип словаря `Hashed`. Пользователи с `Id < 0` являются системными пользователями. -Чтобы задействовать этот словарь на этапе вставки данных в таблицу posts, необходимо изменить схему: +Чтобы использовать этот словарь при вставке данных в таблицу posts, нам нужно изменить схему: ```sql CREATE TABLE posts_with_location @@ -285,11 +285,11 @@ ENGINE = MergeTree ORDER BY (PostTypeId, toDate(CreationDate), CommentCount) ``` -В приведённом выше примере `Location` объявлен как столбец `MATERIALIZED`. Это означает, что значение может быть передано в запросе `INSERT` и всегда будет вычислено. +В приведённом выше примере `Location` объявлен как столбец типа `MATERIALIZED`. Это означает, что значение может быть указано в запросе `INSERT` и при этом всегда будет вычислено. -> ClickHouse также поддерживает [столбцы с типом `DEFAULT`](/sql-reference/statements/create/table#default_values) (когда значение может быть явно указано при вставке или вычислено, если не задано). +> ClickHouse также поддерживает [`DEFAULT` столбцы](/sql-reference/statements/create/table#default_values) (когда значение может быть вставлено или вычислено, если оно не указано). -Чтобы заполнить таблицу, мы можем использовать обычный `INSERT INTO SELECT` из S3: +Чтобы заполнить таблицу, мы можем использовать привычный `INSERT INTO SELECT` из S3: ```sql INSERT INTO posts_with_location SELECT Id, PostTypeId::UInt8, AcceptedAnswerId, CreationDate, Score, ViewCount, Body, OwnerUserId, OwnerDisplayName, LastEditorUserId, LastEditorDisplayName, LastEditDate, LastActivityDate, Title, Tags, AnswerCount, CommentCount, FavoriteCount, ContentLicense, ParentId, CommunityOwnedDate, ClosedDate FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') @@ -297,7 +297,7 @@ INSERT INTO posts_with_location SELECT Id, PostTypeId::UInt8, AcceptedAnswerId, 0 строк в наборе. Затрачено: 36.830 сек. Обработано 238.98 млн строк, 2.64 ГБ (6.49 млн строк/с., 71.79 МБ/с.) ``` -Теперь мы можем определить название местоположения, откуда поступает большинство сообщений: +Теперь мы можем узнать название места, из которого поступает большинство записей: ```sql SELECT Location, count() AS c @@ -314,29 +314,29 @@ LIMIT 4 │ London, United Kingdom │ 538738 │ └────────────────────────┴────────┘ -Получено 4 строки. Время выполнения: 0.142 сек. Обработано 59.82 млн строк, 1.08 ГБ (420.73 млн строк/с., 7.60 ГБ/с.) -Пиковое потребление памяти: 666.82 МиБ. +Получено 4 строки. Прошло: 0.142 сек. Обработано 59.82 млн строк, 1.08 ГБ (420.73 млн строк/сек., 7.60 ГБ/сек.) +Пиковое использование памяти: 666.82 МиБ. ``` -## Расширенные темы по словарям {#advanced-dictionary-topics} +## Расширенные темы о словарях {#advanced-dictionary-topics} ### Выбор `LAYOUT` словаря {#choosing-the-dictionary-layout} -Секция `LAYOUT` управляет внутренней структурой данных словаря. Существует несколько вариантов, которые описаны [здесь](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory). Некоторые рекомендации по выбору подходящего варианта структуры можно найти [здесь](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout). +Клауза `LAYOUT` управляет внутренней структурой данных словаря. Существует несколько вариантов, описанных [здесь](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory). Некоторые рекомендации по выбору подходящего `LAYOUT` можно найти [здесь](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout). ### Обновление словарей {#refreshing-dictionaries} -Мы указали для словаря `LIFETIME` со значением `MIN 600 MAX 900`. LIFETIME — это интервал обновления словаря; в данном случае значения приводят к периодической перезагрузке через случайный интервал между 600 и 900 с. Этот случайный интервал необходим для распределения нагрузки на источник словаря при обновлении на большом количестве серверов. Во время обновления старая версия словаря по‑прежнему может запрашиваться; только начальная загрузка блокирует запросы. Обратите внимание, что установка `(LIFETIME(0))` предотвращает обновление словарей. -Словари можно принудительно перезагрузить с помощью команды `SYSTEM RELOAD DICTIONARY`. +Мы указали для словаря `LIFETIME` со значением `MIN 600 MAX 900`. LIFETIME — это интервал обновления словаря; в данном случае значения приводят к периодической перезагрузке через случайный интервал между 600 и 900 секундами. Такой случайный интервал необходим для распределения нагрузки на источник словаря при обновлении на большом числе серверов. Во время обновления старая версия словаря по-прежнему может использоваться в запросах, при этом только начальная загрузка блокирует запросы. Обратите внимание, что задание `(LIFETIME(0))` предотвращает обновление словарей. +Принудительную перезагрузку словарей можно выполнить с помощью команды `SYSTEM RELOAD DICTIONARY`. -Для источников баз данных, таких как ClickHouse и Postgres, можно настроить запрос, который будет обновлять словари только в том случае, если они действительно изменились (это определяется ответом запроса), а не через фиксированный периодический интервал. Дополнительные сведения можно найти [здесь](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime). +Для источников данных, таких как ClickHouse и Postgres, вы можете настроить запрос, который будет обновлять словари только в том случае, если они действительно изменились (это определяется ответом на запрос), а не с периодическим интервалом. Дополнительные подробности можно найти [здесь](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime). ### Другие типы словарей {#other-dictionary-types} -ClickHouse также поддерживает [иерархические словари](/sql-reference/dictionaries#hierarchical-dictionaries), [полигональные словари](/sql-reference/dictionaries#polygon-dictionaries) и словари на основе [регулярных выражений](/sql-reference/dictionaries#regexp-tree-dictionary). +ClickHouse также поддерживает [иерархические](/sql-reference/dictionaries#hierarchical-dictionaries), [многоугольные](/sql-reference/dictionaries#polygon-dictionaries) и [словарі на основе регулярных выражений](/sql-reference/dictionaries#regexp-tree-dictionary) словари. -### Дополнительные материалы {#more-reading} +### Дополнительные материалы для чтения {#more-reading} - [Использование словарей для ускорения запросов](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse) -- [Расширенная конфигурация словарей](/sql-reference/dictionaries) +- [Расширенная конфигурация словарей](/sql-reference/dictionaries) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md index 42c51c80d44..3fb71630005 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Atomic +# Atomic {#atomic} Движок `Atomic` поддерживает неблокирующие запросы [`DROP TABLE`](#drop-detach-table) и [`RENAME TABLE`](#rename-table), а также атомарные запросы [`EXCHANGE TABLES`](#exchange-tables). Движок базы данных `Atomic` по умолчанию используется в open-source версии ClickHouse. @@ -19,16 +19,16 @@ doc_type: 'reference' -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...]; ``` -## Особенности и рекомендации +## Особенности и рекомендации {#specifics-and-recommendations} -### UUID таблицы +### UUID таблицы {#table-uuid} Каждая таблица в базе данных `Atomic` имеет постоянный идентификатор [UUID](../../sql-reference/data-types/uuid.md) и хранит свои данные в следующем каталоге: @@ -50,16 +50,16 @@ CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE Вы можете использовать настройку [show_table_uuid_in_table_create_query_if_not_nil](../../operations/settings/settings.md#show_table_uuid_in_table_create_query_if_not_nil), чтобы отображать UUID в запросе `SHOW CREATE`. ::: -### RENAME TABLE +### RENAME TABLE {#rename-table} Запросы [`RENAME`](../../sql-reference/statements/rename.md) не изменяют UUID и не перемещают данные таблицы. Эти запросы выполняются сразу и не ждут завершения других запросов, использующих таблицу. -### DROP/DETACH TABLE +### DROP/DETACH TABLE {#drop-detach-table} При использовании `DROP TABLE` данные сразу не удаляются. Движок `Atomic` просто помечает таблицу как удалённую, перемещая её метаданные в `/clickhouse_path/metadata_dropped/` и уведомляя фоновый поток. Задержка перед окончательным удалением данных таблицы задаётся настройкой [`database_atomic_delay_before_drop_table_sec`](../../operations/server-configuration-parameters/settings.md#database_atomic_delay_before_drop_table_sec). Вы можете указать синхронный режим с помощью модификатора `SYNC`. Для этого используйте настройку [`database_atomic_wait_for_drop_and_detach_synchronously`](../../operations/settings/settings.md#database_atomic_wait_for_drop_and_detach_synchronously). В этом случае `DROP` ожидает завершения выполняющихся `SELECT`, `INSERT` и других запросов, которые используют таблицу. Таблица будет удалена, когда она больше не используется. -### EXCHANGE TABLES/DICTIONARIES +### EXCHANGE TABLES/DICTIONARIES {#exchange-tables} Запрос [`EXCHANGE`](../../sql-reference/statements/exchange.md) атомарно меняет местами таблицы или словари. Например, вместо этой неатомарной операции: @@ -73,11 +73,11 @@ RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table; EXCHANGE TABLES новая_таблица AND старая_таблица; ``` -### ReplicatedMergeTree в базе данных Atomic +### ReplicatedMergeTree в базе данных Atomic {#replicatedmergetree-in-atomic-database} Для таблиц [`ReplicatedMergeTree`](/engines/table-engines/mergetree-family/replication) рекомендуется не указывать параметры движка для пути в ZooKeeper и имени реплики. В этом случае будут использоваться параметры конфигурации [`default_replica_path`](../../operations/server-configuration-parameters/settings.md#default_replica_path) и [`default_replica_name`](../../operations/server-configuration-parameters/settings.md#default_replica_name). Если вы хотите явно задать параметры движка, рекомендуется использовать макрос `{uuid}`. Это гарантирует, что для каждой таблицы в ZooKeeper автоматически генерируются уникальные пути. -### Диск для метаданных +### Диск для метаданных {#metadata-disk} Если в `SETTINGS` указан `disk`, этот диск используется для хранения файлов метаданных таблицы. Например: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md index fe431c7cba0..3e8ac70a2d8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md @@ -7,17 +7,13 @@ title: 'Backup' doc_type: 'reference' --- - - -# Backup +# Backup {#backup} База данных Backup позволяет мгновенно подключить таблицу или базу данных из [резервных копий](../../operations/backup) в режиме только для чтения. База данных Backup работает как с инкрементными, так и с неинкрементными резервными копиями. - - -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE backup_database @@ -38,8 +34,7 @@ ENGINE = Backup('database_name_inside_backup', Disk('disk_name', 'backup_name')) * `database_name_inside_backup` — Имя базы данных внутри резервной копии. * `backup_destination` — Место размещения резервной копии. - -## Пример использования +## Пример использования {#usage-example} Рассмотрим пример с местом назначения резервных копий типа `Disk`. Сначала настроим диск для резервных копий в `storage.xml`: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md index 437d1c815d9..dd5744386f0 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' -# DataLakeCatalog +# DataLakeCatalog {#datalakecatalog} Движок базы данных `DataLakeCatalog` позволяет подключить ClickHouse к внешним каталогам данных и выполнять запросы к данным в открытых табличных форматах без необходимости дублирования данных. @@ -28,7 +28,7 @@ doc_type: 'reference' -## Создание базы данных +## Создание базы данных {#creating-a-database} Чтобы использовать движок `DataLakeCatalog`, необходимо включить приведённые ниже настройки: @@ -66,7 +66,7 @@ SETTINGS | `region` | Регион AWS для сервиса (например, `us-east-1`) | -## Примеры +## Примеры {#examples} Ниже приведены примеры использования движка `DataLakeCatalog`: 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..4f4cc2b35f7 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 @@ -8,9 +8,7 @@ title: 'Движки баз данных' doc_type: 'landing-page' --- - - -# Движки баз данных +# Движки баз данных {#database-engines} Движки баз данных позволяют работать с таблицами. По умолчанию ClickHouse использует движок базы данных [Atomic](../../engines/database-engines/atomic.md), который предоставляет настраиваемые [движки таблиц](../../engines/table-engines/index.md) и [диалект SQL](../../sql-reference/syntax.md). @@ -18,24 +16,24 @@ doc_type: 'landing-page' {/* Оглавление для этой страницы автоматически генерируется скриптом https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh - на основе полей фронтматтера YAML: slug, description, title. + из полей YAML front matter: slug, description, title. - Если вы заметили ошибку, отредактируйте YML-фронтматтер самих страниц. + Если вы заметили ошибку, отредактируйте YML front matter самих страниц. */ } -{/*АВТОГЕНЕРИРОВАНО_НАЧАЛО*/ } +{/*AUTOGENERATED_START*/ } -| Страница | Описание | +| Page | Description | | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [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 и выполняется на всех репликах заданной базы данных. | +| [Shared](/engines/database-engines/shared) | Страница, описывающая движок базы данных `Shared`, доступный в ClickHouse Cloud. | +| [Lazy](/engines/database-engines/lazy) | Хранит таблицы в RAM только в течение `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 к внешним каталогам данных и выполнять запросы к данным в формате открытых таблиц. | +| [Backup](/engines/database-engines/backup) | Позволяет мгновенно подключать таблицу или базу данных из резервных копий в режиме только для чтения. | +| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | Создаёт в ClickHouse базу данных с таблицами из базы данных PostgreSQL. | +| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | Движок базы данных `DataLakeCatalog` позволяет подключить ClickHouse к внешним каталогам данных и выполнять запросы к данным в открытых табличных форматах | -{/*AUTOGENERATED_END*/ } +{/*АВТОГЕНЕРИРОВАНО_НАЧАЛО*/ } diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md index 806de8919fa..258c83dd07e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md @@ -7,17 +7,13 @@ title: 'Lazy' doc_type: 'reference' --- +# Lazy {#lazy} +Удерживает таблицы в RAM только в течение `expiration_time_in_seconds` секунд после последнего обращения. Может использоваться только с таблицами типа *Log. -# Lazy +Оптимизирован для хранения множества небольших таблиц *Log, между обращениями к которым проходят большие промежутки времени. -Удерживает таблицы в RAM только в течение `expiration_time_in_seconds` секунд после последнего обращения. Может использоваться только с таблицами типа \*Log. - -Оптимизирован для хранения множества небольших таблиц \*Log, между обращениями к которым проходят большие промежутки времени. - - - -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE testlazy diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md index 0708017bdc9..16804b2daaf 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MaterializedPostgreSQL +# MaterializedPostgreSQL {#materializedpostgresql} @@ -35,7 +35,7 @@ SET allow_experimental_database_materialized_postgresql=1 ::: -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -50,7 +50,7 @@ ENGINE = MaterializedPostgreSQL('host:port', 'database', 'user', 'password') [SE * `password` — пароль пользователя. -## Пример использования +## Пример использования {#example-of-use} ```sql CREATE DATABASE postgres_db @@ -66,7 +66,7 @@ SELECT * FROM postgresql_db.postgres_table; ``` -## Динамическое добавление новых таблиц в репликацию +## Динамическое добавление новых таблиц в репликацию {#dynamically-adding-table-to-replication} После создания базы данных `MaterializedPostgreSQL` она не будет автоматически обнаруживать новые таблицы в соответствующей базе данных PostgreSQL. Такие таблицы можно добавить вручную: @@ -79,7 +79,7 @@ ATTACH TABLE postgres_database.new_table; ::: -## Динамическое исключение таблиц из репликации +## Динамическое исключение таблиц из репликации {#dynamically-removing-table-from-replication} Можно исключить отдельные таблицы из репликации: @@ -88,7 +88,7 @@ DETACH TABLE postgres_database.table_to_remove PERMANENTLY; ``` -## Схема PostgreSQL +## Схема PostgreSQL {#schema} Схемы PostgreSQL ([schema](https://www.postgresql.org/docs/9.1/ddl-schemas.html)) можно настраивать тремя способами (начиная с версии 21.12). @@ -136,7 +136,7 @@ SELECT * FROM database1.`schema2.table2`; Предупреждение: в данном случае точки в имени таблицы не допускаются. -## Требования +## Требования {#requirements} 1. Параметр [wal_level](https://www.postgresql.org/docs/current/runtime-config-wal.html) должен иметь значение `logical`, а параметр `max_replication_slots` — значение не менее `2` в конфигурационном файле PostgreSQL. @@ -171,9 +171,9 @@ WHERE oid = 'postgres_table'::regclass; ::: -## Настройки +## Настройки {#settings} -### `materialized_postgresql_tables_list` +### `materialized_postgresql_tables_list` {#materialized-postgresql-tables-list} Задает список таблиц базы данных PostgreSQL, разделенный запятыми, которые будут реплицироваться с помощью движка базы данных [MaterializedPostgreSQL](../../engines/database-engines/materialized-postgresql.md). @@ -185,15 +185,15 @@ materialized_postgresql_tables_list = 'table1(co1, col2),table2,table3(co3, col5 Значение по умолчанию: пустой список — означает, что будет реплицирована вся база данных PostgreSQL. -### `materialized_postgresql_schema` +### `materialized_postgresql_schema` {#materialized-postgresql-schema} Значение по умолчанию: пустая строка (используется схема по умолчанию). -### `materialized_postgresql_schema_list` +### `materialized_postgresql_schema_list` {#materialized-postgresql-schema-list} Значение по умолчанию: пустой список (используется схема по умолчанию). -### `materialized_postgresql_max_block_size` +### `materialized_postgresql_max_block_size` {#materialized-postgresql-max-block-size} Задаёт количество строк, собираемых в памяти перед сбросом данных в таблицу базы данных PostgreSQL. @@ -203,11 +203,11 @@ materialized_postgresql_tables_list = 'table1(co1, col2),table2,table3(co3, col5 Значение по умолчанию: `65536`. -### `materialized_postgresql_replication_slot` +### `materialized_postgresql_replication_slot` {#materialized-postgresql-replication-slot} Слот репликации, созданный пользователем. Должен использоваться вместе с `materialized_postgresql_snapshot`. -### `materialized_postgresql_snapshot` +### `materialized_postgresql_snapshot` {#materialized-postgresql-snapshot} Текстовая строка, идентифицирующая снимок, из которого будет выполнен [начальный дамп таблиц PostgreSQL](../../engines/database-engines/materialized-postgresql.md). Должен использоваться вместе с `materialized_postgresql_replication_slot`. @@ -225,7 +225,7 @@ SELECT * FROM database1.table1; ALTER DATABASE postgres_database MODIFY SETTING materialized_postgresql_max_block_size = <новый_размер>; ``` -### `materialized_postgresql_use_unique_replication_consumer_identifier` +### `materialized_postgresql_use_unique_replication_consumer_identifier` {#materialized_postgresql_use_unique_replication_consumer_identifier} Использует уникальный идентификатор потребителя при репликации. Значение по умолчанию — `0`. Если установлено в `1`, позволяет настроить несколько таблиц `MaterializedPostgreSQL`, указывающих на одну и ту же таблицу `PostgreSQL`. 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..9dab4fbcd49 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 @@ -10,8 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - -# Движок базы данных MySQL +# Движок базы данных MySQL {#mysql-database-engine} @@ -25,9 +24,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - `CREATE TABLE` - `ALTER` - - -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -41,7 +38,6 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') * `user` — пользователь MySQL. * `password` — пароль пользователя. - ## Поддержка типов данных {#data_types-support} | MySQL | ClickHouse | @@ -64,9 +60,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') Поддерживается тип [Nullable](../../sql-reference/data-types/nullable.md). - - -## Поддержка глобальных переменных +## Поддержка глобальных переменных {#global-variables-support} Для лучшей совместимости вы можете обращаться к глобальным переменным в стиле MySQL — через `@@identifier`. @@ -85,8 +79,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') SELECT @@version; ``` - -## Примеры использования +## Примеры использования {#examples-of-use} Таблица в MySQL: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md index f0e0ee1274c..651f61d18f3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# PostgreSQL +# PostgreSQL {#postgresql} Позволяет подключаться к базам данных на удалённом сервере [PostgreSQL](https://www.postgresql.org). Поддерживает операции чтения и записи (запросы `SELECT` и `INSERT`) для обмена данными между ClickHouse и PostgreSQL. @@ -19,7 +19,7 @@ doc_type: 'guide' -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE test_database @@ -56,7 +56,7 @@ ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use -## Примеры использования +## Примеры использования {#examples-of-use} База данных в ClickHouse, обменивающаяся данными с сервером PostgreSQL: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md index 2208376ea83..41025a6ad98 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md @@ -11,7 +11,7 @@ doc_type: 'reference' -# Replicated +# Replicated {#replicated} Движок основан на движке [Atomic](../../engines/database-engines/atomic.md). Он поддерживает репликацию метаданных по журналу DDL, который записывается в ZooKeeper и выполняется на всех репликах заданной базы данных. @@ -19,7 +19,7 @@ doc_type: 'reference' -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE testdb [UUID '...'] ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...] @@ -56,7 +56,7 @@ DDL-запросы с базой данных `Replicated` работают ан -## Пример использования +## Пример использования {#usage-example} Создание кластера с тремя хостами: @@ -155,7 +155,7 @@ node2 :) SELECT materialize(hostName()) AS host, groupArray(n) FROM r.d GROUP BY ``` -## Параметры +## Параметры {#settings} Поддерживаются следующие параметры: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md index 03f815ab6f6..8e1d241a36c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md @@ -12,7 +12,7 @@ import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -# Движок базы данных Shared +# Движок базы данных Shared {#shared-database-engine} Движок базы данных `Shared` работает совместно с Shared Catalog для управления базами данных, таблицы которых используют stateless‑движки таблиц, такие как [`SharedMergeTree`](/cloud/reference/shared-merge-tree). Эти движки таблиц не записывают постоянное состояние на диск и совместимы с динамическими вычислительными средами. @@ -30,7 +30,7 @@ import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -## Синтаксис +## Синтаксис {#syntax} Для конечных пользователей работа с Shared Catalog и движком базы данных Shared не требует дополнительной конфигурации. Создание базы данных выполняется как обычно: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md index 1807def09b5..05cb67cdcee 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md @@ -10,13 +10,13 @@ doc_type: 'reference' -# SQLite +# SQLite {#sqlite} Позволяет подключаться к базе данных [SQLite](https://www.sqlite.org/index.html) и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и SQLite. -## Создание базы данных +## Создание базы данных {#creating-a-database} ```sql CREATE DATABASE sqlite_database @@ -46,7 +46,7 @@ SQLite не требует отдельного управления служб -## Пример использования +## Пример использования {#usage-example} База данных в ClickHouse, подключённая к SQLite: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/index.md index 561f2e07e52..ada5fb3706d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/index.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Движки таблиц +# Движки таблиц {#table-engines} Движок таблицы (тип таблицы) определяет: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md index 4e51b90f647..75b0d8122fb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md @@ -9,15 +9,11 @@ title: 'Табличный движок ExternalDistributed' doc_type: 'reference' --- - - -# Движок таблицы ExternalDistributed +# Движок таблицы ExternalDistributed {#externaldistributed-table-engine} Движок `ExternalDistributed` позволяет выполнять запросы `SELECT` к данным, которые хранятся на удалённых серверах с MySQL или PostgreSQL. Принимает в качестве аргумента движки [MySQL](../../../engines/table-engines/integrations/mysql.md) или [PostgreSQL](../../../engines/table-engines/integrations/postgresql.md), поэтому возможен шардинг. - - -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -44,8 +40,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `user` — Имя пользователя. * `password` — Пароль пользователя. - -## Детали реализации +## Детали реализации {#implementation-details} Поддерживаются несколько реплик; их необходимо перечислять через `|`, а шарды — через `,`. Например: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md index 45138339727..b9bb1f91db4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md @@ -9,14 +9,14 @@ doc_type: 'reference' -# Движок таблицы ArrowFlight +# Движок таблицы ArrowFlight {#arrowflight-table-engine} Движок таблицы ArrowFlight позволяет ClickHouse выполнять запросы к удалённым наборам данных по протоколу [Apache Arrow Flight](https://arrow.apache.org/docs/format/Flight.html). Эта интеграция даёт возможность ClickHouse получать данные с внешних серверов с поддержкой Flight в колонном формате Arrow с высокой производительностью. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) (это будет работать только в том случае, если сервер Arrow Flight это допускает). -## Пример использования +## Пример использования {#usage-example} В этом примере показано, как создать таблицу для чтения данных с удалённого сервера Arrow Flight: 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..765b39acf7d 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,13 +8,9 @@ title: 'Табличный движок AzureQueue' doc_type: 'reference' --- +# Табличный движок AzureQueue {#azurequeue-table-engine} - -# Движок таблицы 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} @@ -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). **Пример** @@ -46,22 +42,58 @@ ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1; SETTINGS mode = 'unordered' ``` +## 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 Blob Storage, в которую будут перемещаться успешно обработанные файлы, если в качестве назначения используется другой контейнер Azure. + +Возможные значения: + +* String. + +Значение по умолчанию: пустая строка. + +### `after_processing_move_container` {#after_processing_move_container} + +Имя контейнера, в который необходимо переместить успешно обработанные файлы, если целевым контейнером является другой контейнер Azure. -## Настройки {#settings} +Возможные значения: -Набор поддерживаемых настроек совпадает с настройками движка таблиц `S3Queue`, но без префикса `s3queue_`. См. [полный список настроек](../../../engines/table-engines/integrations/s3queue.md#settings). -Чтобы получить список настроек, настроенных для таблицы, используйте таблицу `system.azure_queue_settings`. Доступно начиная с версии `24.10`. +* Строка. +Значение по умолчанию: пустая строка. -## Description {#description} +Пример: -`SELECT` не особенно полезен для потоковой загрузки данных (за исключением отладки), поскольку каждый файл может быть импортирован только один раз. Более практичным является создание потоков обработки в реальном времени с использованием [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: +```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} -1. Используйте движок для создания таблицы, которая будет получать данные из указанного пути в S3, и рассматривайте её как поток данных. -2. Создайте таблицу с требуемой структурой. -3. Создайте материализованное представление, которое преобразует данные из движка и помещает их в ранее созданную таблицу. +`SELECT` не особенно полезен для потокового импорта (кроме отладки), потому что каждый файл можно импортировать только один раз. Гораздо практичнее создавать потоки в реальном времени с использованием [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: -Когда `MATERIALIZED VIEW` подключается к движку, оно начинает собирать данные в фоновом режиме. +1. Используйте табличный движок для создания таблицы, потребляющей данные из указанного пути в S3, и рассматривайте её как поток данных. +2. Создайте таблицу с требуемой структурой. +3. Создайте материализованное представление, которое преобразует данные из табличного движка и записывает их в ранее созданную таблицу. + +Когда `MATERIALIZED VIEW` связывается с табличным движком, оно начинает собирать данные в фоновом режиме. Пример: @@ -80,32 +112,30 @@ CREATE MATERIALIZED VIEW consumer TO stats SELECT * FROM stats ORDER BY key; ``` - ## Виртуальные столбцы {#virtual-columns} -- `_path` — Путь к файлу. -- `_file` — Имя файла. - -Подробнее о виртуальных столбцах см. [здесь](../../../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`. -Возможности интроспекции аналогичны [движку таблиц 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 +144,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 +172,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +Строка 1: ────── hostname: clickhouse event_date: 2024-12-16 @@ -157,6 +187,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/azureBlobStorage.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md index 05dbb08786b..ccc134f3794 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Табличный движок AzureBlobStorage +# Табличный движок AzureBlobStorage {#azureblobstorage-table-engine} Этот движок предоставляет интеграцию с экосистемой [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs). -## Создание таблицы +## Создание таблицы {#create-table} ```sql CREATE TABLE azure_blob_storage_table (name String, value UInt32) @@ -24,7 +24,7 @@ CREATE TABLE azure_blob_storage_table (name String, value UInt32) [SETTINGS ...] ``` -### Параметры движка +### Параметры движка {#engine-parameters} * `endpoint` — URL конечной точки AzureBlobStorage с контейнером и префиксом. Дополнительно может содержать `account_name`, если это требуется используемому методу аутентификации (`http://azurite1:{port}/[account_name]{container_name}/{data_prefix}`), либо эти параметры могут быть переданы отдельно с помощью `storage_account_url`, `account_name` и `container`. Для указания префикса должен использоваться `endpoint`. * `endpoint_contains_account_name` — флаг, указывающий, содержит ли `endpoint` `account_name`, так как это требуется только для некоторых методов аутентификации. (По умолчанию: `true`) @@ -70,7 +70,7 @@ SELECT * FROM test_table; -## Аутентификация +## Аутентификация {#authentication} В настоящее время есть три способа аутентификации: @@ -78,7 +78,7 @@ SELECT * FROM test_table; * `SAS Token` — может использоваться при указании `endpoint`, `connection_string` или `storage_account_url`. Определяется по наличию символа '?' в URL. См. раздел [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage#using-shared-access-signatures-sas-sas-tokens) с примерами. * `Workload Identity` — может использоваться при указании `endpoint` или `storage_account_url`. Если параметр `use_workload_identity` установлен в конфигурации, для аутентификации используется механизм [workload identity](https://github.com/Azure/azure-sdk-for-cpp/tree/main/sdk/identity/azure-identity#authenticate-azure-hosted-applications). -### Кэш данных +### Кэш данных {#data-cache} Движок таблиц `Azure` поддерживает кэширование данных на локальном диске. Параметры конфигурации и использование кэша файловой системы описаны в этом [разделе](/operations/storing-data.md/#using-local-cache). @@ -107,13 +107,13 @@ SETTINGS filesystem_cache_name = 'cache_for_azure', enable_filesystem_cache = 1; 2. повторно используйте конфигурацию кеша (и, соответственно, хранилище кеша) из секции `storage_configuration` ClickHouse, [описанной здесь](/operations/storing-data.md/#using-local-cache) -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — необязательный параметр. В большинстве случаев ключ партиционирования не нужен, а когда он все же требуется, обычно нет необходимости делать его более детализированным, чем по месяцам. Партиционирование не ускоряет выполнение запросов (в отличие от выражения ORDER BY). Не следует использовать слишком детализированное партиционирование. Не партиционируйте данные по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY). Для партиционирования по месяцам используйте выражение `toYYYYMM(date_column)`, где `date_column` — это столбец с датой типа [Date](/sql-reference/data-types/date.md). Имена партиций в этом случае имеют формат `"YYYYMM"`. -#### Стратегия партиционирования +#### Стратегия партиционирования {#partition-strategy} `WILDCARD` (по умолчанию): заменяет подстановочный шаблон `{_partition_id}` в пути к файлу фактическим ключом партиции. Чтение не поддерживается. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md index 3e530298ff5..3de508eafa6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Табличный движок DeltaLake +# Табличный движок DeltaLake {#deltalake-table-engine} Этот табличный движок обеспечивает доступ только для чтения к существующим таблицам [Delta Lake](https://github.com/delta-io/delta) в Amazon S3. -## Создание таблицы +## Создание таблицы {#create-table} Учтите, что таблица Delta Lake уже должна существовать в S3: эта команда не принимает параметры DDL для создания новой таблицы. @@ -55,7 +55,7 @@ CREATE TABLE deltalake ENGINE=DeltaLake('http://mars-doc-test.s3.amazonaws.com/c CREATE TABLE deltalake ENGINE=DeltaLake(deltalake_conf, filename = 'test_table') ``` -### Кэш данных +### Кэш данных {#data-cache} Движок таблиц `Iceberg` и табличная функция поддерживают кэширование данных так же, как хранилища `S3`, `AzureBlobStorage`, `HDFS`. См. [здесь](../../../engines/table-engines/integrations/s3.md#data-cache). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md index b84f7467e40..c0b2552cb28 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - -# Табличный движок EmbeddedRocksDB +# Табличный движок EmbeddedRocksDB {#embeddedrocksdb-table-engine} Этот движок позволяет интегрировать ClickHouse с [RocksDB](http://rocksdb.org/). - - -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,8 +56,7 @@ ENGINE = EmbeddedRocksDB PRIMARY KEY key ``` - -## Метрики +## Метрики {#metrics} Кроме того, есть таблица `system.rocksdb`, содержащая статистику RocksDB: @@ -76,8 +72,7 @@ FROM system.rocksdb └───────────────────────────┴───────┘ ``` - -## Конфигурация +## Конфигурация {#configuration} Вы также можете изменить любые [параметры RocksDB](https://github.com/facebook/rocksdb/wiki/Option-String-and-Option-Map) с помощью конфигурации: @@ -105,10 +100,9 @@ FROM system.rocksdb По умолчанию тривиальная оптимизация приблизительного подсчёта отключена, что может снизить производительность запросов `count()`. Чтобы включить эту оптимизацию, установите `optimize_trivial_approximate_count_query = 1`. Также этот параметр влияет на `system.tables` для движка EmbeddedRocksDB — включите его, чтобы увидеть приблизительные значения для `total_rows` и `total_bytes`. +## Поддерживаемые операции {#supported-operations} -## Поддерживаемые операции - -### Вставки +### Вставки {#inserts} При вставке новых строк в `EmbeddedRocksDB`, если ключ уже существует, его значение обновляется, иначе создаётся новый ключ. @@ -118,7 +112,7 @@ FROM system.rocksdb INSERT INTO test VALUES ('некоторый ключ', 1, 'значение', 3.2); ``` -### Удаление +### Удаление {#deletes} Строки можно удалять с помощью запросов `DELETE` или `TRUNCATE`. @@ -134,7 +128,7 @@ ALTER TABLE test DELETE WHERE key LIKE 'some%' AND v1 > 1; TRUNCATE TABLE test; ``` -### Обновления +### Обновления {#updates} Значения можно обновлять с помощью запроса `ALTER TABLE`. Первичный ключ нельзя изменять. @@ -142,7 +136,7 @@ TRUNCATE TABLE test; ALTER TABLE test UPDATE v1 = v1 * 10 + 2 WHERE key LIKE 'some%' AND v3 > 3.1; ``` -### Соединения +### Соединения {#joins} Поддерживается специальный тип соединения `direct` с таблицами EmbeddedRocksDB. Такое прямое соединение позволяет избежать формирования хеш-таблицы в памяти и @@ -161,9 +155,9 @@ SET join_algorithm = 'direct, hash' Когда параметр `join_algorithm` установлен в значение `direct, hash`, по возможности будут использоваться прямые соединения, а в остальных случаях — хеш-соединения. ::: -#### Пример +#### Пример {#example} -##### Создание и заполнение таблицы EmbeddedRocksDB +##### Создание и заполнение таблицы EmbeddedRocksDB {#create-and-populate-an-embeddedrocksdb-table} ```sql CREATE TABLE rdb @@ -185,7 +179,7 @@ INSERT INTO rdb FROM numbers_mt(10); ``` -##### Создайте и заполните таблицу для объединения с таблицей `rdb` +##### Создайте и заполните таблицу для объединения с таблицей `rdb` {#create-and-populate-a-table-to-join-with-table-rdb} ```sql CREATE TABLE t2 @@ -200,13 +194,13 @@ INSERT INTO t2 SELECT number AS k FROM numbers_mt(10) ``` -##### Установите алгоритм соединения в значение `direct` +##### Установите алгоритм соединения в значение `direct` {#set-the-join-algorithm-to-direct} ```sql SET join_algorithm = 'direct' ``` -##### Внутреннее соединение (INNER JOIN) +##### Внутреннее соединение (INNER JOIN) {#an-inner-join} ```sql SELECT * @@ -231,7 +225,7 @@ ORDER BY key ASC └─────┴─────────┴────────┴────────┘ ``` -### Подробнее о соединениях +### Подробнее о соединениях {#more-information-on-joins} * [настройка `join_algorithm`](/operations/settings/settings.md#join_algorithm) * [оператор JOIN](/sql-reference/statements/select/join.md) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md index c5c440f2548..75d677a601e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы HDFS +# Движок таблицы HDFS {#hdfs-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## Использование +## Использование {#usage} ```sql ENGINE = HDFS(URI, format) @@ -35,7 +35,7 @@ ENGINE = HDFS(URI, format) [Formats](/sql-reference/formats#formats-overview). * [PARTITION BY expr] -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — необязательный параметр. В большинстве случаев ключ партиционирования не требуется, а если и требуется, обычно нет необходимости делать его более детализированным, чем по месяцам. Партиционирование не ускоряет выполнение запросов (в отличие от выражения ORDER BY). Не следует использовать излишне детализированное партиционирование. Не выполняйте партиционирование данных по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY). @@ -69,7 +69,7 @@ SELECT * FROM hdfs_engine_table LIMIT 2 ``` -## Подробности реализации +## Подробности реализации {#implementation-details} * Операции чтения и записи могут выполняться параллельно. * Не поддерживаются: @@ -137,7 +137,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV') ``` -## Конфигурация +## Конфигурация {#configuration} Как и GraphiteMergeTree, движок HDFS поддерживает расширенную настройку с помощью конфигурационного файла ClickHouse. Доступны два ключа конфигурации: глобальный (`hdfs`) и пользовательский (`hdfs_*`). Сначала применяется глобальная конфигурация, а затем — пользовательская (если она есть). @@ -155,9 +155,9 @@ CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9 ``` -### Параметры конфигурации +### Параметры конфигурации {#configuration-options} -#### Поддерживаемые libhdfs3 +#### Поддерживаемые libhdfs3 {#supported-by-libhdfs3} | **параметр** | **значение по умолчанию** | @@ -231,7 +231,7 @@ CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9 Если указаны `hadoop_kerberos_keytab`, `hadoop_kerberos_principal` или `hadoop_security_kerberos_ticket_cache_path`, будет использоваться аутентификация Kerberos. В этом случае `hadoop_kerberos_keytab` и `hadoop_kerberos_principal` являются обязательными. -## Поддержка HDFS Namenode HA +## Поддержка HDFS Namenode HA {#namenode-ha} libhdfs3 поддерживает HDFS Namenode HA. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md index 6849972b2bb..c438dd8772a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md @@ -9,22 +9,19 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# Движок таблицы Hive {#hive-table-engine} -# Движок таблицы Hive - - + Движок Hive позволяет выполнять запросы `SELECT` к таблицам Hive в HDFS. В данный момент он поддерживает следующие форматы входных данных: -- Text: поддерживает только простые скалярные типы столбцов, за исключением `binary` - -- ORC: поддерживает простые скалярные типы столбцов, за исключением `char`; из сложных типов поддерживает только тип `array` - -- Parquet: поддерживает все простые скалярные типы столбцов; из сложных типов поддерживает только тип `array` +* Text: поддерживает только простые скалярные типы столбцов, за исключением `binary` +* ORC: поддерживает простые скалярные типы столбцов, за исключением `char`; из сложных типов поддерживает только тип `array` +* Parquet: поддерживает все простые скалярные типы столбцов; из сложных типов поддерживает только тип `array` -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -52,10 +49,9 @@ PARTITION BY expr * `table` — имя удалённой таблицы. +## Пример использования {#usage-example} -## Пример использования - -### Как использовать локальный кэш файловой системы HDFS +### Как использовать локальный кэш файловой системы HDFS {#how-to-use-local-cache-for-hdfs-filesystem} Мы настоятельно рекомендуем включать локальное кэширование для удалённых файловых систем. Тесты производительности показывают, что при использовании кэша работа почти в 2 раза быстрее. @@ -75,9 +71,9 @@ PARTITION BY expr * limit_size: Обязательный параметр. Максимальный размер (в байтах) файлов локального кэша. * bytes_read_before_flush: Объём данных (в байтах), который будет прочитан перед сбросом на локальную файловую систему при загрузке файла из удалённой файловой системы. Значение по умолчанию — 1 МБ. -### Запрос к таблице Hive с форматом ввода ORC +### Запрос к таблице Hive с форматом ввода ORC {#query-hive-table-with-orc-input-format} -#### Создание таблицы в Hive +#### Создание таблицы в Hive {#create-table-in-hive} ```text hive > CREATE TABLE `test`.`test_orc`( @@ -125,8 +121,7 @@ OK Time taken: 0.295 seconds, Fetched: 1 row(s) ``` -#### Создание таблицы в ClickHouse - +#### Создание таблицы в ClickHouse {#create-table-in-clickhouse} Таблица в ClickHouse, которая получает данные из созданной выше таблицы Hive: @@ -199,9 +194,9 @@ day: 2021-09-18 1 rows in set. Elapsed: 0.078 sec. ``` -### Выполнение запроса к таблице Hive с форматом ввода Parquet +### Выполнение запроса к таблице Hive с форматом ввода Parquet {#query-hive-table-with-parquet-input-format} -#### Создание таблицы в Hive +#### Создание таблицы в Hive {#create-table-in-hive-1} ```text hive > @@ -241,7 +236,6 @@ OK Затрачено времени: 0,51 секунд ``` - hive > insert into test.test_parquet partition(day='2021-09-18') select 1, 2, 3, 4, 5, 6.11, 7.22, 8.333, current_timestamp(), current_date(), 'hello world', 'hello world', 'hello world', true, 'hello world', array(1, 2, 3), array('hello world', 'hello world'), array(float(1.1), float(1.2)), array(array(1, 2), array(3, 4)), array(array('a', 'b'), array('c', 'd')), array(array(float(1.11), float(2.22)), array(float(3.33), float(4.44))); OK Затраченное время: 36.025 сек. @@ -329,7 +323,6 @@ day: 2021-09-18 #### Создание таблицы в Hive - ```text hive > CREATE TABLE `test`.`test_text`( @@ -377,7 +370,7 @@ OK Time taken: 0.624 seconds, Fetched: 1 row(s) ``` -#### Создание таблицы в ClickHouse +#### Создание таблицы в ClickHouse {#create-table-in-hive-2} Таблица в ClickHouse, получающая данные из таблицы Hive, созданной выше: @@ -416,7 +409,6 @@ SETTINGS input_format_skip_unknown_fields = 1, input_format_with_names_use_heade Query id: 55b79d35-56de-45b9-8be6-57282fbf1f44 ``` - Row 1: ────── f_tinyint: 1 diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md index 94cb2998385..310adfc77ab 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Табличный движок Hudi +# Табличный движок Hudi {#hudi-table-engine} Этот движок предоставляет доступ только для чтения к существующим таблицам Apache [Hudi](https://hudi.apache.org/) в Amazon S3. -## Создание таблицы +## Создание таблицы {#create-table} Имейте в виду, что таблица Hudi должна уже существовать в S3: эта команда не принимает DDL‑параметры для создания новой таблицы. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md index 19d3c619c59..edc030b9d9b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md @@ -23,7 +23,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#create-table} Обратите внимание, что таблица Iceberg должна уже существовать в хранилище: эта команда не принимает параметры DDL для создания новой таблицы. @@ -42,14 +42,14 @@ CREATE TABLE iceberg_table_local ``` -## Параметры движка +## Параметры движка {#engine-arguments} Описание аргументов соответствует описанию аргументов в движках `S3`, `AzureBlobStorage`, `HDFS` и `File` соответственно. `format` обозначает формат файлов с данными в таблице Iceberg. Параметры движка могут быть заданы с использованием [Named Collections](../../../operations/named-collections.md). -### Пример +### Пример {#example} ```sql CREATE TABLE iceberg_table ENGINE=IcebergS3('http://test.s3.amazonaws.com/clickhouse-bucket/test_table', 'test', 'test') @@ -105,7 +105,7 @@ ClickHouse поддерживает отсечение партиций в за -## Обработка таблиц с удалёнными строками +## Обработка таблиц с удалёнными строками {#deleted-rows} В настоящее время поддерживаются только таблицы Iceberg с [позиционными удалениями (position deletes)](https://iceberg.apache.org/spec/#position-delete-files). @@ -114,7 +114,7 @@ ClickHouse поддерживает отсечение партиций в за * [удаления по равенству (equality deletes)](https://iceberg.apache.org/spec/#equality-delete-files) * [векторы удаления (deletion vectors)](https://iceberg.apache.org/spec/#deletion-vectors) (введены в версии 3) -### Базовое использование +### Базовое использование {#basic-usage} ```sql SELECT * FROM example_table ORDER BY 1 @@ -128,7 +128,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 Примечание: Нельзя указывать параметры `iceberg_timestamp_ms` и `iceberg_snapshot_id` в одном запросе одновременно. -### Важные замечания +### Важные замечания {#important-considerations} * **Снапшоты** обычно создаются, когда: * В таблицу записываются новые данные @@ -136,11 +136,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * **Изменения схемы, как правило, не создают снапшоты** — это приводит к важным особенностям поведения при использовании механизма time travel для таблиц, которые претерпели эволюцию схемы. -### Примеры сценариев +### Примеры сценариев {#example-scenarios} Все сценарии приведены на Spark, потому что ClickHouse (CH) пока не поддерживает запись в таблицы Iceberg. -#### Сценарий 1: Изменения схемы без новых снапшотов +#### Сценарий 1: Изменения схемы без новых снапшотов {#scenario-1} Рассмотрим следующую последовательность операций: @@ -200,7 +200,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * В моменты ts1 и ts2: отображаются только исходные два столбца * В момент ts3: отображаются все три столбца, при этом для первой строки значение price равно NULL -#### Сценарий 2: Отличия между исторической и текущей схемами +#### Сценарий 2: Отличия между исторической и текущей схемами {#scenario-2} Запрос time travel, выполненный в текущий момент времени, может показать схему, отличающуюся от текущей схемы таблицы: @@ -243,7 +243,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 Это происходит потому, что `ALTER TABLE` не создает новый снимок, а для текущей таблицы Spark берет значение `schema_id` из последнего файла метаданных, а не из снимка. -#### Сценарий 3: Отличия между исторической и текущей схемами +#### Сценарий 3: Отличия между исторической и текущей схемами {#scenario-3} Второй момент заключается в том, что при выполнении операции time travel вы не можете получить состояние таблицы до того, как в неё были записаны какие-либо данные: @@ -265,11 +265,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 В ClickHouse поведение аналогично Spark. Вы можете мысленно заменить запросы Select в Spark на запросы Select в ClickHouse — и всё будет работать так же. -## Определение файла метаданных +## Определение файла метаданных {#metadata-file-resolution} При использовании движка таблиц `Iceberg` в ClickHouse системе необходимо найти корректный файл metadata.json, который описывает структуру таблицы Iceberg. Ниже описано, как работает этот процесс определения: -### Поиск кандидатов +### Поиск кандидатов {#candidate-search} 1. **Явное указание пути**: @@ -286,7 +286,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * Если ни один из вышеперечисленных параметров не задан, все файлы `.metadata.json` в директории `metadata` рассматриваются как кандидаты -### Выбор самого нового файла +### Выбор самого нового файла {#most-recent-file} После определения файлов-кандидатов по указанным правилам система решает, какой из них является самым новым: 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..f05b4829174 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 @@ -7,48 +7,45 @@ title: 'Табличные движки для интеграций' doc_type: 'reference' --- +# Движки таблиц для интеграций {#table-engines-for-integrations} +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. + из полей YAML front matter: slug, description, title. - Если вы заметили ошибку, отредактируйте YML-фронтматтер самих страниц. + Если вы заметили ошибку, отредактируйте YAML front matter непосредственно в самих страницах. */ } - {/*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. | +| Страница | Описание | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Табличный движок 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 (Kafka Table Engine) можно использовать для работы с 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. | +| [Движок таблицы AzureQueue](/engines/table-engines/integrations/azure-queue) | Этот движок предоставляет интеграцию с экосистемой Azure Blob Storage и позволяет выполнять потоковый импорт данных. | +| [Табличный движок S3Queue](/engines/table-engines/integrations/s3queue) | Этот движок обеспечивает интеграцию с экосистемой Amazon S3 и позволяет выполнять потоковый импорт данных. Аналогичен движкам Kafka и RabbitMQ, но поддерживает специфичные для S3 возможности. | +| [Движок таблицы SQLite](/engines/table-engines/integrations/sqlite) | Этот движок позволяет импортировать и экспортировать данные в/из SQLite и поддерживает выполнение запросов к таблицам SQLite непосредственно из ClickHouse. | +| [Табличный движок YTsaurus](/engines/table-engines/integrations/ytsaurus) | Движок таблицы, позволяющий импортировать данные из кластера YTsaurus. | +| [Табличный движок 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/jdbc.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md index ab2de4f7cf0..7787178e62e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы JDBC +# Движок таблицы JDBC {#jdbc-table-engine} @@ -27,7 +27,7 @@ ClickHouse рекомендует использовать встроенные -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]имя_таблицы @@ -51,7 +51,7 @@ ENGINE = JDBC(источник_данных, внешняя_база_данны * Эти параметры также можно передавать с использованием [именованных коллекций](operations/named-collections.md). -## Пример использования +## Пример использования {#usage-example} Создание таблицы на сервере MySQL, подключившись к нему напрямую через консольный клиент: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md index 5f5d9e4280f..ea9e047be4b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md @@ -11,7 +11,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# Табличный движок Kafka +# Табличный движок Kafka {#kafka-table-engine} :::tip Если вы используете ClickHouse Cloud, мы рекомендуем вместо этого использовать [ClickPipes](/integrations/clickpipes). ClickPipes нативно поддерживает приватные сетевые соединения, независимое масштабирование ресурсов для приёма данных и ресурсов кластера, а также всесторонний мониторинг при потоковой загрузке данных из Kafka в ClickHouse. @@ -21,7 +21,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; - Организовывать отказоустойчивое хранилище. - Обрабатывать потоки по мере их поступления. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -135,7 +135,7 @@ Examples: ::: -## Описание +## Описание {#description} Доставленные сообщения отслеживаются автоматически, поэтому каждое сообщение в группе учитывается только один раз. Если вам нужно получить данные дважды, создайте копию таблицы с другим именем группы. @@ -186,7 +186,7 @@ Examples: Если вы хотите изменить целевую таблицу с помощью `ALTER`, рекомендуем отключить материализованное представление, чтобы избежать расхождений между целевой таблицей и данными из представления. -## Конфигурация +## Конфигурация {#configuration} Как и движок GraphiteMergeTree, движок Kafka поддерживает расширенную конфигурацию с использованием файла конфигурации ClickHouse. Вы можете использовать два ключа конфигурации: глобальный (в секции ``) и на уровне топика (в секции ``). Сначала применяется глобальная конфигурация, а затем — конфигурация для конкретного топика (если она задана). @@ -233,7 +233,7 @@ Examples: Список доступных параметров конфигурации приведён в [справочнике по конфигурации librdkafka](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md). Используйте символ подчёркивания (`_`) вместо точки в конфигурации ClickHouse. Например, `check.crcs=true` будет записано как `true`. -### Поддержка Kerberos +### Поддержка Kerberos {#kafka-kerberos-support} Для работы с Kafka с поддержкой Kerberos добавьте дочерний элемент `security_protocol` со значением `sasl_plaintext`. Этого достаточно при наличии действительного Kerberos ticket-granting ticket (TGT), уже полученного и закэшированного средствами операционной системы. ClickHouse может самостоятельно поддерживать учетные данные Kerberos с использованием файла keytab. Для этого используйте дочерние элементы `sasl_kerberos_service_name`, `sasl_kerberos_keytab` и `sasl_kerberos_principal`. @@ -276,7 +276,7 @@ ClickHouse может самостоятельно поддерживать уч - Для построчных форматов количество строк в одном сообщении Kafka можно контролировать с помощью настройки `kafka_max_rows_per_message`. - Для блочных форматов мы не можем разделить блок на более мелкие части, но количество строк в одном блоке можно контролировать с помощью общего параметра настройки [max_block_size](/operations/settings/settings#max_block_size). -## Движок для хранения зафиксированных смещений в ClickHouse Keeper +## Движок для хранения зафиксированных смещений в ClickHouse Keeper {#engine-to-store-committed-offsets-in-clickhouse-keeper} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md index d2005238932..844e25794d8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы MaterializedPostgreSQL +# Движок таблицы MaterializedPostgreSQL {#materializedpostgresql-table-engine} @@ -35,7 +35,7 @@ SET allow_experimental_materialized_postgresql_table=1 Если требуется более одной таблицы, настоятельно рекомендуется использовать движок базы данных [MaterializedPostgreSQL](../../../engines/database-engines/materialized-postgresql.md) вместо движка таблицы и настройку `materialized_postgresql_tables_list`, которая задаёт список реплицируемых таблиц (также можно будет указать `schema` базы данных). Такой подход значительно лучше с точки зрения нагрузки на CPU, количества подключений и числа слотов репликации в удалённой базе данных PostgreSQL. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64) @@ -64,7 +64,7 @@ PRIMARY KEY key; -## Виртуальные столбцы +## Виртуальные столбцы {#virtual-columns} * `_version` — счётчик транзакций. Тип: [UInt64](../../../sql-reference/data-types/int-uint.md). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md index 75fee13a8d4..777959f80f4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Табличный движок MongoDB +# Табличный движок MongoDB {#mongodb-table-engine} Табличный движок MongoDB — это движок только для чтения, который позволяет читать данные из удалённой коллекции [MongoDB](https://www.mongodb.com/). @@ -18,7 +18,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -61,7 +61,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); | `oid_columns` | Список имён столбцов, разделённых запятыми, которые в предложении WHERE должны интерпретироваться как `oid`. По умолчанию — `_id`. | -## Сопоставление типов +## Сопоставление типов {#types-mappings} | MongoDB | ClickHouse | | ----------------------- | ------------------------------------------------------------------------------------ | @@ -78,7 +78,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); Если ключ не найден в документе MongoDB (например, имя столбца не совпадает), будет вставлено значение по умолчанию или `NULL` (если столбец допускает значения `NULL`). -### OID +### OID {#oid} Если вы хотите, чтобы `String` обрабатывался как `oid` в условии WHERE, просто укажите имя столбца в последнем аргументе движка таблицы. Это может понадобиться при выборке записи по столбцу `_id`, который по умолчанию имеет тип `oid` в MongoDB. @@ -132,7 +132,7 @@ SELECT count() FROM sample_oid WHERE another_oid_column = '67bf6cc40000000000ea4 ``` -## Поддерживаемые предложения +## Поддерживаемые предложения {#supported-clauses} Поддерживаются только запросы с простыми выражениями (например, `WHERE field = ORDER BY field2 LIMIT `). Такие выражения переводятся в язык запросов MongoDB и выполняются на стороне сервера. @@ -158,7 +158,7 @@ SELECT * FROM mongo_table WHERE date = '2024-01-01'::Date OR date = toDate('2024 ::: -## Пример использования +## Пример использования {#usage-example} Предположим, что в MongoDB загружен набор данных [sample_mflix](https://www.mongodb.com/docs/atlas/sample-data/sample-mflix). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md index c9414d2e3e4..df651240b10 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Движок таблицы MySQL +# Движок таблицы MySQL {#mysql-table-engine} Движок MySQL позволяет выполнять запросы `SELECT` и `INSERT` к данным, которые хранятся на удалённом сервере MySQL. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -67,7 +67,7 @@ CREATE TABLE test_replicas (id UInt32, name String, age UInt32, money UInt32) EN ``` -## Пример использования +## Пример использования {#usage-example} Создайте таблицу в MySQL: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md index be0abe14840..3d9d263fdf7 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md @@ -21,7 +21,7 @@ doc_type: 'guide' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -134,7 +134,7 @@ SSL-подключение: ``` -## Описание +## Описание {#description} `SELECT` не особенно полезен для чтения сообщений (кроме отладки), потому что каждое сообщение может быть прочитано только один раз. Гораздо практичнее создавать потоки в реальном времени с помощью [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: @@ -199,7 +199,7 @@ SSL-подключение: -## Использование JetStream +## Использование JetStream {#using-jetstream} Прежде чем использовать движок NATS с NATS JetStream, необходимо создать поток NATS (stream) и устойчивого (durable) pull‑consumer'а. Для этого можно использовать, например, утилиту `nats` из пакета [NATS CLI](https://github.com/nats-io/natscli): diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md index a2e2691350e..fe72c04a0f0 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы ODBC +# Движок таблицы ODBC {#odbc-table-engine} @@ -22,7 +22,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -51,7 +51,7 @@ ENGINE = ODBC(источник_данных, внешняя_база_данны Эти параметры также можно передавать с помощью [именованных коллекций](operations/named-collections.md). -## Пример использования +## Пример использования {#usage-example} **Получение данных из локального экземпляра MySQL через ODBC** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md index 0258bcab40f..a2085483fb1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Движок таблиц PostgreSQL +# Движок таблиц PostgreSQL {#postgresql-table-engine} Движок PostgreSQL позволяет выполнять запросы `SELECT` и `INSERT` к данным, хранящимся на удалённом сервере PostgreSQL. @@ -23,7 +23,7 @@ doc_type: 'guide' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -73,7 +73,7 @@ SELECT * FROM postgresql(postgres_creds, table='table1'); ``` -## Особенности реализации +## Особенности реализации {#implementation-details} Запросы `SELECT` на стороне PostgreSQL выполняются как `COPY (SELECT ...) TO STDOUT` внутри транзакции PostgreSQL только для чтения с фиксацией (commit) после каждого запроса `SELECT`. @@ -121,9 +121,9 @@ CREATE TABLE test_replicas (id UInt32, name String) ENGINE = PostgreSQL(`postgre ``` -## Пример использования +## Пример использования {#usage-example} -### Таблица в PostgreSQL +### Таблица в PostgreSQL {#table-in-postgresql} ```text postgres=# CREATE TABLE "public"."test" ( @@ -146,7 +146,7 @@ postgresql> SELECT * FROM test; (1 row) ``` -### Создание таблицы в ClickHouse и подключение к таблице PostgreSQL, созданной выше +### Создание таблицы в ClickHouse и подключение к таблице PostgreSQL, созданной выше {#creating-table-in-clickhouse-and-connecting-to--postgresql-table-created-above} В этом примере используется [движок таблицы PostgreSQL](/engines/table-engines/integrations/postgresql.md) для подключения таблицы ClickHouse к таблице PostgreSQL и выполнения операторов SELECT и INSERT над базой данных PostgreSQL: @@ -160,7 +160,7 @@ CREATE TABLE default.postgresql_table ENGINE = PostgreSQL('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### Вставка начальных данных из таблицы PostgreSQL в таблицу ClickHouse с использованием запроса SELECT +### Вставка начальных данных из таблицы PostgreSQL в таблицу ClickHouse с использованием запроса SELECT {#inserting-initial-data-from-postgresql-table-into-clickhouse-table-using-a-select-query} [Табличная функция postgresql](/sql-reference/table-functions/postgresql.md) копирует данные из PostgreSQL в ClickHouse. Её часто используют для повышения производительности запросов за счёт выполнения запросов и аналитики в ClickHouse, а не в PostgreSQL, а также для миграции данных из PostgreSQL в ClickHouse. Поскольку мы будем копировать данные из PostgreSQL в ClickHouse, мы используем в ClickHouse табличный движок MergeTree и назовём таблицу postgresql_copy: @@ -180,7 +180,7 @@ INSERT INTO default.postgresql_copy SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### Вставка инкрементальных данных из таблицы PostgreSQL в таблицу ClickHouse +### Вставка инкрементальных данных из таблицы PostgreSQL в таблицу ClickHouse {#inserting-incremental-data-from-postgresql-table-into-clickhouse-table} Если после первоначальной вставки вы выполняете дальнейшую синхронизацию между таблицей PostgreSQL и таблицей ClickHouse, вы можете использовать предложение WHERE в ClickHouse, чтобы вставлять только данные, добавленные в PostgreSQL, на основе метки времени или уникального последовательного идентификатора. @@ -198,7 +198,7 @@ SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postges_user', 'po WHERE int_id > maxIntID; ``` -### Выбор данных из полученной таблицы ClickHouse +### Выбор данных из полученной таблицы ClickHouse {#selecting-data-from-the-resulting-clickhouse-table} ```sql SELECT * FROM postgresql_copy WHERE str IN ('test'); @@ -210,7 +210,7 @@ SELECT * FROM postgresql_copy WHERE str IN ('test'); └────────────────┴──────┴────────┘ ``` -### Использование схемы, отличной от схемы по умолчанию +### Использование схемы, отличной от схемы по умолчанию {#using-non-default-schema} ```text postgres=# CREATE SCHEMA "nice.schema"; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md index 357253a9623..b5ca214728c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Табличный движок RabbitMQ +# Табличный движок RabbitMQ {#rabbitmq-table-engine} Этот движок позволяет интегрировать ClickHouse с [RabbitMQ](https://www.rabbitmq.com). @@ -20,7 +20,7 @@ doc_type: 'guide' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -131,7 +131,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ``` -## Описание +## Описание {#description} `SELECT` не особенно полезен для чтения сообщений (кроме отладки), потому что каждое сообщение можно прочитать только один раз. Гораздо практичнее создавать потоки в реальном времени с помощью [материализованных представлений](../../../sql-reference/statements/create/view.md). Для этого: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md index 37de63a250a..8e58eaa31ea 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md @@ -9,13 +9,13 @@ doc_type: 'guide' -# Табличный движок Redis +# Табличный движок Redis {#redis-table-engine} Этот движок позволяет интегрировать ClickHouse с [Redis](https://redis.io/). Поскольку Redis использует модель ключ–значение (kv), настоятельно рекомендуется выполнять только точечные запросы, например `where k=xx` или `where k in (xx, xx)`. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -47,7 +47,7 @@ PRIMARY KEY(primary_key_name); ::: -## Пример использования +## Пример использования {#usage-example} Создайте таблицу в ClickHouse с движком `Redis`, явно указав аргументы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md index 7b21b4b5543..fe5d8bbfac6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md @@ -10,13 +10,13 @@ doc_type: 'reference' -# Движок таблицы S3 +# Движок таблицы S3 {#s3-table-engine} Этот движок обеспечивает интеграцию с экосистемой [Amazon S3](https://aws.amazon.com/s3/). Он похож на движок [HDFS](/engines/table-engines/integrations/hdfs), но поддерживает специфичные для S3 возможности. -## Пример +## Пример {#example} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -36,7 +36,7 @@ SELECT * FROM s3_engine_table LIMIT 2; ``` -## Создайте таблицу +## Создайте таблицу {#creating-a-table} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -45,7 +45,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) [SETTINGS ...] ``` -### Параметры движка +### Параметры движка {#parameters} * `path` — URL бакета с путем к файлу. В режиме только для чтения поддерживаются следующие шаблоны: `*`, `**`, `?`, `{abc,def}` и `{N..M}`, где `N`, `M` — числа, `'abc'`, `'def'` — строки. Дополнительную информацию см. [ниже](#wildcards-in-path). * `NOSIGN` — Если это ключевое слово указано вместо учетных данных, все запросы не будут подписываться. @@ -56,7 +56,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) * `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/). -### Кэш данных +### Кэш данных {#data-cache} Движок таблиц `S3` поддерживает кэширование данных на локальном диске. Параметры конфигурации файлового кэша и примеры использования приведены в этом [разделе](/operations/storing-data.md/#using-local-cache). @@ -87,13 +87,13 @@ SETTINGS filesystem_cache_name = 'cache_for_s3', enable_filesystem_cache = 1; 2. повторно используйте конфигурацию кеша (и, следовательно, хранилище кеша) из секции ClickHouse `storage_configuration`, [описанной здесь](/operations/storing-data.md/#using-local-cache) -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — необязательный параметр. В большинстве случаев вам не нужен ключ партиционирования, а если он все же требуется, как правило, не нужен ключ с более мелкой детализацией, чем по месяцам. Партиционирование не ускоряет запросы (в отличие от выражения ORDER BY). Никогда не используйте слишком мелкое партиционирование. Не делите данные на партиции по идентификаторам или именам клиентов (вместо этого сделайте идентификатор или имя клиента первым столбцом в выражении ORDER BY). Для партиционирования по месяцам используйте выражение `toYYYYMM(date_column)`, где `date_column` — это столбец с датой типа [Date](/sql-reference/data-types/date.md). Имена партиций здесь имеют формат `"YYYYMM"`. -#### Стратегия партиционирования +#### Стратегия партиционирования {#partition-strategy} `WILDCARD` (по умолчанию): заменяет подстановочный шаблон `{_partition_id}` в пути к файлу фактическим ключом партиционирования. Чтение не поддерживается. @@ -140,7 +140,7 @@ arthur :) select _path, * from t_03363_parquet; └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘ ``` -### Запросы к секционированным данным +### Запросы к секционированным данным {#querying-partitioned-data} В этом примере используется [рецепт для docker compose](https://github.com/ClickHouse/examples/tree/5fdc6ff72f4e5137e23ea075c88d3f44b0202490/docker-compose-recipes/recipes/ch-and-minio-S3), который интегрирует ClickHouse и MinIO. Вы сможете воспроизвести те же запросы, используя S3, заменив endpoint и значения аутентификации. @@ -160,7 +160,7 @@ Cloud). Поскольку наборы данных ClickHouse часто оч данных частями, то есть использовать партиционированную запись. ::: -#### Создайте таблицу +#### Создайте таблицу {#create-the-table} ```sql CREATE TABLE p @@ -178,13 +178,13 @@ ENGINE = S3( PARTITION BY column3 ``` -#### Вставка данных +#### Вставка данных {#insert-data} ```sql INSERT INTO p VALUES (1, 2, 3), (3, 2, 1), (78, 43, 45) ``` -#### Выборка из партиции 3 +#### Выборка из партиции 3 {#select-from-partition-3} :::tip Этот запрос использует табличную функцию s3 @@ -201,7 +201,7 @@ FROM s3('http://minio:10000/clickhouse//test_3.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### Выбор данных из партиции 1 +#### Выбор данных из партиции 1 {#select-from-partition-1} ```sql SELECT * @@ -214,7 +214,7 @@ FROM s3('http://minio:10000/clickhouse//test_1.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### Выбор из партиции 45 +#### Выбор из партиции 45 {#select-from-partition-45} ```sql SELECT * @@ -227,7 +227,7 @@ FROM s3('http://minio:10000/clickhouse//test_45.csv', 'minioadmin', 'minioadminp └────┴────┴────┘ ``` -#### Ограничение +#### Ограничение {#limitation} Логично попробовать выполнить `Select * from p`, но, как отмечалось выше, этот запрос завершится с ошибкой; используйте приведённый выше запрос. @@ -274,7 +274,7 @@ SELECT * FROM p -## Подстановочные шаблоны в пути +## Подстановочные шаблоны в пути {#wildcards-in-path} Аргумент `path` может задавать несколько файлов, используя подстановочные шаблоны в стиле bash. Для обработки файл должен существовать и полностью совпадать с шаблоном пути. Список файлов определяется во время выполнения `SELECT` (а не в момент `CREATE`). @@ -362,7 +362,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) -## Параметры для отдельных endpoint +## Параметры для отдельных endpoint {#endpoint-settings} Следующие параметры могут быть указаны в конфигурационном файле для заданного endpoint (который будет сопоставляться по точному префиксу URL): @@ -406,7 +406,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ``` -## Работа с архивами +## Работа с архивами {#working-with-archives} Предположим, что у нас есть несколько файлов-архивов со следующими URI в S3: @@ -432,7 +432,7 @@ TAR ::: -## Доступ к общедоступным бакетам +## Доступ к общедоступным бакетам {#accessing-public-buckets} ClickHouse пытается получить учетные данные из множества различных источников. Иногда это может приводить к проблемам при доступе к некоторым общедоступным бакетам, в результате чего клиент возвращает код ошибки `403`. 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..b8090eb3032 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 @@ -11,16 +11,13 @@ doc_type: 'reference' import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' +# Движок таблицы S3Queue {#s3queue-table-engine} -# Движок таблицы 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} +## Создать таблицу {#creating-a-table} ```sql CREATE TABLE s3_queue_engine_table (name String, value UInt32) @@ -51,12 +48,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 +64,7 @@ SETTINGS mode = 'unordered'; ``` -Использование именованных коллекций: +Использование коллекций с именами: ```xml @@ -88,164 +85,256 @@ SETTINGS mode = 'ordered'; ``` - ## Настройки {#settings} -Чтобы получить список настроек, настроенных для таблицы, используйте таблицу `system.s3_queue_settings`. Доступно начиная с версии `24.10`. +Чтобы получить список настроек, заданных для таблицы, используйте таблицу `system.s3_queue_settings`. Доступно, начиная с версии `24.10`. ### 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` {#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} + +Количество повторных попыток выполнения запрошенного действия постобработки перед тем, как прекратить попытки. + +Возможные значения: + +* Неотрицательное целое число. + +Значение по умолчанию: `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'`. -Путь в ZooKeeper может быть указан как настройка движка таблицы, или путь по умолчанию может быть сформирован из пути, предоставленного глобальной конфигурацией, и UUID таблицы. Возможные значения: -- String. +* Строка. + +Значение по умолчанию: пустая строка. + +### `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 ожидает перед следующей попыткой опроса. Возможные значения: -- Положительное целое число. +* Положительное целое число. Значение по умолчанию: `1000`. -### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} +### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} -Определяет максимальное время в миллисекундах, которое ClickHouse ожидает перед инициацией следующей попытки опроса. +Определяет максимальное время в миллисекундах, в течение которого ClickHouse ждёт перед запуском следующей попытки опроса. Возможные значения: -- Положительное целое число. +* Положительное целое число. Значение по умолчанию: `10000`. -### `s3queue_polling_backoff_ms` {#polling_backoff_ms} +### `s3queue_polling_backoff_ms` {#polling_backoff_ms} -Определяет дополнительное время ожидания, добавляемое к предыдущему интервалу опроса, когда новые файлы не найдены. Следующий опрос происходит после суммы предыдущего интервала и этого значения отсрочки, или максимального интервала, в зависимости от того, что меньше. +Определяет дополнительное время ожидания, добавляемое к предыдущему интервалу опроса при отсутствии новых файлов. Следующий опрос выполняется после истечения времени, равного сумме предыдущего интервала и этого значения backoff, либо по наступлении максимального интервала — в зависимости от того, что меньше. Возможные значения: -- Положительное целое число. +* Положительное целое число. Значение по умолчанию: `0`. -### `s3queue_tracked_files_limit` {#tracked_files_limit} +### `s3queue_tracked_files_limit` {#tracked_files_limit} -Позволяет ограничить количество узлов ZooKeeper при использовании режима 'unordered', не действует для режима 'ordered'. -При достижении лимита самые старые обработанные файлы будут удалены из узла ZooKeeper и обработаны снова. +Позволяет ограничить количество узлов ZooKeeper при использовании режима `unordered`; не влияет на режим `ordered`. +Если лимит достигнут, самые старые обработанные файлы будут удалены из узла ZooKeeper и обработаны повторно. Возможные значения: -- Положительное целое число. +* Положительное целое число. Значение по умолчанию: `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`. +По истечении указанного времени файл будет загружен повторно. Возможные значения: -- Положительное целое число. +* Положительное целое число. Значение по умолчанию: `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`. +Для режима `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-role-based-access} +## Ролевой доступ к 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 @@ -261,26 +350,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 {#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` подключено к этому движку, оно начинает собирать данные в фоновом режиме. Пример: @@ -299,48 +386,44 @@ SETTINGS SELECT * FROM stats ORDER BY name; ``` - ## Виртуальные столбцы {#virtual-columns} -- `_path` — Путь к файлу. -- `_file` — Имя файла. -- `_size` — Размер файла. -- `_time` — Время создания файла. - -Подробнее о виртуальных столбцах см. [здесь](../../../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} +## Подстановочные символы в `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} -1. Дублирование строк может происходить в следующих случаях: - -- возникает исключение во время парсинга в процессе обработки файла, и включены повторные попытки через параметр `s3queue_loading_retries`; +1. Дубликаты строк могут возникать в результате: -- `S3Queue` настроен на нескольких серверах, указывающих на один и тот же путь в ZooKeeper, и сессия keeper истекает до того, как один из серверов успевает зафиксировать обработанный файл, что может привести к тому, что другой сервер начнёт обработку файла, который мог быть частично или полностью обработан первым сервером; однако это не относится к версии 25.8 и выше при `use_persistent_processing_nodes = 1`. +* во время парсинга происходит исключение в середине обработки файла, и включены повторные попытки через `s3queue_loading_retries`; -- происходит аварийное завершение работы сервера. +* `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──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -357,7 +440,7 @@ SETTINGS `exception` String ) ENGINE = SystemS3Queue -COMMENT 'Contains in-memory state of S3Queue metadata and currently processed rows per file.' │ +COMMENT 'Содержит состояние метаданных S3Queue в памяти и текущее количество обработанных строк по каждому файлу.' │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` @@ -368,26 +451,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 +493,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/integrations/sqlite.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md index 2268c7f7761..7ec2a4ca14c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# Движок таблиц SQLite {#sqlite-table-engine} -# Движок таблиц SQLite - - + Этот движок позволяет импортировать данные в SQLite и экспортировать их из неё, а также выполнять запросы к таблицам SQLite непосредственно из ClickHouse. - - -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -33,8 +30,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; * `db_path` — Путь к файлу базы данных SQLite. * `table` — Название таблицы в базе данных SQLite. - -## Пример использования +## Пример использования {#usage-example} Пример запроса для создания таблицы SQLite: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md index 4f5b9435884..b22478cfa9d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Табличный движок TimeSeries +# Табличный движок TimeSeries {#timeseries-table-engine} @@ -32,7 +32,7 @@ metric_name2[...] = ... ::: -## Синтаксис +## Синтаксис {#syntax} ```sql CREATE TABLE name [(columns)] ENGINE=TimeSeries @@ -43,7 +43,7 @@ CREATE TABLE name [(columns)] ENGINE=TimeSeries ``` -## Использование +## Использование {#usage} Проще всего начать, оставив все настройки по умолчанию (можно создать таблицу `TimeSeries` без явного указания списка столбцов): @@ -117,7 +117,7 @@ CREATE TABLE my_table ENGINE=TimeSeries -## Создание +## Создание {#creation} Существует несколько способов создать таблицу с движком `TimeSeries`. Самый простой запрос @@ -202,7 +202,7 @@ ORDER BY metric_family_name ``` -## Настройка типов столбцов +## Настройка типов столбцов {#adjusting-column-types} Вы можете изменить тип почти любого столбца во внутренних целевых таблицах, явно указав его при определении основной таблицы. Например, @@ -228,7 +228,7 @@ ORDER BY (id, timestamp) ``` -## Столбец `id` +## Столбец `id` {#id-column} Столбец `id` содержит идентификаторы; каждый идентификатор вычисляется для комбинации имени метрики и тегов. Выражение DEFAULT для столбца `id` — это выражение, которое будет использоваться для вычисления таких идентификаторов. @@ -243,7 +243,7 @@ ENGINE=TimeSeries ``` -## Столбцы `tags` и `all_tags` +## Столбцы `tags` и `all_tags` {#tags-and-all-tags} Есть два столбца, содержащих отображения тегов, — `tags` и `all_tags`. В этом примере они по сути эквивалентны, однако могут отличаться, если используется настройка `tags_to_columns`. Эта настройка позволяет указать, что конкретный тег должен храниться в отдельном столбце вместо хранения @@ -278,7 +278,7 @@ SETTINGS tags_to_columns = {'instance': 'instance', 'job': 'job'} ``` -## Движки внутренних целевых таблиц +## Движки внутренних целевых таблиц {#inner-table-engines} По умолчанию внутренние целевые таблицы используют следующие движки таблиц: @@ -298,7 +298,7 @@ METRICS ENGINE=ReplicatedReplacingMergeTree ``` -## Внешние таблицы назначения +## Внешние таблицы назначения {#external-target-tables} Можно настроить таблицу `TimeSeries` на использование созданной вручную таблицы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md index 3403e3953f2..a85b241d9d2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md @@ -12,7 +12,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# Движок таблицы YTsaurus +# Движок таблицы YTsaurus {#ytsaurus-table-engine} @@ -21,7 +21,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -48,7 +48,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; * `oauth_token` — OAuth-токен. -## Пример использования +## Пример использования {#usage-example} Пример запроса для создания таблицы YTsaurus: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md index 177f681a8bf..bb5c6bd3f37 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md @@ -10,7 +10,7 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Семейство движков таблиц Log +# Семейство движков таблиц Log {#log-table-engine-family} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md index 6d786230c94..b3633198efb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы Log +# Движок таблицы Log {#log-table-engine} @@ -22,7 +22,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## Создание таблицы +## Создание таблицы {#table_engines-log-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,7 +59,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Пример использования +## Пример использования {#table_engines-log-example-of-use} Создание таблицы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md index b0cfb49f8d6..6283cc281e9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблицы StripeLog +# Движок таблицы StripeLog {#stripelog-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## Создание таблицы +## Создание таблицы {#table_engines-stripelog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -53,7 +53,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Пример использования +## Пример использования {#table_engines-stripelog-example-of-use} Создание таблицы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md index 988c67ef87d..6bdba72acda 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Движок таблиц TinyLog +# Движок таблиц TinyLog {#tinylog-table-engine} @@ -32,7 +32,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## Создание таблицы +## Создание таблицы {#table_engines-tinylog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -58,7 +58,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Пример использования +## Пример использования {#table_engines-tinylog-example-of-use} Создание таблицы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md index af0991fb0bb..08e9ca4ecb4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок таблиц AggregatingMergeTree +# Движок таблиц AggregatingMergeTree {#aggregatingmergetree-table-engine} Движок наследуется от [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) и изменяет логику слияния частей данных. ClickHouse заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым [ключом сортировки](../../../engines/table-engines/mergetree-family/mergetree.md)) одной строкой (в пределах одной части данных), которая хранит комбинацию состояний агрегатных функций. @@ -29,7 +29,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -80,7 +80,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Пример агрегированного материализованного представления +## Пример агрегированного материализованного представления {#example-of-an-aggregated-materialized-view} В этом примере предполагается, что у вас есть база данных под названием `test`. Создайте её, если она ещё не существует, с помощью приведённой ниже команды: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md index 5e480489647..0c49b86fed3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md @@ -10,7 +10,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# Точный и приближённый векторный поиск +# Точный и приближённый векторный поиск {#exact-and-approximate-vector-search} Задача нахождения N ближайших точек в многомерном (векторном) пространстве для заданной точки известна как [поиск ближайших соседей](https://en.wikipedia.org/wiki/Nearest_neighbor_search) или, кратко, векторный поиск. Существуют два общих подхода к решению задачи векторного поиска: @@ -36,13 +36,13 @@ LIMIT `<N>` задаёт, сколько соседей нужно вернуть. -## Точный поиск по векторам +## Точный поиск по векторам {#exact-nearest-neighbor-search} Точный поиск по векторам можно выполнить с использованием приведённого выше запроса SELECT без изменений. Время выполнения таких запросов, как правило, пропорционально количеству сохранённых векторов и их размерности, то есть количеству элементов массива. Кроме того, поскольку ClickHouse выполняет полный перебор всех векторов, время выполнения таких запросов также зависит от количества потоков, используемых запросом (см. настройку [max_threads](../../../operations/settings/settings.md#max_threads)). -### Пример +### Пример {#exact-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32)) ENGINE = MergeTree ORDER BY id; @@ -67,9 +67,9 @@ LIMIT 3; ``` -## Приблизительный векторный поиск +## Приблизительный векторный поиск {#approximate-nearest-neighbor-search} -### Индексы сходства векторов +### Индексы сходства векторов {#vector-similarity-index} ClickHouse предоставляет специальный индекс сходства векторов («vector similarity») для выполнения приблизительного векторного поиска. @@ -78,7 +78,7 @@ ClickHouse предоставляет специальный индекс схо Если вы столкнётесь с проблемами, пожалуйста, создайте issue в [репозитории ClickHouse](https://github.com/clickhouse/clickhouse/issues). ::: -#### Создание индекса сходства векторов +#### Создание индекса сходства векторов {#creating-a-vector-similarity-index} Индекс сходства векторов можно создать на новой таблице следующим образом: @@ -196,7 +196,7 @@ ORDER BY [...] Приведенная выше формула не учитывает дополнительную память, необходимую индексам векторного сходства для выделения структур данных, используемых во время выполнения, таких как заранее выделенные буферы и кэши. -#### Использование индекса векторного сходства +#### Использование индекса векторного сходства {#using-a-vector-similarity-index} :::note Чтобы использовать индексы векторного сходства, настройка [compatibility](../../../operations/settings/settings.md) должна быть равна `''` (значение по умолчанию) или `'25.1'` либо новее. @@ -406,7 +406,7 @@ Query id: a2a9d0c8-a525-45c1-96ca-c5a11fa66f47 Запрос, выполняемый без повторной оценки (`vector_search_with_rescoring = 0`) и с включёнными параллельными репликами, может всё равно перейти к повторной оценке результатов. ::: -#### Оптимизация производительности +#### Оптимизация производительности {#performance-tuning} **Настройка сжатия** @@ -540,7 +540,7 @@ result = chclient.query( В этом примере опорный вектор отправляется как есть в бинарном виде и на сервере интерпретируется как массив чисел с плавающей запятой. Это экономит процессорное время на стороне сервера и предотвращает избыточный рост серверных логов и `system.query_log`. -#### Администрирование и мониторинг +#### Администрирование и мониторинг {#administration} Объём на диске индексов векторного сходства можно получить из [system.data_skipping_indices](../../../operations/system-tables/data_skipping_indices): @@ -558,7 +558,7 @@ WHERE type = 'vector_similarity'; └──────────┴───────┴──────┴──────────────────────────┘ ``` -#### Отличия от обычных пропускающих индексов +#### Отличия от обычных пропускающих индексов {#differences-to-regular-skipping-indexes} Как и все обычные [пропускающие индексы](/optimize/skipping-indexes), индексы векторного сходства строятся поверх гранул, и каждый индексируемый блок состоит из `GRANULARITY = [N]` гранул (`[N]` = 1 по умолчанию для обычных пропускающих индексов). Например, если гранулярность первичного индекса таблицы равна 8192 (параметр `index_granularity = 8192`) и `GRANULARITY = 2`, то каждый индексируемый блок будет содержать 16384 строки. @@ -584,7 +584,7 @@ WHERE type = 'vector_similarity'; Обычно рекомендуется использовать большое значение `GRANULARITY` для индексов векторного сходства и переходить к меньшим значениям `GRANULARITY` только в случае проблем, например чрезмерного потребления памяти структурами векторного сходства. Если `GRANULARITY` для индексов векторного сходства не задан, значение по умолчанию — 100 миллионов. -#### Пример +#### Пример {#approximate-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32), INDEX idx vec TYPE vector_similarity('hnsw', 'L2Distance', 2)) ENGINE = MergeTree ORDER BY id; @@ -615,7 +615,7 @@ LIMIT 3; * [dbpedia](../../../getting-started/example-datasets/dbpedia-dataset) * [hackernews](../../../getting-started/example-datasets/hackernews-vector-search-dataset) -### Квантованный бит (QBit) +### Квантованный бит (QBit) {#approximate-nearest-neighbor-search-qbit} @@ -649,7 +649,7 @@ column_name QBit(element_type, dimension) * `element_type` – тип каждого элемента вектора. Поддерживаемые типы: `BFloat16`, `Float32` и `Float64` * `dimension` – количество элементов в каждом векторе -#### Создание таблицы `QBit` и добавление данных +#### Создание таблицы `QBit` и добавление данных {#qbit-create} ```sql CREATE TABLE fruit_animal ( @@ -667,7 +667,7 @@ INSERT INTO fruit_animal VALUES ('horse', [-0.61435682, 0.48542571, 1.21091247, -0.62530446, -1.33082533]); ``` -#### Векторный поиск с `QBit` +#### Векторный поиск с `QBit` {#qbit-search} Найдём ближайших соседей к вектору, соответствующему слову «lemon», используя L2-расстояние. Третий параметр в функции расстояния задаёт точность в битах: более высокие значения обеспечивают большую точность, но требуют больше вычислительных ресурсов. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md index ab0708f5c5c..d552544b967 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md @@ -9,9 +9,7 @@ show_related_blogs: true doc_type: 'reference' --- - - -# Движок таблицы CoalescingMergeTree +# Движок таблицы CoalescingMergeTree {#coalescingmergetree-table-engine} :::note Доступно начиная с версии 25.6 Этот движок таблицы доступен начиная с версии 25.6 как в OSS, так и в Cloud. @@ -23,9 +21,7 @@ doc_type: 'reference' `CoalescingMergeTree` предназначен для использования с типами Nullable в неклю́чевых столбцах. Если столбцы не являются Nullable, поведение такое же, как у [ReplacingMergeTree](/engines/table-engines/mergetree-family/replacingmergetree). - - -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -42,16 +38,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] Описание параметров запроса см. в разделе [описание запроса](../../../sql-reference/statements/create/table.md). -### Параметры движка CoalescingMergeTree +### Параметры движка CoalescingMergeTree {#parameters-of-coalescingmergetree} -#### Столбцы +#### Столбцы {#columns} `columns` — кортеж имен столбцов, значения в которых будут объединены. Необязательный параметр. Столбцы должны иметь числовой тип и не должны входить в ключ партиционирования или сортировки. Если `columns` не указан, ClickHouse объединяет значения во всех столбцах, которые не входят в ключ сортировки. -### Части запроса +### Части запроса {#query-clauses} При создании таблицы `CoalescingMergeTree` требуются те же [части запроса](../../../engines/table-engines/mergetree-family/mergetree.md), что и при создании таблицы `MergeTree`. @@ -76,8 +72,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `columns` — кортеж имен столбцов, значения которых будут суммироваться. Необязательный параметр. Описание см. в тексте выше.
- -## Пример использования +## Пример использования {#usage-example} Рассмотрим следующую таблицу: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md index e45cf8d2fd0..9604373a546 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# Движок таблицы CollapsingMergeTree +# Движок таблицы CollapsingMergeTree {#collapsingmergetree-table-engine} @@ -41,7 +41,7 @@ doc_type: 'guide' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -82,9 +82,9 @@ ENGINE = CollapsingMergeTree(Sign) * При создании таблицы `CollapsingMergeTree` используются те же [части запроса](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table), что и при создании таблицы `MergeTree`. -## Схлопывание +## Схлопывание {#table_engine-collapsingmergetree-collapsing} -### Данные +### Данные {#data} Рассмотрим ситуацию, когда необходимо сохранять постоянно меняющиеся данные для некоторого объекта. Может показаться логичным иметь по одной строке на объект и обновлять её каждый раз при изменении данных, @@ -142,7 +142,7 @@ ENGINE = CollapsingMergeTree(Sign) 2. Длинные растущие массивы в столбцах снижают эффективность движка из-за увеличенной нагрузки на запись. Чем проще данные, тем выше эффективность. 3. Результаты `SELECT` в значительной степени зависят от согласованности истории изменений объекта. Будьте аккуратны при подготовке данных для вставки. При несогласованных данных можно получить непредсказуемые результаты. Например, отрицательные значения для неотрицательных метрик, таких как глубина сессии. -### Algorithm +### Algorithm {#table_engine-collapsingmergetree-collapsing-algorithm} Когда ClickHouse сливает [части](/concepts/glossary#parts) данных, каждая группа последовательных строк с одинаковым ключом сортировки (`ORDER BY`) сокращается до не более чем двух строк: @@ -190,9 +190,9 @@ ClickHouse обрабатывает запросы `SELECT` в нескольк -## Примеры +## Примеры {#examples} -### Пример использования +### Пример использования {#example-of-use} Даны следующие исходные данные: @@ -292,7 +292,7 @@ SELECT * FROM UAct FINAL Этот способ выборки данных менее эффективен и не рекомендуется при работе с большими объемами сканируемых данных (миллионы строк). ::: -### Пример другого подхода +### Пример другого подхода {#example-of-another-approach} Идея этого подхода состоит в том, что при слияниях учитываются только ключевые поля. В строке "cancel" мы, соответственно, можем указать отрицательные значения, diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md index 9829780e278..5464b210ba1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md @@ -7,9 +7,7 @@ title: 'Пользовательский ключ партиционирован doc_type: 'guide' --- - - -# Пользовательский ключ партиционирования +# Пользовательский ключ партиционирования {#custom-partitioning-key} :::note В большинстве случаев ключ партиционирования не нужен, а в большинстве остальных случаев нет необходимости в ключе партиционирования с более мелкой детализацией, чем по месяцам, за исключением сценариев наблюдаемости (observability), где часто используется партиционирование по дням. @@ -78,7 +76,6 @@ WHERE table = 'visits' Столбец `partition` содержит имена партиций. В этом примере есть две партиции: `201901` и `201902`. Вы можете использовать значение этого столбца, чтобы указать имя партиции в запросах [ALTER ... PARTITION](../../../sql-reference/statements/alter/partition.md). - Столбец `name` содержит имена частей данных партиции. Вы можете использовать этот столбец, чтобы указать имя части в запросе [ALTER ATTACH PART](/sql-reference/statements/alter/partition#attach-partitionpart). Разберём имя части: `201901_1_9_2_11`: @@ -134,16 +131,13 @@ drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 detached Папки '201901_1_1_0', '201901_1_7_1' и так далее являются каталогами частей. Каждая часть относится к соответствующему разделу (partition) и содержит данные только за определённый месяц (в этом примере таблица разбита на разделы по месяцам). - Каталог `detached` содержит части, которые были отсоединены от таблицы с помощью запроса [DETACH](/sql-reference/statements/detach). Повреждённые части также перемещаются в этот каталог вместо удаления. Сервер не использует части из каталога `detached`. Вы можете добавлять, удалять или изменять данные в этом каталоге в любое время — сервер не узнает об этом, пока вы не выполните запрос [ATTACH](/sql-reference/statements/alter/partition#attach-partitionpart). Обратите внимание, что на рабочем сервере вы не можете вручную изменять набор частей или их данные в файловой системе, так как сервер не узнает об этом. Для нереплицируемых таблиц вы можете делать это, когда сервер остановлен, но это не рекомендуется. Для реплицируемых таблиц набор частей не может быть изменён ни при каких обстоятельствах. ClickHouse позволяет выполнять операции с партициями: удалять их, копировать из одной таблицы в другую или создавать резервную копию. См. полный список операций в разделе [Manipulations With Partitions and Parts](/sql-reference/statements/alter/partition). - - -## Оптимизация Group By с использованием ключа партиционирования +## Оптимизация Group By с использованием ключа партиционирования {#group-by-optimisation-using-partition-key} Для некоторых комбинаций ключа партиционирования таблицы и ключа группировки запроса (`GROUP BY`) агрегацию можно выполнять независимо для каждой партиции. Тогда нам не придется в конце объединять частично агрегированные данные со всех потоков выполнения, diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md index 305019b1c39..8a705ad5061 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md @@ -7,9 +7,7 @@ title: 'Движок таблицы GraphiteMergeTree' doc_type: 'guide' --- - - -# Движок таблицы GraphiteMergeTree +# Движок таблицы GraphiteMergeTree {#graphitemergetree-table-engine} Этот движок предназначен для прореживания и агрегирования/усреднения (rollup) данных [Graphite](http://graphite.readthedocs.io/en/latest/index.html). Он может быть полезен разработчикам, которые хотят использовать ClickHouse в качестве хранилища данных для Graphite. @@ -17,9 +15,7 @@ doc_type: 'guide' Движок наследует свойства от [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md). - - -## Создание таблицы +## Создание таблицы {#creating-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -82,8 +78,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `config_section` — Имя раздела в файле конфигурации, где заданы правила rollup.
- -## Конфигурация rollup +## Конфигурация rollup {#rollup-configuration} Настройки rollup задаются параметром [graphite_rollup](../../../operations/server-configuration-parameters/settings.md#graphite) в конфигурации сервера. Имя параметра может быть любым. Вы можете создать несколько конфигураций и использовать их для разных таблиц. @@ -92,25 +87,25 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] required-columns patterns -### Обязательные столбцы +### Обязательные столбцы {#required-columns} -#### `path_column_name` +#### `path_column_name` {#path_column_name} `path_column_name` — имя столбца, в котором хранится имя метрики (датчик Graphite). Значение по умолчанию: `Path`. -#### `time_column_name` +#### `time_column_name` {#time_column_name} `time_column_name` — имя столбца, в котором хранится время измерения метрики. Значение по умолчанию: `Time`. -#### `value_column_name` +#### `value_column_name` {#value_column_name} `value_column_name` — имя столбца, в котором хранится значение метрики в момент времени, указанной в `time_column_name`. Значение по умолчанию: `Value`. -#### `version_column_name` +#### `version_column_name` {#version_column_name} `version_column_name` — имя столбца, в котором хранится версия метрики. Значение по умолчанию: `Timestamp`. -### Шаблоны +### Шаблоны {#patterns} Структура раздела `patterns`: @@ -163,8 +158,7 @@ default * `precision` – точность определения возраста данных в секундах. Должно быть делителем 86400 (количество секунд в сутках). * `function` – имя агрегирующей функции, применяемой к данным, возраст которых попадает в диапазон `[age, age + precision]`. Допустимые функции: min / max / any / avg. Среднее значение рассчитывается неточно, как среднее от средних значений. -### Пример конфигурации без типов правил - +### Пример конфигурации без типов правил {#configuration-example} ```xml @@ -199,7 +193,7 @@ default ``` -### Пример конфигурации с типами правил +### Пример конфигурации с типами правил {#configuration-typed-example} ```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..08f8de9d12d 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 @@ -7,9 +7,7 @@ title: 'Семейство движков MergeTree' doc_type: 'reference' --- - - -# Семейство движков MergeTree +# Семейство движков MergeTree {#mergetree-engine-family} Табличные движки из семейства MergeTree являются ядром возможностей ClickHouse по хранению данных. Они предоставляют большинство функций для обеспечения отказоустойчивости и высокопроизводительного чтения данных: колоночное хранение, настраиваемое разбиение на партиции, разрежённый первичный индекс, вторичные индексы пропуска данных и т. д. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md index b27704e82ac..5516126eae6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md @@ -10,7 +10,7 @@ doc_type: 'reference' import PrivatePreviewBadge from '@theme/badges/PrivatePreviewBadge'; -# Полнотекстовый поиск с использованием текстовых индексов +# Полнотекстовый поиск с использованием текстовых индексов {#full-text-search-using-text-indexes} @@ -22,7 +22,7 @@ import PrivatePreviewBadge from '@theme/badges/PrivatePreviewBadge'; -## Создание текстового индекса +## Создание текстового индекса {#creating-a-text-index} Чтобы создать текстовый индекс, сначала включите соответствующий экспериментальный параметр: @@ -186,12 +186,12 @@ ALTER TABLE tab ADD INDEX text_idx(s) TYPE text(tokenizer = splitByNonAlpha); ``` -## Использование текстового индекса +## Использование текстового индекса {#using-a-text-index} Использовать текстовый индекс в запросах SELECT просто, так как стандартные функции строкового поиска автоматически используют индекс. Если индекс отсутствует, приведённые ниже функции строкового поиска будут выполнять медленный полный перебор по всем данным. -### Поддерживаемые функции +### Поддерживаемые функции {#functions-support} Текстовый индекс может быть использован, если текстовые функции применяются в условии `WHERE` запроса SELECT: @@ -201,7 +201,7 @@ FROM [...] WHERE функция_поиска_по_строке(столбец_с_текстовым_индексом) ``` -#### `=` и `!=` +#### `=` и `!=` {#functions-example-equals-notequals} `=` ([equals](/sql-reference/functions/comparison-functions.md/#equals)) и `!=` ([notEquals](/sql-reference/functions/comparison-functions.md/#notEquals)) совпадают с заданным поисковым выражением целиком. @@ -213,7 +213,7 @@ SELECT * from tab WHERE str = 'Привет'; Индекс по тексту поддерживает операторы `=` и `!=`, однако поиск по равенству и неравенству имеет смысл только с токенизатором `array` (он приводит к тому, что индекс хранит значения целых строк). -#### `IN` и `NOT IN` +#### `IN` и `NOT IN` {#functions-example-in-notin} `IN` ([in](/sql-reference/functions/in-functions)) и `NOT IN` ([notIn](/sql-reference/functions/in-functions)) похожи на функции `equals` и `notEquals`, но они выбирают все (`IN`) или ни одного (`NOT IN`) из искомых значений. @@ -225,7 +225,7 @@ SELECT * from tab WHERE str IN ('Привет', 'Мир'); Те же ограничения, что и для `=` и `!=`, действуют и здесь: `IN` и `NOT IN` имеют смысл только в сочетании с токенизатором `array`. -#### `LIKE`, `NOT LIKE` и `match` +#### `LIKE`, `NOT LIKE` и `match` {#functions-example-like-notlike-match} :::note В настоящее время эти функции используют текстовый индекс для фильтрации только в том случае, если токенизатор индекса — `splitByNonAlpha` или `ngrams`. @@ -250,7 +250,7 @@ SELECT count() FROM tab WHERE comment LIKE ' support %'; -- или `% support %` Пробелы слева и справа от `support` гарантируют, что термин может быть извлечён как токен. -#### `startsWith` и `endsWith` +#### `startsWith` и `endsWith` {#functions-example-startswith-endswith} Аналогично оператору `LIKE`, функции [startsWith](/sql-reference/functions/string-functions.md/#startsWith) и [endsWith](/sql-reference/functions/string-functions.md/#endsWith) могут использовать текстовый индекс только в том случае, если из поискового выражения могут быть извлечены полные токены. @@ -275,7 +275,7 @@ startsWith(comment, 'clickhouse supports ')` SELECT count() FROM tab WHERE endsWith(comment, ' olap engine'); ``` -#### `hasToken` и `hasTokenOrNull` +#### `hasToken` и `hasTokenOrNull` {#functions-example-hastoken-hastokenornull} Функции [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) и [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) сопоставляют значение с одним заданным токеном. @@ -289,7 +289,7 @@ SELECT count() FROM tab WHERE hasToken(comment, 'clickhouse'); Функции `hasToken` и `hasTokenOrNull` являются наиболее эффективными при использовании с индексом `text`. -#### `hasAnyTokens` и `hasAllTokens` +#### `hasAnyTokens` и `hasAllTokens` {#functions-example-hasanytokens-hasalltokens} Функции [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) и [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) сопоставляют строку соответственно с одним или со всеми указанными токенами. @@ -309,7 +309,7 @@ SELECT count() FROM tab WHERE hasAnyTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); ``` -#### `has` +#### `has` {#functions-example-has} Функция для работы с массивами [`has`](/sql-reference/functions/array-functions#has) проверяет наличие отдельного токена в массиве строк. @@ -319,7 +319,7 @@ SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE has(array, 'clickhouse'); ``` -#### `mapContains` +#### `mapContains` {#functions-example-mapcontains} Функция [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains) (псевдоним `mapContainsKey`) проверяет, содержится ли заданный токен среди ключей отображения. @@ -331,7 +331,7 @@ SELECT count() FROM tab WHERE mapContainsKey(map, 'clickhouse'); SELECT count() FROM tab WHERE mapContains(map, 'clickhouse'); ``` -#### `operator[]` +#### `operator[]` {#functions-example-access-operator} Оператор доступа [`operator[]`](/sql-reference/operators#access-operators) можно использовать с текстовым индексом для фильтрации по ключам и значениям. @@ -343,9 +343,9 @@ SELECT count() FROM tab WHERE map['engine'] = 'clickhouse'; Рассмотрим следующие примеры использования столбцов типов `Array(T)` и `Map(K, V)` с текстовым индексом. -### Примеры для столбцов `Array` и `Map` с текстовыми индексами +### Примеры для столбцов `Array` и `Map` с текстовыми индексами {#text-index-array-and-map-examples} -#### Индексирование столбцов `Array(String)` +#### Индексирование столбцов `Array(String)` {#text-index-example-array} Представьте платформу для ведения блогов, где авторы классифицируют свои записи с помощью ключевых слов. Мы хотим, чтобы пользователи могли находить похожие материалы, выполняя поиск или переходя по темам. @@ -377,7 +377,7 @@ ALTER TABLE posts ADD INDEX keywords_idx(keywords) TYPE text(tokenizer = splitBy ALTER TABLE posts MATERIALIZE INDEX keywords_idx; -- Не забудьте материализовать индекс для существующих данных ``` -#### Индексация столбцов типа Map +#### Индексация столбцов типа Map {#text-index-example-map} Во многих сценариях систем наблюдаемости сообщения логов разбиваются на отдельные «компоненты» и сохраняются в виде соответствующих типов данных, например тип `DateTime` для временной метки, `Enum` для уровня логирования и т. д. Поля метрик оптимально хранить в виде пар «ключ–значение». @@ -435,9 +435,9 @@ SELECT * FROM logs WHERE has(mapValues(attributes), '192.168.1.1'); -- быст ``` -## Оптимизация производительности +## Оптимизация производительности {#performance-tuning} -### Прямое чтение +### Прямое чтение {#direct-read} Некоторые типы текстовых запросов можно значительно ускорить с помощью оптимизации, называемой «прямое чтение». Более точно, эту оптимизацию можно применить, если в запросе SELECT текстовый столбец *не* выбирается. @@ -515,7 +515,7 @@ Expression (перед GROUP BY) Вывод второго EXPLAIN PLAN содержит виртуальный столбец `__text_index___`. Если этот столбец присутствует, используется прямое чтение. -### Кэширование +### Кэширование {#caching} Доступны различные кэши для буферизации частей текстового индекса в памяти (см. раздел [Сведения о реализации](#implementation)): В настоящее время доступны кэши для десериализованных блоков словаря, заголовков и списков постингов текстового индекса для снижения объема операций ввода-вывода (I/O). @@ -524,7 +524,7 @@ Expression (перед GROUP BY) Для настройки кэшей используйте следующие параметры сервера. -#### Настройки кэша блоков словаря +#### Настройки кэша блоков словаря {#caching-dictionary} | Параметр | Описание | @@ -583,7 +583,7 @@ Expression (перед GROUP BY) -## Пример: датасет Hacker News +## Пример: датасет Hacker News {#hacker-news-dataset} Рассмотрим, как текстовые индексы улучшают производительность на большом текстовом наборе данных. Мы будем использовать 28,7 млн строк комментариев с популярного сайта Hacker News. @@ -650,7 +650,7 @@ ALTER TABLE hackernews MATERIALIZE INDEX comment_idx SETTINGS mutations_sync = 2 Теперь давайте выполним запросы с использованием функций `hasToken`, `hasAnyTokens` и `hasAllTokens`. Следующие примеры покажут существенную разницу в производительности между стандартным сканированием индекса и оптимизацией прямого чтения. -### 1. Использование `hasToken` +### 1. Использование `hasToken` {#using-hasToken} `hasToken` проверяет, содержит ли текст указанный одиночный токен. Мы будем искать регистрозависимый токен `ClickHouse`. @@ -690,7 +690,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re Запрос прямого чтения более чем в 45 раз быстрее (0,362 с против 0,008 с) и обрабатывает значительно меньше данных (9,51 ГБ против 3,15 МБ), поскольку читает только из индекса. -### 2. Использование `hasAnyTokens` +### 2. Использование `hasAnyTokens` {#using-hasAnyTokens} `hasAnyTokens` проверяет, содержит ли текст хотя бы один из заданных токенов. Мы будем искать комментарии, содержащие либо «love», либо «ClickHouse». @@ -730,7 +730,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re Ускорение ещё более впечатляющее для этого распространённого поиска с условием "ИЛИ". Запрос выполняется почти в 89 раз быстрее (1.329 с против 0.015 с) благодаря отсутствию полного сканирования столбца. -### 3. Использование `hasAllTokens` +### 3. Использование `hasAllTokens` {#using-hasAllTokens} `hasAllTokens` проверяет, содержит ли текст все указанные токены. Выполним поиск комментариев, содержащих одновременно 'love' и 'ClickHouse'. @@ -770,7 +770,7 @@ SETTINGS query_plan_direct_read_from_text_index = 1, use_skip_indexes_on_data_re Для этого поиска с оператором "AND" оптимизация прямого чтения более чем в 26 раз быстрее (0.184 s против 0.007 s), чем стандартное сканирование с использованием skip-индекса. -### 4. Составной поиск: OR, AND, NOT, ... +### 4. Составной поиск: OR, AND, NOT, ... {#compound-search} Оптимизация прямого чтения также применима к составным булевым выражениям. Здесь мы выполним поиск без учета регистра для 'ClickHouse' OR 'clickhouse'. 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..5b32f798d56 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,40 +1,37 @@ --- -description: 'Движки таблиц семейства `MergeTree` разработаны для высокой скорости загрузки и обработки огромных объемов данных.' +description: 'Семейство табличных движков `MergeTree` предназначено для высоких скоростей приёма данных и работы с очень большими объёмами данных.' sidebar_label: 'MergeTree' sidebar_position: 11 slug: /engines/table-engines/mergetree-family/mergetree -title: 'Движок таблицы MergeTree' +title: 'Табличный движок MergeTree' doc_type: 'reference' --- import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# Движок таблицы MergeTree {#mergetree-table-engine} -# Движок таблиц MergeTree +Движок `MergeTree` и другие движки семейства `MergeTree` (например, `ReplacingMergeTree`, `AggregatingMergeTree`) являются наиболее часто используемыми и наиболее надёжными движками таблиц в ClickHouse. -Движок `MergeTree` и другие движки семейства `MergeTree` (например, `ReplacingMergeTree`, `AggregatingMergeTree`) являются наиболее часто используемыми и наиболее надежными движками таблиц в ClickHouse. +Движки таблиц семейства `MergeTree` спроектированы для высокой скорости приёма данных и работы с очень большими объёмами. +Операции вставки создают части таблицы, которые затем объединяются фоновым процессом с другими частями таблицы. -Движки таблиц семейства `MergeTree` разработаны для высокой скорости загрузки данных и работы с очень большими объемами данных. -Операции вставки создают части таблицы (table parts), которые фоновым процессом сливаются с другими частями таблицы. +Основные особенности движков таблиц семейства `MergeTree`. -Основные особенности движков таблиц семейства `MergeTree`: +* Первичный ключ таблицы определяет порядок сортировки внутри каждой части таблицы (кластерный индекс). При этом первичный ключ указывает не на отдельные строки, а на блоки по 8192 строки, которые называются гранулами. Это делает первичные ключи для очень больших наборов данных достаточно компактными, чтобы оставаться загруженными в основную память, при этом обеспечивая быстрый доступ к данным на диске. -- Первичный ключ таблицы определяет порядок сортировки внутри каждой части таблицы (кластерный индекс). При этом первичный ключ ссылается не на отдельные строки, а на блоки по 8192 строки, называемые гранулами. Это делает первичные ключи огромных наборов данных достаточно компактными, чтобы оставаться загруженными в оперативной памяти, при этом обеспечивая быстрый доступ к данным на диске. +* Таблицы могут быть разбиты на разделы (партиции) с использованием произвольного выражения секционирования. Исключение разделов (partition pruning) гарантирует, что такие разделы пропускаются при чтении, когда это допускает запрос. -- Таблицы могут быть секционированы (разделены на партиции) с использованием произвольного выражения партиционирования. Отсечение партиций (partition pruning) обеспечивает пропуск чтения партиций, если запрос позволяет это сделать. +* Данные могут реплицироваться между несколькими узлами кластера для обеспечения высокой доступности, отказоустойчивости и обновлений без простоя. См. раздел [Репликация данных](/engines/table-engines/mergetree-family/replication.md). -- Данные могут реплицироваться между несколькими узлами кластера для обеспечения высокой доступности, отказоустойчивости и обновлений без простоя. См. раздел [Data replication](/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} +## Создание таблиц {#table_engine-mergetree-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,132 +56,127 @@ 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} +### Части запроса {#mergetree-query-clauses} #### ENGINE {#engine} -`ENGINE` — имя и параметры движка. `ENGINE = MergeTree()`. Движок `MergeTree` не имеет параметров. +`ENGINE` — имя и параметры движка таблицы. `ENGINE = MergeTree()`. Движок таблицы `MergeTree` не имеет параметров. -#### ORDER BY {#order_by} +#### 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` — [ключ партиционирования](/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` — первичный ключ, если он [отличается от ключа сортировки](#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` — выражение для семплирования (sampling expression). Необязательное выражение. -Если указано, оно должно содержаться в первичном ключе. -Выражение для сэмплирования должно возвращать беззнаковое целое число. +Если указано, оно должно входить в первичный ключ. +Результат этого выражения должен быть беззнаковым целым числом. Пример: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. #### 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} +#### ПАРАМЕТРЫ {#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} -Таблица состоит из кусков данных, отсортированных по первичному ключу. - -При вставке данных в таблицу создаются отдельные куски данных, каждый из которых лексикографически сортируется по первичному ключу. Например, если первичный ключ — `(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 +184,63 @@ 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} -Количество столбцов в первичном ключе явно не ограничено. В зависимости от структуры данных вы можете включить в первичный ключ больше или меньше столбцов. Это может: +Количество столбцов в первичном ключе явно не ограничено. В зависимости от структуры данных вы можете включать больше или меньше столбцов в первичный ключ. Это может: -- Улучшить производительность индекса. +* Повысить производительность индекса. - Если первичный ключ — это `(a, b)`, то добавление еще одного столбца `c` улучшит производительность, если выполняются следующие условия: - - Существуют запросы с условием на столбец `c`. - - Длинные диапазоны данных (в несколько раз длиннее, чем `index_granularity`) с идентичными значениями для `(a, b)` встречаются часто. Другими словами, когда добавление еще одного столбца позволяет пропускать довольно длинные диапазоны данных. + Если первичный ключ — `(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`. + В этом случае имеет смысл указать *ключ сортировки*, отличающийся от первичного ключа. -Вы можете создать таблицу без первичного ключа, используя синтаксис `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 +251,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -В этом случае в запросах: +В таком случае в запросах: ```sql SELECT count() FROM table @@ -277,42 +269,41 @@ 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} -### Индексы пропуска данных {#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 +321,7 @@ CREATE TABLE table_name ... ``` -Индексы из примера могут использоваться ClickHouse для уменьшения объема данных, считываемых с диска, в следующих запросах: +ClickHouse может использовать индексы из примера, чтобы сократить объём данных, считываемых с диска, в следующих запросах: ```sql SELECT count() FROM table WHERE u64 == 10; @@ -338,106 +329,105 @@ 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} +### Типы пропускающих индексов {#skip-index-types} -Движок таблиц `MergeTree` поддерживает следующие типы индексов пропуска. -Для получения дополнительной информации о том, как индексы пропуска могут использоваться для оптимизации производительности, -см. [«Понимание индексов пропуска данных ClickHouse»](/optimize/skipping-indexes). +Движок таблицы `MergeTree` поддерживает следующие типы пропускающих индексов. +Подробнее об использовании пропускающих индексов для оптимизации производительности +см. в разделе ["Понимание пропускающих индексов данных в ClickHouse"](/optimize/skipping-indexes). -- Индекс [`MinMax`](#minmax) -- Индекс [`Set`](#set) -- Индекс [`bloom_filter`](#bloom-filter) -- Индекс [`ngrambf_v1`](#n-gram-bloom-filter) -- Индекс [`tokenbf_v1`](#token-bloom-filter) +* индекс [`MinMax`](#minmax) +* индекс [`Set`](#set) +* индекс [`bloom_filter`](#bloom-filter) +* индекс [`ngrambf_v1`](#n-gram-bloom-filter) +* индекс [`tokenbf_v1`](#token-bloom-filter) -#### Индекс пропуска MinMax {#minmax} +#### Индекс MinMax {#minmax} -Для каждой гранулы индекса сохраняются минимальное и максимальное значения выражения. -(Если выражение имеет тип `tuple`, сохраняются минимум и максимум для каждого элемента кортежа.) +Для каждой гранулы индекса сохраняются минимальные и максимальные значения выражения. +(Если выражение имеет тип `tuple`, сохраняются минимальные и максимальные значения для каждого элемента кортежа.) -```text title="Синтаксис" +```text title="Syntax" minmax ``` #### Set {#set} Для каждой гранулы индекса сохраняется не более `max_rows` уникальных значений указанного выражения. -`max_rows = 0` означает «сохранять все уникальные значения». +`max_rows = 0` означает «хранить все уникальные значения». -```text title="Синтаксис" +```text title="Syntax" set(max_rows) ``` -#### Bloom filter {#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} +#### N-граммовый Bloom-фильтр {#n-gram-bloom-filter} -Для каждой гранулы индекса сохраняется [фильтр Блума](https://en.wikipedia.org/wiki/Bloom_filter) для [n-грамм](https://en.wikipedia.org/wiki/N-gram) указанных столбцов. +Для каждой гранулы индекса хранится [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 +445,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,103 +469,97 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -Разумеется, эти функции также можно использовать для оценки параметров при других условиях. -Приведенные выше функции основаны на калькуляторе фильтра Блума, доступном [здесь](https://hur.st/bloomfilter). +Разумеется, вы также можете использовать эти функции для оценки параметров и в других условиях. +Приведённые выше функции соответствуют калькулятору фильтра Блума, доступному по адресу [здесь](https://hur.st/bloomfilter). -#### Токенный фильтр Блума {#token-bloom-filter} +#### Фильтр Блума по токенам {#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) ``` +#### Разрежённый n-граммный фильтр Блума {#sparse-grams-bloom-filter} -#### Фильтр Блума на основе разреженных грамм {#sparse-grams-bloom-filter} +Разрежённый n-граммный фильтр Блума аналогичен `ngrambf_v1`, но использует [токены разрежённых n-грамм](/sql-reference/functions/string-functions.md/#sparseGrams) вместо n-грамм. -Фильтр Блума на основе разреженных грамм аналогичен `ngrambf_v1`, но использует [токены разреженных грамм](/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). +Поддерживает полнотекстовый поиск; подробности см. [здесь](invertedindexes.md). -#### Векторное сходство {#vector-similarity} +#### Сходство векторов {#vector-similarity} -Поддерживает приближённый поиск ближайших соседей, подробности см. [здесь](annindexes.md). +Поддерживает приближённый поиск ближайших соседей, подробнее см. [здесь](annindexes.md). ### Поддержка функций {#functions-support} -Условия в секции `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) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | - - - -Функции с константным аргументом, который меньше размера n-граммы, не могут использоваться индексом `ngrambf_v1` для оптимизации запросов. - -(*) Чтобы `hasTokenCaseInsensitive` и `hasTokenCaseInsensitiveOrNull` были эффективны, индекс `tokenbf_v1` должен быть создан по данным в нижнем регистре, например `INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`. +Условия в предложении `WHERE` содержат вызовы функций, которые работают со столбцами. Если столбец является частью индекса, ClickHouse пытается использовать этот индекс при вычислении этих функций. ClickHouse поддерживает различные подмножества функций для работы с индексами. + +Индексы типа `set` могут использоваться всеми функциями. Остальные типы индексов поддерживаются следующим образом: + +| Функция (оператор) / Индекс | первичный ключ | 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` для оптимизации запросов. + +(*) Чтобы `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` не могут использоваться для оптимизации запросов, в которых ожидается, что результат функции будет ложным. Например: -- Может быть оптимизировано: - - `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` - - `s != 1` - - `NOT startsWith(s, 'test')` -::: - - +* Может быть оптимизировано: + * `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` + * `s != 1` + * `NOT startsWith(s, 'test')` + ::: ## Проекции {#projections} -Проекции похожи на [материализованные представления](/sql-reference/statements/create/view), но определяются на уровне части таблицы. Они обеспечивают гарантии согласованности и автоматически используются в запросах. +Проекции похожи на [materialized views](/sql-reference/statements/create/view), но определяются на уровне частей таблицы (parts). Они обеспечивают гарантии согласованности, а также автоматическое использование в запросах. :::note -При использовании проекций следует также учитывать настройку [force_optimize_projection](/operations/settings/settings#force_optimize_projection). +При использовании проекций следует также учитывать настройку [force_optimize_projection](/operations/settings/settings#force_optimize_projection). ::: Проекции не поддерживаются в операторах `SELECT` с модификатором [FINAL](/sql-reference/statements/select/from#final-modifier). @@ -586,36 +570,34 @@ sparse_grams(min_ngram_length, max_ngram_length, min_cutoff_length, size_of_bloo **Синтаксис** ```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` использует её в качестве выражения первичного ключа. В процессе слияния часть проекции объединяется через процедуру слияния её хранилища. Контрольная сумма части родительской таблицы объединяется с контрольной суммой части проекции. Другие операции обслуживания аналогичны индексам с пропуском данных. +Проекции хранятся внутри каталога части. По сути это похоже на индекс, но включает подкаталог, в котором хранится часть анонимной таблицы `MergeTree`. Таблица задаётся запросом, определяющим проекцию. Если в определении есть предложение `GROUP BY`, базовый движок хранения становится [AggregatingMergeTree](aggregatingmergetree.md), и все агрегатные функции приводятся к типу `AggregateFunction`. Если есть предложение `ORDER BY`, таблица `MergeTree` использует его как выражение первичного ключа. Во время процесса слияния часть проекции объединяется с использованием процедуры слияния её движка хранения. Контрольная сумма части родительской таблицы объединяется с частью проекции. Остальные операции обслуживания аналогичны операциям для skip-индексов. ### Анализ запросов {#projection-query-analysis} -1. Проверяется, может ли проекция использоваться для ответа на данный запрос, то есть генерирует ли она тот же результат, что и запрос к базовой таблице. -2. Выбирается наилучшее подходящее совпадение, которое содержит наименьшее количество гранул для чтения. -3. Конвейер запроса, использующий проекции, будет отличаться от того, который использует исходные части. Если проекция отсутствует в некоторых частях, можно добавить конвейер для её создания «на лету». - +1. Проверьте, может ли проекция быть использована для ответа на данный запрос, то есть даёт ли она тот же результат, что и запрос к базовой таблице. +2. Выберите оптимальное соответствие, для которого нужно прочитать наименьшее количество гранул. +3. Конвейер обработки запроса, использующий проекции, будет отличаться от конвейера, работающего с исходными частями. Если в некоторых частях проекция отсутствует, можно добавить конвейер, чтобы «спроецировать» её на лету. -## Параллельный доступ к данным {#concurrent-data-access} +## Одновременный доступ к данным {#concurrent-data-access} -Для параллельного доступа к таблице используется многоверсионность. Иными словами, когда таблица одновременно читается и обновляется, данные читаются из набора кусков, актуального на момент выполнения запроса. Длительные блокировки отсутствуют. Операции вставки не мешают операциям чтения. +Для одновременного доступа к таблице используется многоверсионность. Иными словами, когда таблица одновременно читается и обновляется, данные читаются из набора частей, актуального на момент выполнения запроса. Длительные блокировки отсутствуют. Вставки не мешают операциям чтения. Чтение из таблицы автоматически распараллеливается. - -## TTL для столбцов и таблиц {#table_engine-mergetree-ttl} +## TTL для столбцов и таблиц {#table_engine-mergetree-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,7 +608,7 @@ 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 @@ -635,13 +617,13 @@ TTL date_time + INTERVAL 15 HOUR ### TTL столбца {#mergetree-column-ttl} -Когда значения в столбце устаревают, ClickHouse заменяет их значениями по умолчанию для типа данных столбца. Если все значения столбца в куске данных устаревают, ClickHouse удаляет этот столбец из куска данных в файловой системе. +Когда срок жизни значений в столбце истекает, ClickHouse заменяет их значениями по умолчанию для типа данных столбца. Если срок жизни всех значений столбца в части данных истекает, ClickHouse удаляет этот столбец из соответствующей части данных в файловой системе. -Секция `TTL` не может использоваться для ключевых столбцов. +Предложение `TTL` нельзя использовать для ключевых столбцов. **Примеры** -#### Создание таблицы с `TTL`: {#creating-a-table-with-ttl} +#### Создание таблицы с параметром `TTL`: {#creating-a-table-with-ttl} ```sql CREATE TABLE tab @@ -656,7 +638,7 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### Добавление TTL к столбцу существующей таблицы {#adding-ttl-to-a-column-of-an-existing-table} +#### Добавление TTL для столбца существующей таблицы {#adding-ttl-to-a-column-of-an-existing-table} ```sql ALTER TABLE tab @@ -664,7 +646,7 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### Изменение TTL столбца {#altering-ttl-of-the-column} +#### Изменение TTL для столбца {#altering-ttl-of-the-column} ```sql ALTER TABLE tab @@ -674,32 +656,32 @@ ALTER TABLE tab ### TTL таблицы {#mergetree-table-ttl} -Таблица может иметь выражение для удаления устаревших строк и несколько выражений для автоматического перемещения кусков между [дисками или томами](#table_engine-mergetree-multiple-volumes). Когда строки в таблице устаревают, ClickHouse удаляет все соответствующие строки. Для перемещения или повторного сжатия кусков все строки куска должны удовлетворять критериям выражения `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`). **Примеры** @@ -719,15 +701,14 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### Изменение `TTL` таблицы: {#altering-ttl-of-the-table} +#### Изменение `TTL` для таблицы: {#altering-ttl-of-the-table} ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -Создание таблицы, в которой строки истекают через месяц. Истекшие строки, даты которых приходятся на понедельники, удаляются: +Создание таблицы, в которой строки автоматически удаляются через один месяц. Просроченные строки с датами, приходящимися на понедельник, удаляются: ```sql CREATE TABLE table_with_where @@ -741,7 +722,7 @@ ORDER BY d TTL d + INTERVAL 1 MONTH DELETE WHERE toDayOfWeek(d) = 1; ``` -#### Создание таблицы, в которой истекшие строки перекомпрессируются: {#creating-a-table-where-expired-rows-are-recompressed} +#### Создание таблицы, в которой строки с истёкшим сроком хранения повторно сжимаются: {#creating-a-table-where-expired-rows-are-recompressed} ```sql CREATE TABLE table_for_recompression @@ -756,7 +737,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,58 +753,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} +### Удаление просроченных данных {#mergetree-removing-expired-data} -Данные с истекшим `TTL` удаляются при слиянии частей данных в ClickHouse. +Данные с истёкшим `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) - +* настройка [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts) ## Типы дисков {#disk-types} Помимо локальных блочных устройств, 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` для чтения данных из веб-источников в режиме только для чтения](/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` для 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` для режима только чтения с веба](/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} -Семейство движков таблиц `MergeTree` может хранить данные на нескольких блочных устройствах. Например, это полезно, когда данные определённой таблицы неявно делятся на «горячие» и «холодные». К наиболее свежим данным регулярно обращаются, но они занимают небольшой объём. Напротив, исторические данные с «длинным хвостом» запрашиваются редко. Если доступно несколько дисков, «горячие» данные можно размещать на быстрых дисках (например, NVMe SSD или в памяти), а «холодные» данные — на относительно медленных (например, HDD). +Семейство движков таблиц `MergeTree` может хранить данные на нескольких блочных устройствах. Например, это может быть полезно, когда данные определённой таблицы фактически разделены на «горячие» и «холодные». Самые свежие данные запрашиваются регулярно, но занимают небольшой объём. Напротив, большой «хвост» исторических данных запрашивается редко. Если доступно несколько дисков, «горячие» данные могут располагаться на быстрых дисках (например, NVMe SSD или в памяти), а «холодные» — на относительно медленных (например, HDD). -Часть данных является минимальной перемещаемой единицей для таблиц на движке `MergeTree`. Данные, относящиеся к одной части, хранятся на одном диске. Части данных могут перемещаться между дисками в фоновом режиме (в соответствии с пользовательскими настройками), а также с помощью запросов [ALTER](/sql-reference/statements/alter/partition). +Часть данных (data part) — минимальная единица, которую можно перемещать, для таблиц на движке `MergeTree`. Данные, принадлежащие одной части, хранятся на одном диске. Части данных могут перемещаться между дисками в фоновом режиме (в соответствии с пользовательскими настройками), а также с помощью запросов [ALTER](/sql-reference/statements/alter/partition). ### Термины {#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} +### Конфигурация {#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 +810,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ```xml - + /mnt/fast_ssd/clickhouse/ @@ -852,9 +831,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 +853,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); - + 0.2 @@ -882,7 +861,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); - + ... @@ -890,20 +869,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 +890,9 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ... - + - + disk1 disk2 @@ -949,14 +927,13 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` +В приведённом примере политика `hdd_in_order` реализует стратегию [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling). Поэтому эта политика определяет только один том (`single`), а части данных хранятся на всех его дисках по кругу. Такая политика может быть весьма полезна, если в системе подключено несколько однотипных дисков, но RAID не настроен. Имейте в виду, что каждый отдельный диск ненадёжен, и может потребоваться компенсировать это фактором репликации 3 или более. -В данном примере политика `hdd_in_order` реализует подход [циклического перебора](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 +949,46 @@ 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} -В случае таблиц `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`). +В случае таблиц `MergeTree` данные попадают на диск разными способами: -Внутри мутации и заморозка партиций используют [жёсткие ссылки](https://en.wikipedia.org/wiki/Hard_link). Жёсткие ссылки между различными дисками не поддерживаются, поэтому в таких случаях результирующие куски хранятся на тех же дисках, что и исходные. +* В результате вставки (запрос `INSERT`). +* Во время фоновых слияний и [мутаций](/sql-reference/statements/alter#mutations). +* При загрузке с другой реплики. +* В результате заморозки партиции [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-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), при этом учитываются все ограничения для фоновых операций. Запрос инициирует перемещение самостоятельно и не ожидает завершения фоновых операций. Пользователь получит сообщение об ошибке, если недостаточно свободного пространства или если какое-либо из требуемых условий не выполнено. +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). Жёсткие ссылки между разными дисками не поддерживаются, поэтому в таких случаях результирующие части сохраняются на тех же дисках, что и исходные. +В фоновом режиме части перемещаются между томами на основе количества свободного места (параметр `move_factor`) в соответствии с порядком, в котором тома объявлены в конфигурационном файле. +Данные никогда не переносятся ни с последнего тома, ни на первый том. Для мониторинга фоновых перемещений можно использовать системные таблицы [system.part_log](/operations/system-tables/part_log) (поле `type = MOVE_PART`) и [system.parts](/operations/system-tables/parts.md) (поля `path` и `disk`). Также подробная информация может быть найдена в логах сервера. -После завершения фоновых слияний и мутаций старые части удаляются только по истечении заданного времени (`old_parts_lifetime`). -В течение этого времени они не перемещаются на другие тома или диски. Поэтому, пока части окончательно не удалены, они продолжают учитываться при расчёте занятого дискового пространства. +Пользователь может принудительно переместить часть или партицию с одного тома на другой с помощью запроса [ALTER TABLE ... MOVE PART|PARTITION ... TO VOLUME|DISK ...](/sql-reference/statements/alter/partition); при этом учитываются все ограничения для фоновых операций. Запрос самостоятельно инициирует перемещение и не ждёт завершения фоновых операций. Пользователь получит сообщение об ошибке, если недостаточно свободного места или не выполнено какое-либо из требуемых условий. -Пользователь может равномерно распределять новые крупные части по разным дискам тома [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). +Перемещение данных не мешает репликации данных. Поэтому для одной и той же таблицы на разных репликах могут быть заданы разные политики хранения. +После завершения фоновых слияний и мутаций старые части удаляются только спустя определённый промежуток времени (`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} +## Использование внешнего хранилища для хранения данных {#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 +1029,35 @@ 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} -- `_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} +* `_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} + -Объявление статистики находится в секции столбцов запроса `CREATE` для таблиц семейства `*MergeTree*` при включении `set allow_experimental_statistics = 1`. +Объявление статистики задаётся в секции `COLUMNS` запроса `CREATE` для таблиц из семейства `*MergeTree*` при включённой настройке `set allow_experimental_statistics = 1`. ```sql CREATE TABLE tab @@ -1096,67 +1069,66 @@ 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` - Скетчи [TDigest](https://github.com/tdunning/t-digest), которые позволяют вычислять приблизительные процентили (например, 90-й процентиль) для числовых столбцов. + Скетчи [TDigest](https://github.com/tdunning/t-digest), которые позволяют вычислять приблизительные перцентили (например, 90-й перцентиль) для числовых столбцов. Синтаксис: `tdigest` -- `Uniq` +* `Uniq` - Скетчи [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog), которые предоставляют оценку количества уникальных значений в столбце. + Скетчи [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog), которые позволяют оценить, сколько различных значений содержит столбец. Синтаксис: `uniq` -- `CountMin` +* `CountMin` - Скетчи [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch), которые предоставляют приблизительный подсчет частоты каждого значения в столбце. + Скетчи [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch), которые предоставляют приблизительный подсчёт частоты каждого значения в столбце. Синтаксис: `countmin` ### Поддерживаемые типы данных {#supported-data-types} -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String или FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String или FixedString | +|-----------|----------------------------------------------------|------------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | ### Поддерживаемые операции {#supported-operations} -| | Фильтры равенства (==) | Диапазонные фильтры (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | - +| | Фильтры равенства (==) | Фильтры по диапазону (`>, >=, <, <=`) | +|-----------|------------------------|---------------------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | -## Настройки на уровне столбцов {#column-level-settings} +## Параметры на уровне столбцов {#column-level-settings} -Некоторые настройки MergeTree можно переопределить на уровне столбцов: +Некоторые настройки MergeTree можно переопределять на уровне столбцов: -- `max_compress_block_size` — Максимальный размер блоков несжатых данных перед сжатием при записи в таблицу. -- `min_compress_block_size` — Минимальный размер блоков несжатых данных, требуемый для сжатия при записи следующей метки. +* `max_compress_block_size` — максимальный размер блоков несжатых данных перед их сжатием при записи в таблицу. +* `min_compress_block_size` — минимальный размер блоков несжатых данных, необходимый для сжатия при записи следующей метки. Пример: @@ -1170,21 +1142,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/mergetree-family/replacingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md index b02445758f3..e920e05b138 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Движок таблиц ReplacingMergeTree +# Движок таблиц ReplacingMergeTree {#replacingmergetree-table-engine} Этот движок отличается от [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) тем, что удаляет дублирующиеся записи с одинаковым значением [ключа сортировки](../../../engines/table-engines/mergetree-family/mergetree.md) (раздел `ORDER BY` в определении таблицы, а не `PRIMARY KEY`). @@ -24,7 +24,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -47,9 +47,9 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ::: -## Параметры ReplacingMergeTree +## Параметры ReplacingMergeTree {#replacingmergetree-parameters} -### `ver` +### `ver` {#ver} `ver` — столбец с номером версии. Тип `UInt*`, `Date`, `DateTime` или `DateTime64`. Необязательный параметр. @@ -101,7 +101,7 @@ SELECT * FROM mySecondReplacingMT FINAL; └─────┴─────────┴─────────────────────┘ ``` -### `is_deleted` +### `is_deleted` {#is_deleted} `is_deleted` — имя столбца, используемого во время слияния для определения, представляет ли строка состояние или подлежит удалению; `1` — строка-удаление, `0` — строка-состояние. @@ -190,7 +190,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Дедупликация при выполнении запроса & FINAL +## Дедупликация при выполнении запроса & FINAL {#query-time-de-duplication--final} Во время слияния ReplacingMergeTree определяет дублирующиеся строки, используя значения столбцов `ORDER BY` (указанных при создании таблицы) в качестве уникального идентификатора и сохраняя только самую позднюю версию. Однако это обеспечивает лишь корректность «в конечном счёте» — нет гарантии, что строки будут дедуплицированы, и полагаться на это не следует. Поэтому запросы могут возвращать некорректные результаты, так как строки с обновлениями и удалениями учитываются в запросах. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md index 6ac7b1d8bbd..a469af6ea44 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md @@ -1,5 +1,5 @@ --- -description: 'Обзор репликации данных с помощью семейства движков таблиц Replicated* в ClickHouse' +description: 'Обзор репликации данных с использованием семейства движков таблиц Replicated* в ClickHouse' sidebar_label: 'Replicated*' sidebar_position: 20 slug: /engines/table-engines/mergetree-family/replication @@ -7,12 +7,10 @@ title: 'Движки таблиц Replicated*' doc_type: 'reference' --- - - -# Движки таблиц Replicated* +# Движки таблиц Replicated* {#replicated-table-engines} :::note -В ClickHouse Cloud репликация выполняется автоматически. Пожалуйста, создавайте таблицы без указания аргументов. Например, в тексте ниже вы бы заменили: +В ClickHouse Cloud репликацией управляет платформа. Пожалуйста, создавайте таблицы без дополнительных аргументов. Например, в тексте ниже вы бы заменили: ```sql ENGINE = ReplicatedMergeTree( @@ -21,7 +19,7 @@ ENGINE = ReplicatedMergeTree( ) ``` -с: +с помощью: ```sql ENGINE = ReplicatedMergeTree @@ -39,17 +37,19 @@ ENGINE = ReplicatedMergeTree * ReplicatedVersionedCollapsingMergeTree * ReplicatedGraphiteMergeTree -Репликация осуществляется на уровне отдельной таблицы, а не всего сервера. Сервер может одновременно хранить как реплицируемые, так и нереплицируемые таблицы. +Репликация работает на уровне отдельной таблицы, а не всего сервера. Один сервер может одновременно хранить как реплицируемые, так и нереплицируемые таблицы. + +Репликация не зависит от разбиения на сегменты. Каждый сегмент имеет собственную независимую репликацию. Сжатые данные для запросов `INSERT` и `ALTER` реплицируются (дополнительную информацию см. в документации по [ALTER](/sql-reference/statements/alter)). Запросы `CREATE`, `DROP`, `ATTACH`, `DETACH` и `RENAME` выполняются на одном сервере и не реплицируются: -* Запрос `CREATE TABLE` создаёт новую реплицируемую таблицу на сервере, где выполняется запрос. Если эта таблица уже существует на других серверах, добавляется новая реплика. -* Запрос `DROP TABLE` удаляет реплику, расположенную на сервере, где выполняется запрос. +* Запрос `CREATE TABLE` создаёт новую реплицируемую таблицу на сервере, на котором выполняется запрос. Если такая таблица уже существует на других серверах, создаётся новая реплика. +* Запрос `DROP TABLE` удаляет реплику, расположенную на сервере, на котором выполняется запрос. * Запрос `RENAME` переименовывает таблицу на одной из реплик. Другими словами, реплицируемые таблицы могут иметь разные имена на разных репликах. -ClickHouse использует [ClickHouse Keeper](/guides/sre/keeper/index.md) для хранения метаданных о репликах. Возможно использование ZooKeeper версии 3.4.5 или более новой, но рекомендуется ClickHouse Keeper. +ClickHouse использует [ClickHouse Keeper](/guides/sre/keeper/index.md) для хранения метаинформации о репликах. Можно использовать ZooKeeper версии 3.4.5 или новее, но рекомендуется ClickHouse Keeper. Чтобы использовать репликацию, задайте параметры в разделе конфигурации сервера [zookeeper](/operations/server-configuration-parameters/settings#zookeeper). @@ -76,8 +76,8 @@ ClickHouse использует [ClickHouse Keeper](/guides/sre/keeper/index.md) ``` -ClickHouse также поддерживает хранение метаинформации о репликах во вспомогательном кластере ZooKeeper. Для этого укажите имя кластера ZooKeeper и путь в качестве аргументов движка. -Иными словами, поддерживается хранение метаданных разных таблиц в разных кластерах ZooKeeper. +ClickHouse также поддерживает хранение метаинформации о репликах во вспомогательном кластере ZooKeeper. Для этого укажите имя кластера ZooKeeper и путь в параметрах движка. +Другими словами, поддерживается хранение метаданных разных таблиц в разных кластерах ZooKeeper. Пример задания адресов вспомогательного кластера ZooKeeper: @@ -106,60 +106,58 @@ ClickHouse также поддерживает хранение метаинфо ``` -Чтобы хранить метаданные таблицы во вспомогательном кластере ZooKeeper вместо кластера ZooKeeper по умолчанию, можно использовать SQL, чтобы создать таблицу с -движком ReplicatedMergeTree следующим образом: +Чтобы хранить метаданные таблицы в дополнительном кластере ZooKeeper вместо кластера ZooKeeper по умолчанию, можно создать таблицу с +движком ReplicatedMergeTree с помощью следующего SQL-запроса: ```sql CREATE TABLE table_name ( ... ) ENGINE = ReplicatedMergeTree('zookeeper_name_configured_in_auxiliary_zookeepers:path', 'replica_name') ... ``` -Вы можете указать любой существующий кластер ZooKeeper, и система будет использовать в нём каталог для своих данных (каталог задаётся при создании реплицируемой таблицы). +Вы можете указать любой существующий кластер ZooKeeper, и система будет использовать на нём каталог для собственных данных (каталог задаётся при создании реплицируемой таблицы). -Если ZooKeeper не задан в конфигурационном файле, вы не сможете создавать реплицируемые таблицы, а любые существующие реплицируемые таблицы будут доступны только для чтения. +Если ZooKeeper не указан в конфигурационном файле, вы не сможете создавать реплицируемые таблицы, а любые существующие реплицируемые таблицы будут доступны только для чтения. -ZooKeeper не используется в запросах `SELECT`, поскольку репликация не влияет на производительность `SELECT`, и запросы выполняются так же быстро, как и для нереплицируемых таблиц. При запросе распределённых реплицируемых таблиц поведение ClickHouse контролируется настройками [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) и [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries). +ZooKeeper не используется в запросах `SELECT`, потому что репликация не влияет на производительность `SELECT`, и запросы выполняются так же быстро, как и для нереплицируемых таблиц. При выполнении запросов к распределённым реплицируемым таблицам поведение ClickHouse управляется настройками [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) и [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries). -Для каждого запроса `INSERT` в ZooKeeper добавляется примерно десять записей через несколько транзакций. (Более точно — для каждого вставленного блока данных; один запрос `INSERT` содержит один блок или один блок на `max_insert_block_size = 1048576` строк.) Это приводит к немного большей задержке для `INSERT` по сравнению с нереплицируемыми таблицами. Но если вы следуете рекомендациям вставлять данные пачками не более одного `INSERT` в секунду, это не создаёт никаких проблем. Весь кластер ClickHouse, который использует один кластер ZooKeeper для координации, в сумме выполняет несколько сотен `INSERT` в секунду. Пропускная способность по вставке данных (количество строк в секунду) столь же высока, как и для нереплицируемых данных. +Для каждого запроса `INSERT` в ZooKeeper добавляется примерно десять записей через несколько транзакций. (Более точно: для каждого вставленного блока данных; один запрос `INSERT` содержит один блок или один блок на `max_insert_block_size = 1048576` строк.) Это приводит к немного большему времени ожидания для `INSERT` по сравнению с нереплицируемыми таблицами. Но если вы следуете рекомендациям и вставляете данные пакетами не чаще одного `INSERT` в секунду, это не создаёт никаких проблем. Весь кластер ClickHouse, используемый для координации одного кластера ZooKeeper, в сумме обрабатывает несколько сотен запросов `INSERT` в секунду. Пропускная способность по вставке данных (количество строк в секунду) столь же высока, как и для нереплицируемых данных. -Для очень больших кластеров вы можете использовать разные кластеры ZooKeeper для разных шардов. Однако, исходя из нашего опыта, в этом не было необходимости даже для промышленных кластеров примерно из 300 серверов. +Для очень больших кластеров вы можете использовать разные кластеры ZooKeeper для разных сегментов. Однако, по нашему опыту, в боевых кластерах примерно из 300 серверов в этом не было необходимости. -Репликация асинхронная и многомастерная (multi-master). Запросы `INSERT` (а также `ALTER`) могут быть отправлены на любой доступный сервер. Данные вставляются на тот сервер, на котором выполняется запрос, а затем копируются на остальные серверы. Поскольку это асинхронно, недавно вставленные данные появляются на других репликах с некоторой задержкой. Если часть реплик недоступна, данные будут записаны, когда они станут доступны. Если реплика доступна, задержка равна времени, необходимому для передачи блока сжатых данных по сети. Количество потоков, выполняющих фоновые задачи для реплицируемых таблиц, можно задать настройкой [background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size). +Репликация асинхронная и multi-master. Запросы `INSERT` (а также `ALTER`) могут быть отправлены на любой доступный сервер. Данные вставляются на сервере, где выполняется запрос, а затем копируются на другие серверы. Поскольку это происходит асинхронно, недавно вставленные данные появляются на других репликах с некоторой задержкой. Если часть реплик недоступна, данные будут записаны, когда они станут доступными. Если реплика доступна, задержка равна времени передачи блока сжатых данных по сети. Количество потоков, выполняющих фоновые задачи для реплицируемых таблиц, может быть задано настройкой [background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size). -Движок `ReplicatedMergeTree` использует отдельный пул потоков для реплицируемых выборок данных (fetch). Размер пула ограничивается настройкой [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size), которую можно изменить с перезапуском сервера. +Движок `ReplicatedMergeTree` использует отдельный пул потоков для реплицируемых загрузок данных (fetches). Размер пула ограничен настройкой [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size), которую можно изменить с перезапуском сервера. -По умолчанию запрос `INSERT` ждёт подтверждения записи данных только от одной реплики. Если данные были успешно записаны только на одну реплику и сервер с этой репликой перестаёт существовать, сохранённые данные будут потеряны. Чтобы получать подтверждение записи данных от нескольких реплик, используйте опцию `insert_quorum`. +По умолчанию запрос `INSERT` ожидает подтверждения записи данных только от одной реплики. Если данные были успешно записаны только на одну реплику и сервер с этой репликой перестаёт существовать, сохранённые данные будут утеряны. Чтобы включить получение подтверждения о записи данных от нескольких реплик, используйте опцию `insert_quorum`. Каждый блок данных записывается атомарно. Запрос `INSERT` разбивается на блоки до `max_insert_block_size = 1048576` строк. Другими словами, если запрос `INSERT` содержит меньше 1048576 строк, он выполняется атомарно. -Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоков одинакового размера, содержащих одинаковые строки в одном и том же порядке) блок записывается только один раз. Причина в том, что при сетевых сбоях клиентское приложение может не знать, были ли данные записаны в БД, поэтому запрос `INSERT` можно просто повторить. Не имеет значения, на какие реплики отправлялись `INSERT` с идентичными данными. Запросы `INSERT` являются идемпотентными. Параметры дедупликации управляются серверными настройками [merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree). +Блоки данных дедуплицируются. При многократной записи одного и того же блока данных (блоки данных одного размера, содержащие одни и те же строки в одном и том же порядке) блок записывается только один раз. Это сделано для случая сбоев сети, когда клиентское приложение не знает, были ли данные записаны в БД, поэтому запрос `INSERT` можно просто повторить. Неважно, на какие реплики отправлялись запросы `INSERT` с идентичными данными. Запросы `INSERT` являются идемпотентными. Параметры дедупликации управляются серверными настройками [merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree). -Во время репликации по сети передаются только исходные данные для вставки. Дальнейшая обработка данных (слияние) координируется и выполняется на всех репликах одинаковым образом. Это минимизирует использование сети, что означает, что репликация хорошо работает, когда реплики расположены в разных дата-центрах. (Обратите внимание, что дублирование данных в разных дата-центрах является основной целью репликации.) +Во время репликации по сети передаются только исходные данные для вставки. Дальнейшее преобразование данных (слияние) координируется и выполняется на всех репликах одинаковым образом. Это минимизирует сетевой трафик, что означает, что репликация хорошо работает, когда реплики находятся в разных дата-центрах. (Обратите внимание, что дублирование данных в разных дата-центрах является основной целью репликации.) -Вы можете иметь любое количество реплик одних и тех же данных. По нашему опыту, относительно надёжным и удобным решением в продакшене может быть двойная репликация, при этом каждый сервер использует RAID-5 или RAID-6 (а в некоторых случаях RAID-10). +Вы можете иметь любое количество реплик одних и тех же данных. По нашему опыту, относительно надёжным и удобным решением может быть двойная репликация в продакшене, когда каждый сервер использует RAID-5 или RAID-6 (и RAID-10 в некоторых случаях). -Система отслеживает синхронность данных на репликах и способна восстанавливаться после сбоя. Переключение осуществляется автоматически (при небольших расхождениях в данных) или полуавтоматически (когда данные отличаются слишком сильно, что может указывать на ошибку конфигурации). +Система отслеживает синхронность данных на репликах и способна восстанавливаться после сбоя. Переключение на резерв (failover) происходит автоматически (при небольших различиях в данных) или полуавтоматически (когда данные различаются слишком сильно, что может указывать на ошибку конфигурации). - - -## Создание реплицируемых таблиц +## Создание реплицируемых таблиц {#creating-replicated-tables} :::note -В ClickHouse Cloud репликация выполняется автоматически. +В ClickHouse Cloud репликация осуществляется автоматически. -Создавайте таблицы с использованием [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) без аргументов репликации. Система автоматически преобразует [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) в [`SharedMergeTree`](/cloud/reference/shared-merge-tree) для репликации и распределения данных. +Создавайте таблицы, используя [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) без аргументов репликации. Система внутренне преобразует [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) в [`SharedMergeTree`](/cloud/reference/shared-merge-tree) для репликации и распределения данных. Не используйте `ReplicatedMergeTree` и не задавайте параметры репликации, так как репликацией управляет платформа. ::: -### Параметры Replicated*MergeTree +### Параметры Replicated*MergeTree {#replicatedmergetree-parameters} -| Parameter | Description | -| ------------------ | ------------------------------------------------------------------------------------------------------------------- | -| `zoo_path` | Путь к таблице в ClickHouse Keeper. | -| `replica_name` | Имя реплики в ClickHouse Keeper. | -| `other_parameters` | Параметры движка, используемого для создания реплицируемой версии, например параметр версии в `ReplacingMergeTree`. | +| Параметр | Описание | +| ------------------ | --------------------------------------------------------------------------------------------------------------- | +| `zoo_path` | Путь к таблице в ClickHouse Keeper. | +| `replica_name` | Имя реплики в ClickHouse Keeper. | +| `other_parameters` | Параметры движка, используемого для создания реплицированной версии, например `version` в `ReplacingMergeTree`. | Пример: @@ -170,6 +168,7 @@ CREATE TABLE table_name CounterID UInt32, UserID UInt32, ver UInt16 +) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}', ver) PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) @@ -189,7 +188,7 @@ SAMPLE BY intHash32(UserID); ``` -Как показано в примере, эти параметры могут содержать подстановки в фигурных скобках. Подставляемые значения берутся из раздела [macros](/operations/server-configuration-parameters/settings.md/#macros) конфигурационного файла. +Как видно из примера, эти параметры могут содержать подстановки в фигурных скобках. Значения для подстановки берутся из раздела [macros](/operations/server-configuration-parameters/settings.md/#macros) файла конфигурации. Пример: @@ -200,26 +199,26 @@ SAMPLE BY intHash32(UserID); ``` -Путь к таблице в ClickHouse Keeper должен быть уникальным для каждой реплицируемой таблицы. Таблицы на разных шардах должны иметь разные пути. +Путь к таблице в ClickHouse Keeper должен быть уникальным для каждой реплицируемой таблицы. Таблицы на разных сегментах должны иметь разные пути. В данном случае путь состоит из следующих частей: -`/clickhouse/tables/` — общий префикс. Мы рекомендуем использовать именно его. +`/clickhouse/tables/` — это общий префикс. Мы рекомендуем использовать именно его. -`{shard}` будет подставлен как идентификатор шарда. +`{shard}` будет подставлен как идентификатор сегмента. -`table_name` — это имя узла для таблицы в ClickHouse Keeper. Желательно сделать его таким же, как имя таблицы. Оно задаётся явно, потому что, в отличие от имени таблицы, не меняется после выполнения запроса RENAME. +`table_name` — это имя узла для таблицы в ClickHouse Keeper. Хорошей идеей будет сделать его таким же, как имя таблицы. Оно задаётся явно, потому что, в отличие от имени таблицы, не изменяется после запроса RENAME. *ПОДСКАЗКА*: вы также можете добавить имя базы данных перед `table_name`. Например, `db_name.table_name` -Можно использовать две встроенные подстановки `{database}` и `{table}`, они разворачиваются в имя таблицы и имя базы данных соответственно (при условии, что эти макросы не определены в секции `macros`). Таким образом, путь в ClickHouse Keeper можно указать как `'/clickhouse/tables/{shard}/{database}/{table}'`. -Будьте осторожны с переименованием таблиц при использовании этих встроенных подстановок. Путь в ClickHouse Keeper нельзя изменить, и когда таблица будет переименована, макросы развернутся в другой путь, таблица будет ссылаться на путь, который не существует в ClickHouse Keeper, и перейдёт в режим «только для чтения». +Можно использовать две встроенные подстановки `{database}` и `{table}`, которые подставляются как имя таблицы и имя базы данных соответственно (если только эти макросы не определены в секции `macros`). Таким образом, путь в ClickHouse Keeper можно задать как `'/clickhouse/tables/{shard}/{database}/{table}'`. +Будьте осторожны с переименованием таблиц при использовании этих встроенных подстановок. Путь в ClickHouse Keeper нельзя изменить, и когда таблица переименовывается, макросы будут подставляться в другой путь, таблица будет ссылаться на путь, который не существует в ClickHouse Keeper, и перейдёт в режим только для чтения. -Имя реплики идентифицирует разные реплики одной и той же таблицы. Для этого можно использовать имя сервера, как в примере. Имя должно быть уникальным только внутри каждого шарда. +Имя реплики идентифицирует разные реплики одной и той же таблицы. Для этого вы можете использовать имя сервера, как в примере. Имя должно быть уникальным только внутри каждого сегмента. Вы можете задать параметры явно вместо использования подстановок. Это может быть удобно для тестирования и настройки небольших кластеров. Однако в этом случае вы не можете использовать распределённые DDL-запросы (`ON CLUSTER`). -При работе с большими кластерами мы рекомендуем использовать подстановки, поскольку они снижают вероятность ошибки. +При работе с большими кластерами мы рекомендуем использовать подстановки, так как они снижают вероятность ошибок. -Вы можете указать аргументы по умолчанию для движка таблицы `Replicated` в конфигурационном файле сервера. Например: +Вы можете задать аргументы по умолчанию для движка таблиц `Replicated` в конфигурационном файле сервера. Например: ```xml /clickhouse/tables/{shard}/{database}/{table} @@ -237,7 +236,6 @@ ORDER BY x; Это эквивалентно следующему: - ```sql CREATE TABLE table_name ( x UInt32 @@ -245,30 +243,30 @@ CREATE TABLE table_name ( ORDER BY x; ``` -Выполните запрос `CREATE TABLE` на каждой реплике. Этот запрос создаёт новую реплицируемую таблицу или добавляет новую реплику к уже существующей. +Выполните запрос `CREATE TABLE` на каждой реплике. Этот запрос создает новую реплицируемую таблицу или добавляет новую реплику к уже существующей. -Если вы добавляете новую реплику после того, как таблица уже содержит данные на других репликах, данные будут скопированы с других реплик на новую реплику после выполнения запроса. Другими словами, новая реплика синхронизируется с остальными. +Если вы добавляете новую реплику после того, как таблица уже содержит какие‑то данные на других репликах, данные будут скопированы с других реплик на новую реплику после выполнения этого запроса. Другими словами, новая реплика синхронизируется с остальными. Чтобы удалить реплику, выполните `DROP TABLE`. Однако удаляется только одна реплика — та, которая находится на сервере, где вы выполняете запрос. -## Восстановление после сбоев +## Восстановление после сбоев {#recovery-after-failures} Если ClickHouse Keeper недоступен при запуске сервера, реплицируемые таблицы переключаются в режим только для чтения. Система периодически пытается подключиться к ClickHouse Keeper. -Если ClickHouse Keeper недоступен во время выполнения `INSERT` или при взаимодействии с ClickHouse Keeper возникает ошибка, будет выброшено исключение. +Если ClickHouse Keeper недоступен во время выполнения `INSERT` или при взаимодействии с ClickHouse Keeper возникает ошибка, выбрасывается исключение. -После подключения к ClickHouse Keeper система проверяет, соответствует ли набор данных в локальной файловой системе ожидаемому набору данных (ClickHouse Keeper хранит эту информацию). При небольших несоответствиях система устраняет их, синхронизируя данные с репликами. +После подключения к ClickHouse Keeper система проверяет, соответствует ли набор данных в локальной файловой системе ожидаемому набору данных (ClickHouse Keeper хранит эту информацию). При незначительных несоответствиях система устраняет их, синхронизируя данные с репликами. -Если система обнаруживает повреждённые части данных (с некорректным размером файлов) или неизвестные части (записанные в файловую систему, но не зафиксированные в ClickHouse Keeper), они перемещаются в подкаталог `detached` (они не удаляются). Все отсутствующие части копируются с реплик. +Если система обнаруживает поврежденные части данных (с неправильным размером файлов) или нераспознанные части (части, записанные в файловую систему, но не зарегистрированные в ClickHouse Keeper), она перемещает их в подкаталог `detached` (они не удаляются). Любые отсутствующие части копируются с реплик. -Обратите внимание, что ClickHouse не выполняет никаких разрушающих действий, таких как автоматическое удаление большого объёма данных. +Обратите внимание, что ClickHouse не выполняет никаких разрушающих действий, таких как автоматическое удаление большого объема данных. -При запуске сервера (или установлении нового сеанса с ClickHouse Keeper) он проверяет только количество и размеры всех файлов. Если размеры файлов совпадают, но байты где-то посередине были изменены, это сразу не обнаруживается, а только при попытке чтения данных для запроса `SELECT`. Запрос в этом случае завершится исключением о несовпадающей контрольной сумме или размере сжатого блока. В таком случае части данных добавляются в очередь проверки и при необходимости копируются с реплик. +При запуске сервера (или установлении новой сессии с ClickHouse Keeper) он проверяет только количество и размеры всех файлов. Если размеры файлов совпадают, но байты были изменены где-то в середине файла, это обнаруживается не сразу, а только при попытке чтения данных для запроса `SELECT`. В этом случае запрос завершится исключением о несовпадающей контрольной сумме или размере сжатого блока. Части данных добавляются в очередь проверки и при необходимости копируются с реплик. -Если локальный набор данных слишком сильно отличается от ожидаемого, срабатывает защитный механизм. Сервер записывает это в лог и отказывается запускаться. Причина в том, что такая ситуация может указывать на ошибку конфигурации, например, если реплика на одном шарде была по ошибке сконфигурирована как реплика на другом шарде. Однако пороговые значения для этого механизма установлены достаточно низкими, и такая ситуация может возникнуть при нормальном восстановлении после сбоя. В этом случае данные восстанавливаются полуавтоматически — «по нажатию кнопки». +Если локальный набор данных существенно отличается от ожидаемого, срабатывает защитный механизм. Сервер записывает это в лог и отказывается запускаться. Причина в том, что такая ситуация может указывать на ошибку конфигурации, например, если реплика на одном сегменте была по ошибке настроена как реплика на другом сегменте. Однако пороговые значения для этого механизма установлены достаточно низко, и такая ситуация может возникнуть при обычном восстановлении после сбоя. В этом случае данные восстанавливаются полуавтоматически — «нажатием кнопки». -Чтобы запустить восстановление, создайте узел `/path_to_table/replica_name/flags/force_restore_data` в ClickHouse Keeper с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: +Чтобы начать восстановление, создайте в ClickHouse Keeper узел `/path_to_table/replica_name/flags/force_restore_data` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: ```bash sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data @@ -279,59 +277,57 @@ sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data ## Восстановление после полной потери данных {#recovery-after-complete-data-loss} -Если все данные и метаданные исчезли с одного из серверов, выполните следующие действия для восстановления: +Если все данные и метаданные исчезли с одного из серверов, выполните следующие шаги для восстановления: -1. Установите ClickHouse на сервер. Корректно задайте подстановки в конфигурационном файле, который содержит идентификатор шарда и реплик, если вы их используете. -2. Если у вас были нереплицируемые таблицы, которые необходимо вручную продублировать на серверах, скопируйте их данные с реплики (из каталога `/var/lib/clickhouse/data/db_name/table_name/`). -3. Скопируйте определения таблиц, расположенные в `/var/lib/clickhouse/metadata/`, с реплики. Если идентификатор шарда или реплики явно задан в определениях таблиц, скорректируйте его так, чтобы он соответствовал этой реплике. (Либо запустите сервер и выполните все запросы `ATTACH TABLE`, которые должны были находиться в .sql-файлах в `/var/lib/clickhouse/metadata/`.) -4. Для запуска процедуры восстановления создайте узел в ClickHouse Keeper `/path_to_table/replica_name/flags/force_restore_data` с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data` +1. Установите ClickHouse на сервер. Корректно задайте подстановки в конфигурационном файле, который содержит идентификатор сегмента и реплик, если вы их используете. +2. Если у вас были нереплицированные таблицы, которые необходимо вручную продублировать на серверах, скопируйте их данные с реплики (из каталога `/var/lib/clickhouse/data/db_name/table_name/`). +3. Скопируйте определения таблиц, расположенные в `/var/lib/clickhouse/metadata/`, с реплики. Если в определениях таблиц явно задан идентификатор сегмента или реплики, скорректируйте его так, чтобы он соответствовал этой реплике. (Либо запустите сервер и выполните все запросы `ATTACH TABLE`, которые должны были быть в .sql-файлах в `/var/lib/clickhouse/metadata/`.) +4. Чтобы запустить восстановление, создайте узел ClickHouse Keeper `/path_to_table/replica_name/flags/force_restore_data` с любым содержимым или выполните команду для восстановления всех реплицированных таблиц: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data` Затем запустите сервер (или перезапустите, если он уже работает). Данные будут загружены с реплик. -Альтернативный вариант восстановления — удалить информацию о потерянной реплике из ClickHouse Keeper (`/path_to_table/replica_name`), затем создать реплику заново, как описано в разделе "[Создание реплицируемых таблиц](#creating-replicated-tables)". - -Во время восстановления пропускная способность сети никак не ограничивается. Учитывайте это, если вы восстанавливаете сразу много реплик. - +Альтернативный вариант восстановления — удалить информацию о потерянной реплике из ClickHouse Keeper (`/path_to_table/replica_name`), затем создать реплику заново, как описано в разделе "[Создание реплицированных таблиц](#creating-replicated-tables)". +Во время восстановления нет ограничений на пропускную способность сети. Учитывайте это, если вы восстанавливаете большое количество реплик одновременно. -## Преобразование из MergeTree в ReplicatedMergeTree +## Преобразование из MergeTree в ReplicatedMergeTree {#converting-from-mergetree-to-replicatedmergetree} -Мы используем термин `MergeTree` для обозначения всех движков таблиц из `семейства MergeTree`, аналогично для `ReplicatedMergeTree`. +Мы используем термин `MergeTree` для обозначения всех движков таблиц семейства `MergeTree`, аналогично и для `ReplicatedMergeTree`. -Если у вас была таблица `MergeTree`, реплицированная вручную, вы можете преобразовать её в реплицируемую таблицу. Это может понадобиться, если вы уже накопили большой объём данных в таблице `MergeTree` и теперь хотите включить репликацию. +Если у вас была таблица `MergeTree`, которая реплицировалась вручную, вы можете преобразовать её в реплицируемую таблицу. Это может понадобиться, если вы уже накопили большой объём данных в таблице `MergeTree` и теперь хотите включить репликацию. -Оператор [ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) позволяет присоединить отсоединённую таблицу `MergeTree` как `ReplicatedMergeTree`. +Команда [ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) позволяет прикрепить отсоединённую таблицу `MergeTree` как таблицу `ReplicatedMergeTree`. -Таблица `MergeTree` может быть автоматически преобразована при перезапуске сервера, если флаг `convert_to_replicated` установлен в каталоге данных таблицы (`/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/` для базы данных `Atomic`). +Таблица `MergeTree` может быть автоматически преобразована при перезапуске сервера, если флаг `convert_to_replicated` установлен в каталоге с данными таблицы (`/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/` для базы данных `Atomic`). Создайте пустой файл `convert_to_replicated`, и при следующем перезапуске сервера таблица будет загружена как реплицируемая. -Этот запрос можно использовать, чтобы получить путь к данным таблицы. Если у таблицы несколько путей к данным, необходимо использовать первый из них. +Этот запрос можно использовать, чтобы получить путь к данным таблицы. Если у таблицы несколько путей к данным, необходимо использовать первый. ```sql SELECT data_paths FROM system.tables WHERE table = 'table_name' AND database = 'database_name'; ``` Обратите внимание, что таблица ReplicatedMergeTree будет создана со значениями настроек `default_replica_path` и `default_replica_name`. -Чтобы создать преобразованную таблицу на других репликах, вам нужно явно указать её путь в первом аргументе движка `ReplicatedMergeTree`. Для получения этого пути можно использовать следующий запрос. +Чтобы создать преобразованную таблицу на других репликах, вам нужно явно указать ее путь в первом аргументе движка таблицы `ReplicatedMergeTree`. Для получения этого пути можно выполнить следующий запрос. ```sql SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; ``` -Существует также ручной способ это сделать. +Есть и способ сделать это вручную. -Если данные отличаются на разных репликах, сначала синхронизируйте их или удалите эти данные на всех репликах, кроме одной. +Если данные различаются на разных репликах, сначала синхронизируйте их или удалите эти данные на всех репликах, кроме одной. Переименуйте существующую таблицу MergeTree, затем создайте таблицу `ReplicatedMergeTree` со старым именем. Переместите данные из старой таблицы в подкаталог `detached` внутри каталога с данными новой таблицы (`/var/lib/clickhouse/data/db_name/table_name/`). -Затем выполните `ALTER TABLE ATTACH PARTITION` на одной из реплик, чтобы добавить эти части данных в рабочий набор данных. +Затем выполните `ALTER TABLE ATTACH PARTITION` на одной из реплик, чтобы добавить эти части в рабочий набор. -## Преобразование ReplicatedMergeTree в MergeTree {#converting-from-replicatedmergetree-to-mergetree} +## Преобразование из ReplicatedMergeTree в MergeTree {#converting-from-replicatedmergetree-to-mergetree} -Используйте оператор [ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree), чтобы подключить отсоединённую таблицу `ReplicatedMergeTree` как таблицу `MergeTree` на одном сервере. +Используйте команду [ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree), чтобы подключить отсоединённую таблицу `ReplicatedMergeTree` как `MergeTree` на одном сервере. -Другой способ требует перезапуска сервера. Создайте таблицу MergeTree с другим именем. Переместите все данные из каталога с данными таблицы `ReplicatedMergeTree` в каталог данных новой таблицы. Затем удалите таблицу `ReplicatedMergeTree` и перезапустите сервер. +Другой способ сделать это требует перезапуска сервера. Создайте таблицу MergeTree с другим именем. Переместите все данные из каталога с данными таблицы `ReplicatedMergeTree` в каталог данных новой таблицы. Затем удалите таблицу `ReplicatedMergeTree` и перезапустите сервер. Если вы хотите избавиться от таблицы `ReplicatedMergeTree`, не запуская сервер: @@ -340,11 +336,9 @@ SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; После этого вы можете запустить сервер, создать таблицу `MergeTree`, переместить данные в её каталог, а затем перезапустить сервер. +## Восстановление после потери или повреждения метаданных в кластере ClickHouse Keeper {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} - -## Восстановление при потере или повреждении метаданных в кластере ClickHouse Keeper {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} - -Если данные в ClickHouse Keeper были утеряны или повреждены, их можно сохранить, переместив в нереплицируемую таблицу, как описано выше. +Если данные в ClickHouse Keeper были утеряны или повреждены, вы можете сохранить их, переместив в нереплицируемую таблицу, как описано выше. **См. также** @@ -352,4 +346,4 @@ SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; - [background_fetches_pool_size](/operations/server-configuration-parameters/settings.md/#background_fetches_pool_size) - [execute_merges_on_single_replica_time_threshold](/operations/settings/merge-tree-settings#execute_merges_on_single_replica_time_threshold) - [max_replicated_fetches_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_fetches_network_bandwidth) -- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) +- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md index 65742cd803d..56e740f3701 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок таблиц SummingMergeTree +# Движок таблиц SummingMergeTree {#summingmergetree-table-engine} Этот движок наследуется от [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree). Разница в том, что при слиянии частей данных для таблиц `SummingMergeTree` ClickHouse заменяет все строки с одинаковым первичным ключом (или, точнее, с одинаковым [ключом сортировки](../../../engines/table-engines/mergetree-family/mergetree.md)) одной строкой, которая содержит суммы значений для столбцов с числовым типом данных. Если ключ сортировки построен таким образом, что одному значению ключа соответствует большое количество строк, это существенно уменьшает объем хранимых данных и ускоряет выборку. @@ -17,7 +17,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -34,16 +34,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] Описание параметров запроса см. в [описании запроса](../../../sql-reference/statements/create/table.md). -### Параметры SummingMergeTree +### Параметры SummingMergeTree {#parameters-of-summingmergetree} -#### Столбцы +#### Столбцы {#columns} `columns` — кортеж с именами столбцов, значения в которых будут суммироваться. Необязательный параметр. Столбцы должны иметь числовой тип и не должны входить в ключ партиционирования или сортировки. Если `columns` не указан, ClickHouse суммирует значения во всех столбцах с числовым типом данных, которые не входят в ключ сортировки. -### Части запроса +### Части запроса {#query-clauses} При создании таблицы `SummingMergeTree` требуются те же [части запроса](../../../engines/table-engines/mergetree-family/mergetree.md), что и при создании таблицы `MergeTree`. @@ -69,7 +69,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Пример использования +## Пример использования {#usage-example} Рассмотрим следующую таблицу: @@ -103,13 +103,13 @@ SELECT key, sum(value) FROM summtt GROUP BY key ``` -## Обработка данных +## Обработка данных {#data-processing} Когда данные вставляются в таблицу, они сохраняются как есть. ClickHouse периодически сливает вставленные части данных, и именно в этот момент строки с одинаковым первичным ключом суммируются и заменяются одной строкой для каждой получившейся части данных. ClickHouse может сливать части данных таким образом, что разные получившиеся части данных могут содержать строки с одинаковым первичным ключом, т. е. суммирование будет неполным. Поэтому при выполнении запроса (`SELECT`) следует использовать агрегатную функцию [sum()](/sql-reference/aggregate-functions/reference/sum) и предложение `GROUP BY`, как описано в примере выше. -### Общие правила суммирования +### Общие правила суммирования {#common-rules-for-summation} Значения в столбцах с числовым типом данных суммируются. Набор столбцов определяется параметром `columns`. @@ -119,11 +119,11 @@ ClickHouse может сливать части данных таким обра Значения не суммируются для столбцов, входящих в первичный ключ. -### Суммирование в столбцах AggregateFunction +### Суммирование в столбцах AggregateFunction {#the-summation-in-the-aggregatefunction-columns} Для столбцов типа [AggregateFunction](../../../sql-reference/data-types/aggregatefunction.md) ClickHouse ведёт себя как движок [AggregatingMergeTree](../../../engines/table-engines/mergetree-family/aggregatingmergetree.md), агрегируя в соответствии с функцией. -### Вложенные структуры +### Вложенные структуры {#nested-structures} Таблица может содержать вложенные структуры данных, которые обрабатываются особым образом. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md index 3be3f2fe0aa..d9462a14649 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Движок таблицы VersionedCollapsingMergeTree +# Движок таблицы VersionedCollapsingMergeTree {#versionedcollapsingmergetree-table-engine} Этот движок: @@ -23,7 +23,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -40,7 +40,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] Описание параметров запроса см. в разделе [описание запроса](../../../sql-reference/statements/create/table.md). -### Параметры движка +### Параметры движка {#engine-parameters} ```sql VersionedCollapsingMergeTree(sign, version) @@ -51,7 +51,7 @@ VersionedCollapsingMergeTree(sign, version) | `sign` | Имя столбца с типом записи: `1` — запись «state», `-1` — запись «cancel». | [`Int8`](/sql-reference/data-types/int-uint) | | `version` | Имя столбца с версией состояния объекта. | [`Int*`](/sql-reference/data-types/int-uint), [`UInt*`](/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) | -### Клаузы запроса +### Клаузы запроса {#query-clauses} При создании таблицы `VersionedCollapsingMergeTree` требуются те же [клаузы](../../../engines/table-engines/mergetree-family/mergetree.md), что и при создании таблицы `MergeTree`. @@ -83,9 +83,9 @@ VersionedCollapsingMergeTree(sign, version) -## Коллапсирование +## Коллапсирование {#table_engines_versionedcollapsingmergetree} -### Данные +### Данные {#data} Рассмотрим ситуацию, когда нужно сохранять постоянно изменяющиеся данные для некоторого объекта. Разумно иметь одну строку на объект и обновлять эту строку при каждом изменении. Однако операция UPDATE для СУБД дорогая и медленная, поскольку требует перезаписи данных в хранилище. Обновление неприемлемо, если нужно быстро записывать данные, но вы можете последовательно записывать изменения объекта следующим образом. @@ -131,7 +131,7 @@ VersionedCollapsingMergeTree(sign, version) 2. Длинные постоянно растущие массивы в столбцах снижают эффективность движка из‑за нагрузки на запись. Чем проще данные, тем выше эффективность. 3. Результаты `SELECT` сильно зависят от согласованности истории изменений объекта. Будьте внимательны при подготовке данных для вставки. При несогласованных данных вы можете получить непредсказуемые результаты, например отрицательные значения для неотрицательных метрик, таких как глубина сессии. -### Algorithm +### Algorithm {#table_engines-versionedcollapsingmergetree-algorithm} Когда ClickHouse сливает части данных, он удаляет каждую пару строк с одинаковым первичным ключом и версией и разным `Sign`. Порядок строк не имеет значения. @@ -150,7 +150,7 @@ ClickHouse не гарантирует, что все строки с одина -## Пример использования +## Пример использования {#example-of-use} Пример данных: 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..fdd588065d7 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,28 +1,36 @@ --- -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-table-engine} -Движок `Alias` создает прокси к другой таблице. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сама таблица-алиас не хранит данные и лишь содержит ссылку на целевую таблицу. + +Движок `Alias` создаёт прокси для другой таблицы. Все операции чтения и записи перенаправляются в целевую таблицу, при этом сама таблица-алиас не хранит данных и только поддерживает ссылку на целевую таблицу. +:::info +Это экспериментальная функция, которая может измениться в будущих релизах с нарушением обратной совместимости. +Включите использование движка таблицы Alias +с помощью настройки [allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine). +Введите команду `set allow_experimental_alias_table_engine = 1`. +::: -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql 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} +### Создание простого алиаса {#basic-alias-creation} -## Примеры использования - -### Создание простого псевдонима - -Создайте простой псевдоним в той же базе данных: +Создайте простой алиас в этой же базе данных: ```sql -- Создать исходную таблицу @@ -104,16 +109,17 @@ SELECT * FROM data_alias; └────┴──────┴───────┘ ``` -### Псевдоним для другой базы данных -Создайте псевдоним, который ссылается на таблицу в другой базе данных: +### Межбазовый псевдоним {#cross-database-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,7 +138,8 @@ INSERT INTO db2.events_alias VALUES (now(), 'click', 100); SELECT * FROM db2.events_alias2; ``` -### Операции записи через алиас + +### Операции записи через алиас {#write-operations} Все операции записи перенаправляются в целевую таблицу: @@ -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` изменяют схему целевой таблицы: +### Изменение схемы {#schema-modification} + +Операции 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; └───────┴────────┴──────────────┴────────────────────┘ ``` -### Модификации данных + +### Мутации данных {#data-mutations} Поддерживаются операции UPDATE и DELETE: @@ -227,10 +236,10 @@ SELECT * FROM products ORDER BY id; └────┴──────────┴───────┴────────┘ ``` -### Операции с партициями -Для партиционированных таблиц операции с партициями перенаправляются: +### Операции с партициями {#partition-operations} +Для секционированных таблиц операции с партициями передаются далее: ```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` для слияния частей в целевой таблице: +### Оптимизация таблицы {#table-optimization} + +Оптимизируйте операции по слиянию частей в целевой таблице: ```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 ``` -### Управление псевдонимами -Псевдонимы можно переименовывать или удалять по отдельности: +### Управление алиасами {#alias-management} + +Алиасы можно переименовывать или удалять независимо: ```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/buffer.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md index 4220516d3e6..ac3ddf72127 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md @@ -7,9 +7,7 @@ title: 'Движок таблицы Buffer' doc_type: 'reference' --- - - -# Движок таблицы Buffer +# Движок таблицы Buffer {#buffer-table-engine} Буферизует данные, подлежащие записи, в оперативной памяти и периодически сбрасывает их в другую таблицу. При чтении данные одновременно считываются из буфера и из другой таблицы. @@ -21,27 +19,27 @@ doc_type: 'reference' Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes [,flush_time [,flush_rows [,flush_bytes]]]) ``` -### Параметры движка +### Параметры движка {#engine-parameters} -#### `database` +#### `database` {#database} `database` – Имя базы данных. Можно использовать `currentDatabase()` или другое константное выражение, возвращающее строку. -#### `table` +#### `table` {#table} `table` – Таблица, в которую сбрасываются данные. -#### `num_layers` +#### `num_layers` {#num_layers} `num_layers` – Уровень параллелизма. Физически таблица будет представлена как `num_layers` независимых буферов. -#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes` и `max_bytes` +#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes` и `max_bytes` {#min_time-max_time-min_rows-max_rows-min_bytes-and-max_bytes} Условия для сброса данных из буфера. -### Необязательные параметры движка +### Необязательные параметры движка {#optional-engine-parameters} -#### `flush_time`, `flush_rows` и `flush_bytes` +#### `flush_time`, `flush_rows` и `flush_bytes` {#flush_time-flush_rows-and-flush_bytes} Условия для фонового сброса данных из буфера (отсутствие параметра или значение 0 означает отсутствие параметров `flush*`). @@ -49,15 +47,15 @@ Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_ Также, если выполнено хотя бы одно условие `flush*`, в фоновом режиме инициируется сброс. В отличие от параметров `max*`, параметры `flush*` позволяют настраивать фоновые сбросы отдельно, чтобы избежать добавления задержки для запросов `INSERT` в таблицы Buffer. -#### `min_time`, `max_time` и `flush_time` +#### `min_time`, `max_time` и `flush_time` {#min_time-max_time-and-flush_time} Условие по времени в секундах с момента первой записи в буфер. -#### `min_rows`, `max_rows` и `flush_rows` +#### `min_rows`, `max_rows` и `flush_rows` {#min_rows-max_rows-and-flush_rows} Условие по количеству строк в буфере. -#### `min_bytes`, `max_bytes` и `flush_bytes` +#### `min_bytes`, `max_bytes` и `flush_bytes` {#min_bytes-max_bytes-and-flush_bytes} Условие по количеству байт в буфере. @@ -84,7 +82,6 @@ CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 1, 10, Вы можете задать пустые строковые литералы в одинарных кавычках для имени базы данных и имени таблицы. Это указывает на отсутствие целевой таблицы. В этом случае, когда условия сброса данных выполняются, буфер просто очищается. Это может быть полезно для хранения окна данных в памяти. - При чтении из таблицы Buffer данные обрабатываются как из буфера, так и из целевой таблицы (если она существует). Обратите внимание, что таблица Buffer не поддерживает индекс. Иными словами, данные в буфере полностью сканируются, что может быть медленно для больших буферов. (Для данных в подчинённой таблице будет использоваться индекс, который она поддерживает.) diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md index f04780ecca4..883a540fbfb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md @@ -7,15 +7,11 @@ title: 'Движок таблицы Dictionary' doc_type: 'reference' --- - - -# Движок таблицы Dictionary +# Движок таблицы Dictionary {#dictionary-table-engine} Движок `Dictionary` представляет данные [словаря](../../../sql-reference/dictionaries/index.md) в виде таблицы ClickHouse. - - -## Пример +## Пример {#example} В качестве примера рассмотрим словарь `products` со следующей конфигурацией: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md index 38629ecd720..13e629e2e7b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок распределённой таблицы +# Движок распределённой таблицы {#distributed-table-engine} :::warning Распределённый движок в Cloud Чтобы создать движок распределённой таблицы в ClickHouse Cloud, можно использовать табличные функции [`remote` и `remoteSecure`](../../../sql-reference/table-functions/remote). @@ -21,7 +21,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#distributed-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] [SETTINGS name=value, ...] ``` -### Из таблицы +### Из таблицы {#distributed-from-a-table} Когда таблица `Distributed` указывает на таблицу на текущем сервере, вы можете заимствовать её схему: @@ -41,7 +41,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 ENGINE = Distributed(cluster, database, table[, sharding_key[, policy_name]]) [SETTINGS name=value, ...] ``` -### Параметры движка Distributed +### Параметры движка Distributed {#distributed-parameters} | Параметр | Описание | | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -56,7 +56,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 * настройка [distributed_foreground_insert](../../../operations/settings/settings.md#distributed_foreground_insert) * [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes) для примеров -### Настройки движка Distributed +### Настройки движка Distributed {#distributed-settings} | Параметр | Описание | Значение по умолчанию | @@ -102,7 +102,7 @@ SETTINGS Вместо имени базы данных вы можете использовать константное выражение, которое возвращает строку. Например: `currentDatabase()`. -## Кластеры +## Кластеры {#distributed-clusters} Кластеры настраиваются в [конфигурационном файле сервера](../../../operations/configuration-files.md): diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md index 05a23ce4e17..32bd946ad29 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md @@ -9,20 +9,16 @@ title: 'Движки таблиц Executable и ExecutablePool' doc_type: 'reference' --- - - -# Движки таблиц Executable и ExecutablePool +# Движки таблиц Executable и ExecutablePool {#executable-and-executablepool-table-engines} Движки таблиц `Executable` и `ExecutablePool` позволяют задать таблицу, строки которой генерируются скриптом, который вы пишете (путём вывода строк в **stdout**). Исполняемый скрипт хранится в каталоге `users_scripts` и может читать данные из любого источника. -- Таблицы `Executable`: скрипт выполняется при каждом запросе -- Таблицы `ExecutablePool`: поддерживается пул долгоживущих процессов, и для чтения процессы берутся из этого пула +* Таблицы `Executable`: скрипт выполняется при каждом запросе +* Таблицы `ExecutablePool`: поддерживается пул долгоживущих процессов, и для чтения процессы берутся из этого пула Дополнительно вы можете указать один или несколько входных запросов, результаты которых будут передаваться в **stdin** для чтения скриптом. - - -## Создание таблицы `Executable` +## Создание таблицы `Executable` {#creating-an-executable-table} Движку таблицы `Executable` требуются два параметра: имя скрипта и формат входящих данных. При необходимости можно передать один или несколько входных запросов: @@ -104,8 +100,7 @@ SELECT * FROM my_executable_table └───┴────────────┘ ``` - -## Передача результатов запроса в скрипт +## Передача результатов запроса в скрипт {#passing-query-results-to-a-script} Пользователи веб‑сайта Hacker News оставляют комментарии. В Python есть набор инструментов для обработки естественного языка (`nltk`) с `SentimentIntensityAnalyzer` для определения, являются ли комментарии положительными, отрицательными или нейтральными, — в том числе для присвоения значения от -1 (очень негативный комментарий) до 1 (очень позитивный комментарий). Давайте создадим таблицу `Executable`, которая вычисляет тональность комментариев Hacker News с помощью `nltk`. @@ -179,7 +174,6 @@ FROM sentiment Ответ будет выглядеть следующим образом: - ```response ┌───────id─┬─sentiment─┐ │ 7398199 │ 0.4404 │ @@ -205,8 +199,7 @@ FROM sentiment └──────────┴───────────┘ ``` - -## Создание таблицы `ExecutablePool` +## Создание таблицы `ExecutablePool` {#creating-an-executablepool-table} Синтаксис `ExecutablePool` похож на `Executable`, но у таблицы `ExecutablePool` есть несколько параметров, характерных именно для нее: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md index 491770e1a5f..bec15dea888 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md @@ -7,7 +7,7 @@ title: 'Внешние данные для обработки запросов' doc_type: 'reference' --- -# Внешние данные для обработки запросов +# Внешние данные для обработки запросов {#external-data-for-query-processing} ClickHouse позволяет отправлять на сервер данные, которые необходимы для обработки запроса, вместе с запросом `SELECT`. Эти данные помещаются во временную таблицу (см. раздел «Временные таблицы») и могут использоваться в запросе (например, в операторах `IN`). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md index 7295bed385e..e2fe7d77234 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Движок таблицы File +# Движок таблицы File {#file-table-engine} Движок таблицы File хранит данные в файле в одном из поддерживаемых [форматов файлов](/interfaces/formats#formats-overview) (`TabSeparated`, `Native` и т. д.). @@ -26,7 +26,7 @@ doc_type: 'reference' -## Использование на сервере ClickHouse +## Использование на сервере ClickHouse {#usage-in-clickhouse-server} ```sql File(Format) @@ -48,7 +48,7 @@ ClickHouse не позволяет указывать путь в файлово ::: -## Пример +## Пример {#example} **1.** Настройте таблицу `file_engine_table`: @@ -80,7 +80,7 @@ SELECT * FROM file_engine_table ``` -## Использование в clickhouse-local +## Использование в clickhouse-local {#usage-in-clickhouse-local} В [clickhouse-local](../../../operations/utilities/clickhouse-local.md) движок File, помимо параметра `Format`, принимает путь к файлу. Потоки ввода/вывода по умолчанию можно указывать с помощью числовых или понятных имён, таких как `0` или `stdin`, `1` или `stdout`. Можно читать и записывать сжатые файлы, исходя из дополнительного параметра движка или расширения файла (`gz`, `br` или `xz`). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md index ee7c142bd24..cc1006fcc4f 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md @@ -21,7 +21,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -57,7 +57,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `handle_error_mode` — Как обрабатывать ошибки в движке FileLog. Возможные значения: default (будет сгенерировано исключение, если не удалось разобрать сообщение), stream (сообщение об исключении и исходное сообщение будут сохранены во виртуальных столбцах `_error` и `_raw_message`). -## Описание +## Описание {#description} Поступившие записи отслеживаются автоматически, поэтому каждая запись в файле журнала учитывается только один раз. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md index 5987da1a3b8..9d9543fe694 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Движок таблицы GenerateRandom +# Движок таблицы GenerateRandom {#generaterandom-table-engine} Движок таблицы GenerateRandom генерирует случайные данные в соответствии с заданной схемой таблицы. @@ -21,7 +21,7 @@ doc_type: 'reference' -## Использование в ClickHouse Server +## Использование в ClickHouse Server {#usage-in-clickhouse-server} ```sql ENGINE = GenerateRandom([random_seed [,max_string_length [,max_array_length]]]) @@ -34,7 +34,7 @@ ENGINE = GenerateRandom([random_seed [,max_string_length [,max_array_length]]]) Он поддерживает все [типы данных](../../../sql-reference/data-types/index.md), которые могут храниться в таблице, за исключением `AggregateFunction`. -## Пример +## Пример {#example} **1.** Создайте таблицу `generate_engine_table`: 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..ec76dffe7d2 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 @@ -7,9 +7,7 @@ title: 'Специальные движки таблиц' doc_type: 'reference' --- - - -# Специальные движки таблиц +# Специальные движки таблиц {#special-table-engines} Существует три основные категории движков таблиц: @@ -26,7 +24,6 @@ doc_type: 'reference' Если вы заметили ошибку, отредактируйте YAML front matter соответствующих страниц. */ } - {/*AUTOGENERATED_START*/ } | Page | Description | diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md index 5d41830f0d9..ad165544a38 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Табличный движок Join +# Табличный движок Join {#join-table-engine} Дополнительная подготовленная структура данных для использования в операциях [JOIN](/sql-reference/statements/select/join). @@ -19,7 +19,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -115,7 +115,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## Примеры использования +## Примеры использования {#example} Создание левой таблицы: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md index 0dedd9c57b3..9dc42339bda 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# Табличный движок KeeperMap +# Табличный движок KeeperMap {#keepermap-table-engine} Этот движок позволяет использовать кластер Keeper/ZooKeeper как согласованное хранилище ключ–значение с линеаризуемыми записями и последовательно согласованными чтениями. @@ -27,7 +27,7 @@ doc_type: 'reference' где path может быть любым другим допустимым путем в ZooKeeper. -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -81,9 +81,9 @@ PRIMARY KEY key Разумеется, можно вручную выполнить `CREATE TABLE` с тем же путём на несвязанных экземплярах ClickHouse, чтобы получить тот же эффект совместного использования данных. -## Поддерживаемые операции +## Поддерживаемые операции {#supported-operations} -### Вставки +### Вставки {#inserts} Когда в `KeeperMap` вставляются новые строки, если ключ не существует, создаётся новая запись с этим ключом. Если ключ существует и настройка `keeper_map_strict_mode` имеет значение `true`, выбрасывается исключение, в противном случае значение для ключа перезаписывается. @@ -94,7 +94,7 @@ PRIMARY KEY key INSERT INTO keeper_map_table VALUES ('какой-то ключ', 1, 'значение', 3.2); ``` -### Удаления +### Удаления {#deletes} Строки можно удалять с помощью запроса `DELETE` или команды `TRUNCATE`. Если ключ существует и параметр `keeper_map_strict_mode` установлен в значение `true`, операции выборки и удаления данных завершатся успешно только в том случае, если их можно выполнить атомарно. @@ -111,7 +111,7 @@ ALTER TABLE keeper_map_table DELETE WHERE key LIKE 'some%' AND v1 > 1; TRUNCATE TABLE keeper_map_table; ``` -### Обновления +### Обновления {#updates} Значения можно изменять с помощью запроса `ALTER TABLE`. Первичный ключ изменить нельзя. Если параметр `keeper_map_strict_mode` имеет значение `true`, выборка и обновление данных выполнятся успешно только при атомарном выполнении операции. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md index dd8dc33029c..1c3c7e69810 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md @@ -11,7 +11,7 @@ doc_type: 'reference' -# Движок таблиц Memory +# Движок таблиц Memory {#memory-table-engine} :::note При использовании движка таблиц Memory в ClickHouse Cloud данные по проекту не реплицируются на все узлы (так задумано). Чтобы гарантировать, что все запросы направляются на один и тот же узел и движок Memory работает предсказуемо, вы можете: @@ -50,7 +50,7 @@ doc_type: 'reference' -## Использование +## Использование {#usage} **Инициализация настроек** @@ -67,7 +67,7 @@ ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 100 **Примечание:** Параметры ограничения `bytes` и `rows` могут быть заданы одновременно, однако будет использоваться меньшее из значений `max` и `min`. -## Примеры +## Примеры {#examples} ```sql CREATE TABLE memory (i UInt32) ENGINE = Memory SETTINGS min_bytes_to_keep = 4096, max_bytes_to_keep = 16384; diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md index ce5334d76ed..0455e83c946 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок таблицы Merge +# Движок таблицы Merge {#merge-table-engine} Движок `Merge` (не путать с `MergeTree`) сам не хранит данные, но позволяет одновременно читать из любого количества других таблиц. @@ -17,7 +17,7 @@ doc_type: 'reference' -## Создание таблицы +## Создание таблицы {#creating-a-table} ```sql CREATE TABLE ... Engine=Merge(db_name, tables_regexp) @@ -51,7 +51,7 @@ CREATE TABLE ... Engine=Merge(db_name, tables_regexp) -## Примеры +## Примеры {#examples} **Пример 1** diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md index b4ecdb6cd07..245785fc0ee 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md @@ -8,7 +8,7 @@ title: 'Движок таблицы Null' doc_type: 'reference' --- -# Движок таблицы Null +# Движок таблицы Null {#null-table-engine} При записи данных в таблицу `Null` они игнорируются. При чтении из таблицы `Null` результат будет пустым. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md index 384300df37f..0e9166dbaa5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок таблицы Set +# Движок таблицы Set {#set-table-engine} :::note В ClickHouse Cloud, если ваш сервис был создан с версией ранее 25.4, вам необходимо установить совместимость как минимум с 25.4 с помощью `SET compatibility=25.4`. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md index 9e632a8c144..0766455d5c8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Движок таблицы URL +# Движок таблицы URL {#url-table-engine} Выполняет чтение и запись данных на удалённый HTTP/HTTPS-сервер. Этот движок похож на движок [File](../../../engines/table-engines/special/file.md). @@ -51,7 +51,7 @@ doc_type: 'reference' -## Пример +## Пример {#example} **1.** Создайте таблицу `url_engine_table` на сервере: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md index 3f350814d00..e39fb505ef2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md @@ -7,6 +7,6 @@ title: 'Движок таблицы View' doc_type: 'reference' --- -# Движок таблицы View +# Движок таблицы View {#view-table-engine} Используется для реализации представлений (подробнее см. запрос `CREATE VIEW`). Он не хранит данные, а только сохраняет указанный запрос `SELECT`. При чтении из таблицы выполняется этот запрос (при этом из него удаляются все ненужные столбцы). \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/concurrency.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/concurrency.md index c03fbce81ec..0e43f40950e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/concurrency.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/concurrency.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['concurrency', 'QPS'] --- -# Поддерживает ли ClickHouse частые одновременные запросы? +# Поддерживает ли ClickHouse частые одновременные запросы? {#does-clickhouse-support-frequent-concurrent-queries} ClickHouse разработан для систем оперативной аналитики, которые могут напрямую обслуживать внешних пользователей. Он способен обрабатывать аналитические запросы с низкой задержкой (менее 10 миллисекунд) и высокой степенью параллелизма (более 10 000 запросов в секунду) на базах данных петабайтного масштаба, объединяя исторические данные и вставки в реальном времени. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/cost-based.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/cost-based.md index 1d175685621..9c423be122b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/cost-based.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/cost-based.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['CBE', 'optimizer'] --- -# Есть ли у ClickHouse стоимостной оптимизатор? +# Есть ли у ClickHouse стоимостной оптимизатор? {#does-clickhouse-have-a-cost-based-optimizer} В ClickHouse есть отдельные механизмы стоимостной оптимизации, например, порядок чтения столбцов определяется оценочной стоимостью чтения сжатых диапазонов данных с диска. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/datalake.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/datalake.md index f6d59ecb2b7..e1baba198e2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/datalake.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['озеро данных', 'lakehouse'] --- -# Поддерживает ли ClickHouse озёра данных? +# Поддерживает ли ClickHouse озёра данных? {#does-clickhouse-support-data-lakes} ClickHouse поддерживает озёра данных (Data Lakes), включая Iceberg, Delta Lake, Apache Hudi, Apache Paimon, Hive. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/dependencies.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/dependencies.md index da880aed909..1b42e44c47c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/dependencies.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/dependencies.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['зависимости', 'сторонние'] --- -# Какие сторонние зависимости нужны для запуска ClickHouse? +# Какие сторонние зависимости нужны для запуска ClickHouse? {#what-are-the-3rd-party-dependencies-for-running-clickhouse} ClickHouse не имеет никаких runtime-зависимостей. Он распространяется как один исполняемый бинарный файл, который является полностью самодостаточным. Это приложение предоставляет всю функциональность кластера, обрабатывает запросы, работает как рабочий узел кластера, как система координации, реализующая алгоритм консенсуса RAFT, а также как клиент или локальный движок запросов. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md index b6eea1eebba..ee93d03b28a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['distributed', 'join'] --- -# Поддерживает ли ClickHouse распределённый JOIN? +# Поддерживает ли ClickHouse распределённый JOIN? {#does-clickhouse-support-distributed-join} ClickHouse поддерживает распределённый JOIN на кластере. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/federated.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/federated.md index e64fa273549..42170743872 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/federated.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/federated.md @@ -8,22 +8,22 @@ doc_type: 'reference' keywords: ['federated', 'hybrid', 'postgres', 'mysql', 'sqlite', 'odbc', 'jdbc'] --- -# Поддерживает ли ClickHouse федеративные запросы? +# Поддерживает ли ClickHouse федеративные запросы? {#does-clickhouse-support-federated-queries} ClickHouse имеет наиболее широкую поддержку федеративных запросов и гибридного выполнения запросов среди аналитических баз данных. Он поддерживает выполнение запросов к внешним базам данных: -- PostgreSQL -- MySQL -- MongoDB -- Redis -- любые источники данных через ODBC -- любые источники данных через JDBC -- любые источники данных Arrow Flight -- потоковые источники данных, такие как Kafka и RabbitMQ -- Data Lake‑хранилища, такие как Iceberg, Delta Lake, Apache Hudi, Apache Paimon -- внешние файлы, расположенные в общих системах хранения, таких как AWS S3, GCS, Minio, Cloudflare R2, Azure Blob Storage, Alicloud OSS, Tencent COS, а также в локальном хранилище, с широким набором форматов данных +* PostgreSQL +* MySQL +* MongoDB +* Redis +* любые источники данных через ODBC +* любые источники данных через JDBC +* любые источники данных Arrow Flight +* потоковые источники данных, такие как Kafka и RabbitMQ +* Data Lake‑хранилища, такие как Iceberg, Delta Lake, Apache Hudi, Apache Paimon +* внешние файлы, расположенные в общих системах хранения, таких как AWS S3, GCS, Minio, Cloudflare R2, Azure Blob Storage, Alicloud OSS, Tencent COS, а также в локальном хранилище, с широким набором форматов данных ClickHouse может объединять несколько разнородных источников данных в одном запросе. Также он предоставляет возможность гибридного выполнения запросов, комбинируя локальные ресурсы и передавая часть запроса на удалённые машины. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/index.md index de43f0aa585..146b0fea535 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/index.md @@ -8,18 +8,18 @@ description: 'Страница-индекс со списком общих во doc_type: 'landing-page' --- -# Общие вопросы о ClickHouse +# Общие вопросы о ClickHouse {#general-questions-about-clickhouse} -- [Что такое ClickHouse?](../../intro.md) -- [Почему ClickHouse такой быстрый?](../../concepts/why-clickhouse-is-so-fast.mdx) -- [Кто использует ClickHouse?](../../faq/general/who-is-using-clickhouse.md) -- [Что означает название «ClickHouse»?](../../faq/general/dbms-naming.md) -- [Что означает «Не тормозит»?](../../faq/general/ne-tormozit.md) -- [Что такое OLAP?](../../faq/general/olap.md) -- [Что такое колоночная база данных?](../../faq/general/columnar-database.md) -- [Как выбрать первичный ключ?](../../guides/best-practices/sparse-primary-indexes.md) -- [Почему не использовать что-то вроде MapReduce?](../../faq/general/mapreduce.md) -- [Как внести вклад в разработку ClickHouse?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) +* [Что такое ClickHouse?](../../intro.md) +* [Почему ClickHouse такой быстрый?](../../concepts/why-clickhouse-is-so-fast.mdx) +* [Кто использует ClickHouse?](../../faq/general/who-is-using-clickhouse.md) +* [Что означает название «ClickHouse»?](../../faq/general/dbms-naming.md) +* [Что означает «Не тормозит»?](../../faq/general/ne-tormozit.md) +* [Что такое OLAP?](../../faq/general/olap.md) +* [Что такое колоночная база данных?](../../faq/general/columnar-database.md) +* [Как выбрать первичный ключ?](../../guides/best-practices/sparse-primary-indexes.md) +* [Почему не использовать что-то вроде MapReduce?](../../faq/general/mapreduce.md) +* [Как внести вклад в разработку ClickHouse?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) :::info Не нашли то, что искали? Ознакомьтесь с нашей [Базой знаний](/knowledgebase/), а также просмотрите множество полезных статей в этой документации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/sql.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/sql.md index 3eaec0c1439..aa08ff2637a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/sql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/sql.md @@ -8,46 +8,46 @@ doc_type: 'reference' keywords: ['синтаксис SQL', 'ANSI SQL'] --- -# Какой синтаксис SQL поддерживает ClickHouse? +# Какой синтаксис SQL поддерживает ClickHouse? {#what-sql-syntax-does-clickhouse-support} ClickHouse полностью поддерживает синтаксис SQL, включая такие возможности, как: -- SQL/JSON и тип данных JSON (SQL-2023) -- оконные функции (SQL-2003) -- общие табличные выражения (CTE) и рекурсивные запросы (SQL-1999) -- ROLLUP, CUBE и GROUPING SETS (SQL-1999) -- полная поддержка RBAC (SQL-1999) -- коррелированные подзапросы (SQL-1992); +* SQL/JSON и тип данных JSON (SQL-2023) +* оконные функции (SQL-2003) +* общие табличные выражения (CTE) и рекурсивные запросы (SQL-1999) +* ROLLUP, CUBE и GROUPING SETS (SQL-1999) +* полная поддержка RBAC (SQL-1999) +* коррелированные подзапросы (SQL-1992); Поддержка подтверждена бенчмарками TPC-H и TPC-DS, а также SQLTest. ClickHouse внедрил многие функции до того, как они были стандартизованы ISO/IEC, в том числе: -- условные агрегатные функции -- агрегатные функции `any` -- `least` и `greatest` -- `GROUP BY ALL` -- расширенное использование псевдонимов -- символ подчёркивания в числовых литералах +* условные агрегатные функции +* агрегатные функции `any` +* `least` и `greatest` +* `GROUP BY ALL` +* расширенное использование псевдонимов +* символ подчёркивания в числовых литералах ClickHouse расширяет SQL, добавляя важные улучшения, повышающие удобство работы: -- неограниченное использование псевдонимов -- псевдонимы внутри предложения WITH -- комбинаторы агрегатных функций -- параметризованные агрегатные функции -- приближённые агрегатные функции -- встроенные и большие целочисленные типы данных, десятичные числа повышенной точности -- функции высшего порядка для обработки массивов -- предложение ARRAY JOIN и функция arrayJoin -- агрегирование массивов -- предложение LIMIT BY -- GROUP BY WITH TOTALS -- AS OF JOIN -- ANY/ALL JOIN -- естественный синтаксис для JSON -- завершающая запятая в списке столбцов -- порядок предложений FROM ... SELECT -- типобезопасные параметры запросов и параметризованные представления +* неограниченное использование псевдонимов +* псевдонимы внутри предложения WITH +* комбинаторы агрегатных функций +* параметризованные агрегатные функции +* приближённые агрегатные функции +* встроенные и большие целочисленные типы данных, десятичные числа повышенной точности +* функции высшего порядка для обработки массивов +* предложение ARRAY JOIN и функция arrayJoin +* агрегирование массивов +* предложение LIMIT BY +* GROUP BY WITH TOTALS +* AS OF JOIN +* ANY/ALL JOIN +* естественный синтаксис для JSON +* завершающая запятая в списке столбцов +* порядок предложений FROM ... SELECT +* типобезопасные параметры запросов и параметризованные представления Некоторые из них потенциально могут быть включены в будущие стандарты SQL, при этом уже доступны пользователям ClickHouse. \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/updates.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/updates.md index 0bc89452d86..f15ed8ece48 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/updates.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/general/updates.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['обновления', 'реальное время'] --- -# Поддерживает ли ClickHouse обновления в режиме реального времени? +# Поддерживает ли ClickHouse обновления в режиме реального времени? {#does-clickhouse-support-real-time-updates} ClickHouse поддерживает оператор UPDATE и способен выполнять обновления в реальном времени с той же скоростью, с какой выполняет операции INSERT. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/index.md index ec26f9bd2c5..f9fc554fb47 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/index.md @@ -8,15 +8,15 @@ description: 'Главная страница со списком вопросо doc_type: 'landing-page' --- -# Вопросы об интеграции ClickHouse с другими системами +# Вопросы об интеграции ClickHouse с другими системами {#questions-about-integrating-clickhouse-and-other-systems} -- [Как экспортировать данные из ClickHouse в файл?](https://clickhouse.com/docs/knowledgebase/file-export) -- [Как импортировать JSON в ClickHouse?](/integrations/data-ingestion/data-formats/json/intro.md) -- [Как подключить Kafka к ClickHouse?](/integrations/data-ingestion/kafka/index.md) -- [Могу ли я подключить своё Java‑приложение к ClickHouse?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) -- [Может ли ClickHouse читать таблицы из MySQL?](/integrations/mysql) -- [Может ли ClickHouse читать таблицы из PostgreSQL](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) -- [Что делать, если возникают проблемы с кодировками при подключении к Oracle через ODBC?](/faq/integration/oracle-odbc.md) +* [Как экспортировать данные из ClickHouse в файл?](https://clickhouse.com/docs/knowledgebase/file-export) +* [Как импортировать JSON в ClickHouse?](/integrations/data-ingestion/data-formats/json/intro.md) +* [Как подключить Kafka к ClickHouse?](/integrations/data-ingestion/kafka/index.md) +* [Могу ли я подключить своё Java‑приложение к ClickHouse?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) +* [Может ли ClickHouse читать таблицы из MySQL?](/integrations/mysql) +* [Может ли ClickHouse читать таблицы из PostgreSQL](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) +* [Что делать, если возникают проблемы с кодировками при подключении к Oracle через ODBC?](/faq/integration/oracle-odbc.md) :::info Не нашли то, что искали? Ознакомьтесь с нашей [Базой знаний](/knowledgebase/) и также просмотрите множество полезных статей в документации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/json-import.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/json-import.md index ed9f79a092e..81eeae88c47 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/json-import.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/json-import.md @@ -16,7 +16,7 @@ ClickHouse поддерживает широкий спектр [формато -## Примеры +## Примеры {#examples} С помощью [HTTP-интерфейса](../../interfaces/http.md): diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md index 7ec753572ed..2ddcfdbf4e6 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md @@ -8,9 +8,7 @@ doc_type: 'guide' keywords: ['oracle', 'odbc', 'encoding', 'integration', 'external dictionary'] --- - - -# Что делать, если у меня возникают проблемы с кодировками при работе с Oracle через ODBC? +# Что делать, если у меня возникают проблемы с кодировками при работе с Oracle через ODBC? {#oracle-odbc-encodings} Если вы используете Oracle как источник внешних словарей ClickHouse через драйвер Oracle ODBC, необходимо установить корректное значение переменной окружения `NLS_LANG` в файле `/etc/default/clickhouse`. Дополнительную информацию см. в [Oracle NLS_LANG FAQ](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md index 23d95d0b2b4..8067e2b45d9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md @@ -30,7 +30,7 @@ TTL также может использоваться не только для -## DELETE FROM +## DELETE FROM {#delete-from} [DELETE FROM](/sql-reference/statements/delete.md) позволяет выполнять стандартные запросы DELETE в ClickHouse. Строки, отобранные условием фильтрации, помечаются как удалённые и не возвращаются в будущих результатах запросов. Очистка строк происходит асинхронно. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/index.md index c87e91e99be..88853edcfc4 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/operations/index.md @@ -8,16 +8,16 @@ doc_type: 'landing-page' keywords: ['эксплуатация', 'администрирование', 'развертывание', 'управление кластерами', 'частые вопросы'] --- -# Вопросы по эксплуатации серверов и кластеров ClickHouse +# Вопросы по эксплуатации серверов и кластеров ClickHouse {#question-about-operating-clickhouse-servers-and-clusters} -- [Какую версию ClickHouse использовать в продакшене?](/faq/operations/production.md) -- [Можно ли развернуть ClickHouse с раздельными хранилищем и вычислительными ресурсами?](/faq/operations/separate_storage.md) -- [Можно ли удалять старые данные из таблицы ClickHouse?](/faq/operations/delete-old-data.md) -- [Как настроить ClickHouse Keeper?](/guides/sre/keeper/index.md) -- [Может ли ClickHouse интегрироваться с LDAP?](/guides/sre/user-management/configuring-ldap.md) -- [Как настроить пользователей, роли и права доступа в ClickHouse?](/guides/sre/user-management/index.md) -- [Можно ли обновлять или удалять строки в ClickHouse?](/guides/starter_guides/mutations.md) -- [Поддерживает ли ClickHouse мульти-региональную (multi-region) репликацию?](/faq/operations/multi-region-replication.md) +* [Какую версию ClickHouse использовать в продакшене?](/faq/operations/production.md) +* [Можно ли развернуть ClickHouse с раздельными хранилищем и вычислительными ресурсами?](/faq/operations/separate_storage.md) +* [Можно ли удалять старые данные из таблицы ClickHouse?](/faq/operations/delete-old-data.md) +* [Как настроить ClickHouse Keeper?](/guides/sre/keeper/index.md) +* [Может ли ClickHouse интегрироваться с LDAP?](/guides/sre/user-management/configuring-ldap.md) +* [Как настроить пользователей, роли и права доступа в ClickHouse?](/guides/sre/user-management/index.md) +* [Можно ли обновлять или удалять строки в ClickHouse?](/guides/starter_guides/mutations.md) +* [Поддерживает ли ClickHouse мульти-региональную (multi-region) репликацию?](/faq/operations/multi-region-replication.md) :::info Не нашли то, что искали? Ознакомьтесь с нашей [Базой знаний](/knowledgebase/) и просмотрите множество полезных статей в документации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/faq/use-cases/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/faq/use-cases/index.md index bed752b2c7b..2f0d96db811 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/faq/use-cases/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/faq/use-cases/index.md @@ -8,10 +8,10 @@ keywords: ['варианты использования ClickHouse', 'база doc_type: 'landing-page' --- -# Вопросы по использованию ClickHouse +# Вопросы по использованию ClickHouse {#questions-about-clickhouse-use-cases} -- [Могу ли я использовать ClickHouse в качестве базы данных временных рядов?](/knowledgebase/time-series) -- [Могу ли я использовать ClickHouse в качестве хранилища ключ-значение?](/knowledgebase/key-value) +* [Могу ли я использовать ClickHouse в качестве базы данных временных рядов?](/knowledgebase/time-series) +* [Могу ли я использовать ClickHouse в качестве хранилища ключ-значение?](/knowledgebase/key-value) :::info Не нашли то, что искали? Ознакомьтесь с нашей [Базой знаний](/knowledgebase/), а также с многочисленными полезными статьями в этой документации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md index 60073ad20dd..e55fb10b357 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md @@ -11,10 +11,10 @@ keywords: ['отзывы Amazon', 'датасет с отзывами покуп :::note Приведённые ниже запросы выполнялись на **Production**-инстансе ClickHouse Cloud. Для получения дополнительной информации см. раздел -["Playground specifications"](/getting-started/playground#specifications). +["Playground specifications"](/getting-started/playground#specifications). ::: -## Загрузка набора данных +## Загрузка набора данных {#loading-the-dataset} 1. Не загружая данные в ClickHouse, мы можем обращаться к ним напрямую. Давайте выберем несколько строк, чтобы посмотреть, как они выглядят: @@ -122,7 +122,6 @@ FROM s3Cluster('default', 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_*.snappy.parquet') ``` - :::tip В ClickHouse Cloud имя кластера — `default`. Замените `default` на имя вашего кластера... или используйте табличную функцию `s3` (вместо `s3Cluster`), если кластера у вас нет. ::: @@ -152,8 +151,7 @@ ORDER BY size DESC Объём исходных данных составлял около 70 ГБ, но после сжатия в ClickHouse они занимают около 30 ГБ. - -## Примеры запросов +## Примеры запросов {#example-queries} 7. Давайте выполним несколько запросов. Ниже приведены 10 наиболее полезных отзывов в этом наборе данных: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md index 6be9205b8b6..e890b6540d1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md @@ -7,7 +7,7 @@ title: 'Анонимизированная веб-аналитика' doc_type: 'guide' --- -# Обезличенные данные веб-аналитики +# Обезличенные данные веб-аналитики {#anonymized-web-analytics-data} Этот набор данных состоит из двух таблиц, содержащих обезличенные данные веб-аналитики с запросами (`hits_v1`) и визитами (`visits_v1`). @@ -15,17 +15,17 @@ doc_type: 'guide' ## Скачать данные и выполнить их приём {#download-and-ingest-the-data} -### Скачайте сжатый TSV‑файл hits +### Скачайте сжатый TSV‑файл hits {#download-the-hits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv -# Проверьте контрольную сумму +# Проверьте контрольную сумму {#validate-the-checksum} md5sum hits_v1.tsv -# Контрольная сумма должна быть: f3631b6295bf06989c1437491f7592cb +# Контрольная сумма должна быть: f3631b6295bf06989c1437491f7592cb {#checksum-should-be-equal-to-f3631b6295bf06989c1437491f7592cb} ``` -### Создание базы данных и таблицы +### Создание базы данных и таблицы {#create-the-database-and-table} ```bash clickhouse-client --query "CREATE DATABASE IF NOT EXISTS datasets" @@ -45,7 +45,7 @@ clickhouse-client --query="CREATE TABLE default.hits_100m_obfuscated (WatchID UI ``` -### Импортируйте данные таблицы hits +### Импортируйте данные таблицы hits {#import-the-hits-data} ```bash cat hits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.hits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -62,13 +62,13 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1" ``` -### Скачайте сжатый TSV‑файл visits +### Скачайте сжатый TSV‑файл visits {#download-the-visits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv -# Проверьте контрольную сумму +# Проверьте контрольную сумму {#validate-the-checksum} md5sum visits_v1.tsv -# Контрольная сумма должна быть: 6dafe1a0f24e59e3fc2d0fed85601de6 +# Контрольная сумма должна быть: 6dafe1a0f24e59e3fc2d0fed85601de6 {#checksum-should-be-equal-to-6dafe1a0f24e59e3fc2d0fed85601de6} ``` @@ -78,7 +78,7 @@ md5sum visits_v1.tsv clickhouse-client --query "CREATE TABLE datasets.visits_v1 ( 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 Nested(ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID 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 Nested(ID Int8, SearchEngineID UInt16, AdvEngineID UInt8, PlaceID UInt16, SocialSourceNetworkID UInt8, Domain String, SearchPhrase String, SocialSourcePage 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 Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), Market Nested(Type UInt8, GoalID UInt32, OrderID String, OrderPrice Int64, PP UInt32, DirectPlaceID UInt32, DirectOrderID UInt32, DirectBannerID UInt32, GoodID String, GoodName String, GoodQuantity Int32, GoodPrice Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192" ``` -### Импортируйте данные о посещениях +### Импортируйте данные о посещениях {#import-the-visits-data} ```bash cat visits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.visits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -95,7 +95,7 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1" ``` -## Пример JOIN +## Пример JOIN {#an-example-join} Наборы данных hits и visits используются в тестовых процедурах ClickHouse; это один из запросов из набора тестов. Остальные diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md index ccf41157c95..8801c597b7d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md @@ -94,8 +94,7 @@ clickhouse-client --query "INSERT INTO mgbench.logs2 FORMAT CSVWithNames" < mgbe clickhouse-client --query "INSERT INTO mgbench.logs3 FORMAT CSVWithNames" < mgbench3.csv ``` - -## Выполните тестовые запросы +## Выполните тестовые запросы {#run-benchmark-queries} ```sql USE mgbench; @@ -209,7 +208,6 @@ ORDER BY machine_name, dt; ``` - ```sql -- Q1.6: Каков общий почасовой объём сетевого трафика по всем файловым серверам? diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md index 4fa7a616374..b1625e0f6fb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md @@ -8,15 +8,15 @@ keywords: ['данные о сотовых вышках', 'геоданные', doc_type: 'guide' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import ActionsMenu from '@site/docs/_snippets/_service_actions_menu.md'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; -import SupersetDocker from '@site/docs/_snippets/_add_superset_detail.md'; +import ActionsMenu from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_service_actions_menu.md'; +import SQLConsoleDetail from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; +import SupersetDocker from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_add_superset_detail.md'; import cloud_load_data_sample from '@site/static/images/_snippets/cloud-load-data-sample.png'; import cell_towers_1 from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' import add_a_database from '@site/static/images/getting-started/example-datasets/superset-add.png' @@ -30,7 +30,6 @@ import superset_radio_umts from '@site/static/images/getting-started/example-dat import superset_umts_netherlands from '@site/static/images/getting-started/example-datasets/superset-umts-netherlands.png' import superset_cell_tower_dashboard from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' - ## Цель {#goal} В этом руководстве вы узнаете, как: @@ -125,7 +124,7 @@ INSERT INTO cell_towers SELECT * FROM s3('https://datasets-documentation.s3.amaz -## Выполните несколько примеров запросов +## Выполните несколько примеров запросов {#examples} 1. Количество сотовых вышек по типу: @@ -172,7 +171,6 @@ SELECT mcc, count() FROM cell_towers GROUP BY mcc ORDER BY count() DESC LIMIT 10 Вы можете создать в ClickHouse [словарь (Dictionary)](../../sql-reference/dictionaries/index.md) для расшифровки этих значений. - ## Сценарий использования: использование геоданных {#use-case} Использование функции [`pointInPolygon`](/sql-reference/functions/geo/coordinates.md/#pointinpolygon). @@ -267,7 +265,6 @@ WHERE pointInPolygon((lon, lat), (SELECT * FROM moscow)) Получено 1 строк. Затрачено: 0.067 сек. Обработано 43.28 млн строк, 692.42 МБ (645.83 млн строк/сек., 10.33 ГБ/сек.) ``` - ## Обзор схемы {#review-of-the-schema} Прежде чем создавать визуализации в Superset, ознакомьтесь со столбцами, которые вы будете использовать. Этот набор данных в первую очередь содержит сведения о местоположении (долгота и широта) и типах радиотехнологий на базовых станциях мобильной связи по всему миру. Описание столбцов можно найти на [форуме сообщества](https://community.opencellid.org/t/documenting-the-columns-in-the-downloadable-cells-database-csv/186). Столбцы, используемые в визуализациях, которые вы будете строить, описаны ниже. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md index d9ac9090303..3a53af2496d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md @@ -15,7 +15,7 @@ doc_type: 'guide' Набор данных содержит 26 файлов в формате `Parquet`, размещённых на [huggingface.co](https://huggingface.co/api/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M/parquet/default/train/). Файлы называются `0.parquet`, `1.parquet`, ..., `25.parquet`. Чтобы просмотреть несколько строк этого набора данных в качестве примера, перейдите на эту [страницу Hugging Face](https://huggingface.co/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M). -## Создание таблицы +## Создание таблицы {#create-table} Создайте таблицу `dbpedia` для хранения идентификатора статьи, заголовка, текста и векторного представления (эмбеддинга): @@ -31,7 +31,7 @@ CREATE TABLE dbpedia ``` -## Загрузка таблицы +## Загрузка таблицы {#load-table} Чтобы загрузить набор данных из всех файлов Parquet, выполните следующую команду в оболочке: @@ -74,7 +74,7 @@ FROM dbpedia _Ближайшими соседями_ являются документы, изображения или другой контент, релевантный запросу пользователя. Извлечённые результаты являются ключевыми входными данными для Retrieval Augmented Generation (RAG) в приложениях генеративного ИИ. -## Выполнить векторный поиск ближайших соседей методом полного перебора +## Выполнить векторный поиск ближайших соседей методом полного перебора {#run-a-brute-force-vector-similarity-search} Поиск KNN (k ближайших соседей) или поиск методом полного перебора предполагает вычисление расстояния от каждого вектора в наборе данных до вектора-запроса (эмбеддинга), а затем упорядочивание этих расстояний для получения ближайших соседей. Для набора данных `dbpedia` @@ -119,7 +119,7 @@ LIMIT 20 Также зафиксируйте задержку выполнения запроса при холодном файловом кэше ОС и с `max_threads=1`, чтобы оценить реальное использование вычислительных ресурсов и пропускную способность подсистемы хранения (экстраполируйте это на производственный набор данных с миллионами векторов!). -## Создание индекса векторного сходства +## Создание индекса векторного сходства {#build-vector-similarity-index} Выполните следующий SQL-запрос, чтобы определить и построить индекс векторного сходства для столбца `vector`: @@ -134,7 +134,7 @@ ALTER TABLE dbpedia MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2; Построение и сохранение индекса может занять несколько минут в зависимости от количества доступных ядер CPU и пропускной способности подсистемы хранения. -## Выполнение ANN-поиска +## Выполнение ANN-поиска {#perform-ann-search} *Approximate Nearest Neighbours* (ANN, приближённые ближайшие соседи) — это группа техник (например, специальные структуры данных, такие как графы и случайные леса), которые позволяют выполнять поиск значительно быстрее, чем точный векторный поиск. Точность результатов, как правило, «достаточно хороша» для практического применения. Во многих приближённых техниках предусмотрены параметры для настройки компромисса между точностью результатов и временем поиска. @@ -181,7 +181,7 @@ LIMIT 20 ``` -## Генерация эмбеддингов для поискового запроса +## Генерация эмбеддингов для поискового запроса {#generating-embeddings-for-search-query} Запросы поиска по сходству, рассмотренные до этого момента, используют один из существующих векторов в таблице `dbpedia` в качестве поискового вектора. В реальных приложениях поисковый вектор необходимо @@ -230,7 +230,7 @@ while True: ``` -## Демонстрационное приложение «Вопрос-ответ» +## Демонстрационное приложение «Вопрос-ответ» {#q-and-a-demo-application} Приведённые выше примеры демонстрировали семантический поиск и извлечение документов с использованием ClickHouse. Далее представлено очень простое, но обладающее высоким потенциалом демонстрационное приложение генеративного ИИ. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md index 9f0aad188f2..6dadef5c183 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md @@ -24,7 +24,7 @@ import visualization_4 from '@site/static/images/getting-started/example-dataset таких как магазины, рестораны, парки, игровые площадки и памятники. Он также включает дополнительные метаданные об этих местах, такие как категории и данные из социальных сетей. -## Исследование данных +## Исследование данных {#data-exploration} Для исследования данных мы будем использовать [`clickhouse-local`](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local) — небольшую утилиту командной строки, которая предоставляет полноценный движок ClickHouse. Также вы можете использовать @@ -148,7 +148,7 @@ DESCRIBE s3('s3://fsq-os-places-us-east-1/release/dt=2025-04-08/places/parquet/* ``` -## Загрузка данных в ClickHouse +## Загрузка данных в ClickHouse {#loading-the-data} Если вы хотите сохранять данные на диске, вы можете использовать `clickhouse-server` или ClickHouse Cloud. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md index 78fb0c5d90e..4371f6f28d3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md @@ -29,7 +29,7 @@ import superset_authors_matrix_v2 from '@site/static/images/getting-started/exam * `line_changes` — 2.7G — 7,535,157 строк -## Генерация данных +## Генерация данных {#generating-the-data} Этот шаг необязателен. Мы свободно распространяем эти данные — см. раздел [Downloading and inserting the data](#downloading-and-inserting-the-data). @@ -73,7 +73,7 @@ CREATE TABLE git.commits * Linux — `~/clickhouse git-import` — 160 минут -## Загрузка и вставка данных +## Загрузка и вставка данных {#downloading-and-inserting-the-data} Следующие данные можно использовать для воспроизведения рабочего окружения. Также этот набор данных доступен на play.clickhouse.com — подробности см. в разделе [Queries](#queries). @@ -220,7 +220,7 @@ FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/clickhou Этот набор данных доступен на [play.clickhouse.com](https://sql.clickhouse.com?query_id=DCQPNPAIMAQXRLHYURLKVJ) в базе данных `git_clickhouse`. Для всех запросов мы предоставляем ссылку на эту среду, при необходимости подставляя соответствующее имя базы данных. Обратите внимание, что результаты в play могут отличаться от представленных здесь из‑за различий во времени сбора данных. -### История одного файла +### История одного файла {#history-of-a-single-file} Самый простой из запросов. Здесь мы просматриваем все сообщения коммитов для `StorageReplicatedMergeTree.cpp`. Поскольку они, вероятно, более интересны, мы сортируем их по дате, начиная с самых свежих сообщений. @@ -296,7 +296,7 @@ LIMIT 10 Обратите внимание, что существует более сложный вариант этого запроса, позволяющий получить [построчную историю коммитов файла](#line-by-line-commit-history-of-a-file) с учётом переименований. -### Найти текущие активные файлы +### Найти текущие активные файлы {#find-the-current-active-files} Это важно для последующего анализа, когда нам нужно учитывать только текущие файлы в репозитории. Мы определяем этот набор как файлы, которые не были переименованы или удалены (а затем заново добавлены/переименованы). @@ -428,7 +428,7 @@ git ls-files | grep -v -E 'generated\.cpp|^(contrib|docs?|website|libs/(libcityh Эти различия не должны существенно повлиять на наш анализ. **Будем признательны за улучшенные версии этого запроса**. -### Список файлов с наибольшим числом изменений +### Список файлов с наибольшим числом изменений {#list-files-with-most-modifications} Если ограничиться текущими файлами, считаем числом изменений сумму удалений и добавлений. @@ -484,7 +484,7 @@ LIMIT 10 ``` -### В какой день недели обычно совершаются коммиты? +### В какой день недели обычно совершаются коммиты? {#what-day-of-the-week-do-commits-usually-occur} [play](https://sql.clickhouse.com?query_id=GED2STFSYJDRAA59H8RLIV) @@ -510,7 +510,7 @@ GROUP BY dayOfWeek(time) AS day_of_week Это вполне логично: по пятницам наблюдается небольшое снижение продуктивности. Здорово видеть, что люди коммитят код по выходным! Огромное спасибо нашим контрибьюторам! -### История подкаталога/файла — количество строк, коммитов и контрибьюторов в динамике +### История подкаталога/файла — количество строк, коммитов и контрибьюторов в динамике {#history-of-subdirectoryfile---number-of-lines-commits-and-contributors-over-time} Это приведёт к очень большому результату запроса, который невозможно разумно отобразить или визуализировать без фильтрации. Поэтому в следующем примере мы позволяем отфильтровать данные по файлу или подкаталогу. Здесь мы группируем по неделям с помощью функции `toStartOfWeek` — при необходимости адаптируйте под свои задачи. @@ -555,7 +555,7 @@ LIMIT 10 For commits and authors -### Вывести список файлов с максимальным числом авторов +### Вывести список файлов с максимальным числом авторов {#list-files-with-maximum-number-of-authors} Ограничить выборку только текущими файлами. @@ -611,7 +611,7 @@ LIMIT 10 ``` -### Самые старые строки кода в репозитории +### Самые старые строки кода в репозитории {#oldest-lines-of-code-in-the-repository} Только по текущим файлам. @@ -669,7 +669,7 @@ LIMIT 10 ``` -### Файлы с самой длинной историей +### Файлы с самой длинной историей {#files-with-longest-history} Только текущие файлы. @@ -728,7 +728,7 @@ LIMIT 10 Наша основная структура данных MergeTree, разумеется, постоянно развивается и имеет долгую историю доработок! -### Распределение вклада контрибьюторов между документацией и кодом в течение месяца +### Распределение вклада контрибьюторов между документацией и кодом в течение месяца {#distribution-of-contributors-with-respect-to-docs-and-code-over-the-month} **Во время сбора данных изменения в папке `docs/` были исключены из анализа из‑за очень запутанной истории коммитов. Поэтому результаты этого запроса не являются точными.** @@ -792,7 +792,7 @@ FROM Возможно, чуть больше ближе к концу месяца, но в целом распределение остаётся достаточно равномерным. Однако на эти данные нельзя полностью полагаться из‑за фильтрации фильтром docs при вставке. -### Авторы с наиболее разнообразным вкладом +### Авторы с наиболее разнообразным вкладом {#authors-with-the-most-diverse-impact} Под разнообразием вклада здесь мы понимаем количество уникальных файлов, в которые автор вносил изменения. @@ -870,7 +870,7 @@ LIMIT 10 ``` -### Избранные файлы автора +### Избранные файлы автора {#favorite-files-for-an-author} Здесь мы выбираем нашего основателя, [Алексея Миловидова](https://github.com/alexey-milovidov), и ограничиваем анализ только текущими файлами. @@ -957,7 +957,7 @@ LIMIT 10 Это, возможно, лучше отражает его сферы интересов. -### Самые большие файлы с наименьшим числом авторов +### Самые большие файлы с наименьшим числом авторов {#largest-files-with-lowest-number-of-authors} Для этого сначала нужно определить самые большие файлы. Оценивать их с помощью полного восстановления каждого файла по всей истории коммитов — слишком затратно! @@ -1130,7 +1130,7 @@ LIMIT 10 ``` -### Распределение коммитов и строк кода по времени: по дням недели, по авторам, для отдельных поддиректорий +### Распределение коммитов и строк кода по времени: по дням недели, по авторам, для отдельных поддиректорий {#commits-and-lines-of-code-distribution-by-time-by-weekday-by-author-for-specific-subdirectories} Мы рассматриваем это как количество добавленных и удалённых строк по дням недели. В данном случае мы сосредотачиваемся на [директории Functions](https://github.com/ClickHouse/ClickHouse/tree/master/src/Functions) @@ -1258,7 +1258,7 @@ FROM ``` -### Матрица авторов, показывающая, какие из них склонны переписывать код других авторов +### Матрица авторов, показывающая, какие из них склонны переписывать код других авторов {#matrix-of-authors-that-shows-what-authors-tends-to-rewrite-another-authors-code} `sign = -1` указывает на удаление кода. Мы не учитываем знаки препинания и вставку пустых строк. @@ -1313,7 +1313,7 @@ LIMIT 100 Superset матрица авторов v2 -### Кто делает наибольшую долю коммитов в каждый день недели? +### Кто делает наибольшую долю коммитов в каждый день недели? {#who-is-the-highest-percentage-contributor-per-day-of-week} Если смотреть только на количество коммитов: @@ -1514,7 +1514,7 @@ LIMIT 5 BY root ``` -### Какой процент кода автора был удалён другими авторами? +### Какой процент кода автора был удалён другими авторами? {#what-percentage-of-code-for-an-author-has-been-removed-by-other-authors} Для ответа на этот вопрос нам нужно количество строк, написанных автором, разделить на общее количество его строк, которые были удалены другим участником. @@ -1565,7 +1565,7 @@ LIMIT 10 ``` -### Список файлов, которые переписывались чаще всего? +### Список файлов, которые переписывались чаще всего? {#list-files-that-were-rewritten-most-number-of-times} Самый простой способ ответить на этот вопрос — просто посчитать максимальное количество изменений строк для каждого пути (ограничившись текущими файлами), например: @@ -1708,7 +1708,7 @@ LIMIT 10 ``` -### В какой день недели у кода наибольший шанс остаться в репозитории? +### В какой день недели у кода наибольший шанс остаться в репозитории? {#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository} Для этого нам нужно однозначно идентифицировать строку кода. Мы делаем это (так как одна и та же строка может встречаться в файле несколько раз) с помощью пути и содержимого строки. @@ -1771,7 +1771,7 @@ GROUP BY dayOfWeek(added_day) AS day_of_week_added ``` -### Файлы, отсортированные по среднему возрасту кода +### Файлы, отсортированные по среднему возрасту кода {#files-sorted-by-average-code-age} Этот запрос использует тот же принцип, что и [В какой день недели у кода наибольший шанс остаться в репозитории](#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository): мы стремимся однозначно идентифицировать строку кода по пути и её содержимому. Это позволяет определить интервал между моментом, когда строка была добавлена, и моментом, когда она была удалена. При этом мы ограничиваемся текущими файлами и актуальным кодом и усредняем время для каждого файла по всем строкам. @@ -1862,7 +1862,7 @@ LIMIT 10 ``` -### Кто, как правило, пишет больше тестов / C++‑кода / комментариев? +### Кто, как правило, пишет больше тестов / C++‑кода / комментариев? {#who-tends-to-write-more-tests--cpp-code--comments} Есть несколько способов подойти к этому вопросу. Если сосредоточиться на соотношении кода и тестов, то этот запрос относительно прост — нужно посчитать количество изменений в каталогах, содержащих `tests`, и вычислить их долю от общего числа изменений. @@ -1996,7 +1996,7 @@ LIMIT 10 Обратите внимание, что сортировка ведётся по количеству вкладов в код. У всех наших крупнейших контрибьюторов удивительно высокий процент — это одна из причин, почему наш код такой читаемый. -### Как со временем меняется доля кода и комментариев в коммитах автора? +### Как со временем меняется доля кода и комментариев в коммитах автора? {#how-does-an-authors-commits-change-over-time-with-respect-to-codecomments-percentage} Вычислить это по каждому автору тривиально, @@ -2114,7 +2114,7 @@ LIMIT 20 Обнадеживает, что наша доля комментариев остается примерно постоянной и не снижается по мере роста стажа авторов. -### Каково среднее время до переписывания кода и медиана (период «полураспада» кода)? +### Каково среднее время до переписывания кода и медиана (период «полураспада» кода)? {#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay} Мы можем использовать тот же принцип, что и в разделе [List files that were rewritten most number of time or by most of authors](#list-files-that-were-rewritten-most-number-of-times) для определения переписываний, но применить его ко всем файлам. Оконная функция позволяет вычислить время между переписываниями для каждого файла. На этой основе мы можем посчитать среднее и медиану по всем файлам. @@ -2175,7 +2175,7 @@ FROM rewrites ``` -### В какое время писать код хуже всего с точки зрения наибольшей вероятности его последующего переписывания? +### В какое время писать код хуже всего с точки зрения наибольшей вероятности его последующего переписывания? {#what-is-the-worst-time-to-write-code-in-sense-that-the-code-has-highest-chance-to-be-re-written} Аналогично разделам [Каково среднее время до переписывания кода и медиана (период полураспада кода)?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) и [Список файлов, которые переписывались больше всего раз или наибольшим числом авторов](#list-files-that-were-rewritten-most-number-of-times), за исключением того, что здесь мы агрегируем по дням недели. При необходимости скорректируйте, например, по месяцам года. @@ -2240,7 +2240,7 @@ GROUP BY dayOfWeek ``` -### Чей код «держится» дольше всего? +### Чей код «держится» дольше всего? {#which-authors-code-is-the-most-sticky} Мы определяем «липкость» как то, как долго код автора остается в репозитории, прежде чем его перепишут. Аналогично предыдущему вопросу [Какое среднее время до переписывания кода и медианное значение (период полураспада деградации кода)?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) — используем тот же критерий переписывания, то есть 50% добавлений и 50% удалений в файле. Мы вычисляем среднее время до переписывания для каждого автора и учитываем только контрибьюторов с более чем двумя файлами. @@ -2318,7 +2318,7 @@ LIMIT 10 ``` -### Наибольшее количество последовательных дней с коммитами у автора +### Наибольшее количество последовательных дней с коммитами у автора {#most-consecutive-days-of-commits-by-an-author} Сначала в этом запросе необходимо определить дни, в которые автор делал коммиты. Используя оконную функцию с разбиением по автору, мы можем вычислить количество дней между его коммитами. Для каждого коммита, если с момента предыдущего прошёл 1 день, мы помечаем его как последовательный (1), в противном случае — 0, сохраняя результат в поле `consecutive_day`. @@ -2374,7 +2374,7 @@ LIMIT 10 ``` -### Построчная история коммитов файла +### Построчная история коммитов файла {#line-by-line-commit-history-of-a-file} Файлы могут быть переименованы. Когда это происходит, мы получаем событие переименования, в котором столбец `path` содержит новый путь к файлу, а `old_path` — его прежнее расположение, например: @@ -2455,7 +2455,7 @@ FORMAT PrettyCompactMonoBlock ## Открытые вопросы {#unsolved-questions} -### Git blame +### Git blame {#git-blame} Получить точный результат особенно сложно из‑за того, что в настоящий момент в функциях для работы с массивами нельзя хранить состояние. Это станет возможным с помощью `arrayFold` или `arrayReduce`, которые позволяют сохранять состояние на каждой итерации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md index ec10b335995..d60d555c526 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['пример набора данных', 'hacker news', 'пример данных', 'анализ текста', 'векторный поиск'] --- -# Набор данных Hacker News +# Набор данных Hacker News {#hacker-news-dataset} > В этом руководстве вы загрузите в таблицу ClickHouse 28 миллионов строк данных Hacker News из форматов CSV и Parquet и выполните несколько простых запросов, чтобы изучить данные. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md index 187c9d3b129..954067b6288 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md @@ -11,7 +11,7 @@ keywords: ['пример набора данных', 'laion', 'векторны Набор данных содержит URL-адрес изображения, векторные представления (эмбеддинги) как для изображения, так и для подписи, оценку сходства между изображением и подписью, а также метаданные, например ширину и высоту изображения, лицензию и флаг NSFW. Мы можем использовать этот набор данных для демонстрации [поиска приблизительных ближайших соседей](../../engines/table-engines/mergetree-family/annindexes.md) в ClickHouse. -## Подготовка данных +## Подготовка данных {#data-preparation} Эмбеддинги и метаданные хранятся в отдельных файлах в исходных данных. На этапе подготовки данные загружаются, файлы объединяются, преобразуются в CSV и импортируются в ClickHouse. Для этого вы можете использовать следующий скрипт `download.sh`: @@ -40,28 +40,28 @@ npy_file = "img_emb_" + str_i + '.npy' metadata_file = "metadata_" + str_i + '.parquet' text_npy = "text_emb_" + str_i + '.npy' -# загрузка всех файлов +# загрузка всех файлов {#load-all-files} im_emb = np.load(npy_file) text_emb = np.load(text_npy) data = pd.read_parquet(metadata_file) -# объединение файлов +# объединение файлов {#combine-files} data = pd.concat([data, pd.DataFrame({"image_embedding" : [*im_emb]}), pd.DataFrame({"text_embedding" : [*text_emb]})], axis=1, copy=False) -# столбцы для импорта в ClickHouse +# столбцы для импорта в ClickHouse {#columns-to-be-imported-into-clickhouse} data = data[['url', 'caption', 'NSFW', 'similarity', "image_embedding", "text_embedding"]] -# преобразование np.arrays в списки +# преобразование np.arrays в списки {#transform-nparrays-to-lists} data['image_embedding'] = data['image_embedding'].apply(lambda x: x.tolist()) data['text_embedding'] = data['text_embedding'].apply(lambda x: x.tolist()) -# этот небольшой хак необходим, поскольку caption иногда содержит различные типы кавычек +# этот небольшой хак необходим, поскольку caption иногда содержит различные типы кавычек {#this-small-hack-is-needed-because-caption-sometimes-contains-all-kind-of-quotes} data['caption'] = data['caption'].apply(lambda x: x.replace("'", " ").replace('"', " ")) -# экспорт данных в CSV-файл +# экспорт данных в CSV-файл {#export-data-as-csv-file} data.to_csv(str_i + '.csv', header=False) -# удаление исходных файлов данных +# удаление исходных файлов данных {#removed-raw-data-files} os.system(f"rm {npy_file} {metadata_file} {text_npy}") ``` @@ -76,7 +76,7 @@ seq 0 409 | xargs -P1 -I{} bash -c './download.sh {}' (Приведённый выше скрипт на Python очень медленный (~2–10 минут на файл), потребляет много памяти (41 ГБ на файл), а получающиеся CSV‑файлы большие (10 ГБ каждый), поэтому будьте осторожны. Если у вас достаточно RAM, увеличьте значение `-P1` для большего параллелизма. Если этого всё ещё недостаточно и обработка остаётся слишком медленной, рассмотрите более эффективную процедуру ингестии — например, сначала конвертировать файлы .npy в parquet, а затем выполнять всю остальную обработку с помощью ClickHouse.) -## Создание таблицы +## Создание таблицы {#create-table} Чтобы сначала создать таблицу без индексов, выполните: @@ -105,7 +105,7 @@ INSERT INTO laion FROM INFILE '{path_to_csv_files}/*.csv' Обратите внимание, что столбец `id` служит лишь для иллюстрации и заполняется скриптом неуникальными значениями. -## Запуск векторного поиска методом перебора +## Запуск векторного поиска методом перебора {#run-a-brute-force-vector-similarity-search} Чтобы выполнить векторный поиск методом перебора, выполните: @@ -137,7 +137,7 @@ SELECT url, caption FROM laion ORDER BY cosineDistance(image_embedding, {target: ``` -## Выполните приближённый поиск по сходству векторов с использованием индекса сходства векторов +## Выполните приближённый поиск по сходству векторов с использованием индекса сходства векторов {#run-an-approximate-vector-similarity-search-with-a-vector-similarity-index} Теперь определим два индекса сходства векторов для таблицы. @@ -194,7 +194,7 @@ SELECT url, caption FROM laion ORDER BY cosineDistance(image_embedding, {target: Обычно требуется создавать эмбеддинги для новых изображений или новых подписей к изображениям и искать в данных похожие пары «изображение — подпись к изображению». Мы можем использовать [UDF](/sql-reference/functions/udf), чтобы создать вектор `target`, не выходя за пределы клиентского приложения. Важно использовать одну и ту же модель и для исходных данных, и для новых эмбеддингов при выполнении поисковых запросов. В следующих скриптах используется модель `ViT-B/32`, которая также лежит в основе набора данных. -### Текстовые эмбеддинги +### Текстовые эмбеддинги {#text-embeddings} Сначала поместите следующий скрипт Python в каталог `user_scripts/` в каталоге данных ClickHouse и сделайте его исполняемым (`chmod +x encode_text.py`). @@ -256,7 +256,7 @@ LIMIT 10 Обратите внимание, что сам UDF `encode_text()` может занимать несколько секунд на вычисление и выдачу векторного представления (эмбеддинга). -### Векторные представления изображений +### Векторные представления изображений {#image-embeddings} Векторные представления изображений можно создать аналогичным образом; для этого мы предоставляем сценарий на Python, который генерирует векторное представление изображения, сохранённого локально в файле. @@ -304,7 +304,7 @@ if __name__ == '__main__': Загрузите пример изображения для поиска: ```shell -# получить случайное изображение набора LEGO +# получить случайное изображение набора LEGO {#get-a-random-image-of-a-lego-set} $ wget http://cdn.firstcry.com/brainbees/images/products/thumb/191325a.jpg ``` diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md index 4ce6d538c66..2a720e37590 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md @@ -16,22 +16,22 @@ keywords: ['пример набора данных', 'меню', 'историч Данные взяты из архива библиотеки, поэтому они могут быть неполными и неудобными для статистического анализа. Тем не менее, они ещё и очень «аппетитные». Объём составляет всего 1,3 миллиона записей о блюдах в меню — это очень небольшой объём данных для ClickHouse, но всё же это хороший пример. -## Загрузите набор данных +## Загрузите набор данных {#download-dataset} Выполните команду: ```bash wget https://s3.amazonaws.com/menusdata.nypl.org/gzips/2021_08_01_07_01_17_data.tgz -# Опционально: Проверка контрольной суммы +# Опционально: Проверка контрольной суммы {#option-validate-the-checksum} md5sum 2021_08_01_07_01_17_data.tgz -# Контрольная сумма должна быть равна: db6126724de939a5481e3160a2d67d15 +# Контрольная сумма должна быть равна: db6126724de939a5481e3160a2d67d15 {#checksum-should-be-equal-to-db6126724de939a5481e3160a2d67d15} ``` При необходимости замените ссылку на актуальную с [http://menus.nypl.org/data](http://menus.nypl.org/data). Размер загрузки составляет около 35 МБ. -## Распакуйте датасет +## Распакуйте датасет {#unpack-dataset} ```bash tar xvf 2021_08_01_07_01_17_data.tgz @@ -47,7 +47,7 @@ tar xvf 2021_08_01_07_01_17_data.tgz * `MenuItem` — Позиция меню. Блюдо вместе с его ценой на определённой странице меню: ссылки на блюдо и страницу меню. -## Создайте таблицы +## Создайте таблицы {#create-tables} Для хранения цен мы используем тип данных [Decimal](../../sql-reference/data-types/decimal.md). @@ -115,7 +115,7 @@ CREATE TABLE menu_item ``` -## Импортируйте данные +## Импортируйте данные {#import-data} Чтобы загрузить данные в ClickHouse, выполните следующую команду: @@ -135,7 +135,7 @@ clickhouse-client --format_csv_allow_single_quotes 0 --input_format_null_as_defa Настройка [date_time_input_format best_effort](/operations/settings/formats#date_time_input_format) позволяет разбирать поля [DateTime](../../sql-reference/data-types/datetime.md) в широком диапазоне форматов. Например, будет распознан формат ISO-8601 без секунд, такой как '2000-01-01 01:02'. Без этой настройки разрешён только фиксированный формат DateTime. -## Денормализация данных +## Денормализация данных {#denormalize-data} Данные представлены в нескольких таблицах в [нормализованной форме](https://en.wikipedia.org/wiki/Database_normalization#Normal_forms). Это означает, что вам нужно выполнять [JOIN](/sql-reference/statements/select/join), если вы хотите, например, получить названия блюд из пунктов меню. Для типичных аналитических задач гораздо эффективнее работать с данными, заранее объединёнными с помощью `JOIN`, чтобы не выполнять `JOIN` каждый раз. Такие данные называются «денормализованными». @@ -188,7 +188,7 @@ FROM menu_item ``` -## Проверьте данные +## Проверьте данные {#validate-data} Запрос: @@ -207,7 +207,7 @@ SELECT count() FROM menu_item_denorm; ## Выполните несколько запросов {#run-queries} -### Средние исторические цены на блюда +### Средние исторические цены на блюда {#query-averaged-historical-prices} Запрос: @@ -250,7 +250,7 @@ ORDER BY d ASC; Не воспринимайте это слишком всерьёз. -### Цены на бургеры +### Цены на бургеры {#query-burger-prices} Запрос: @@ -288,7 +288,7 @@ ORDER BY d ASC; ``` -### Водка +### Водка {#query-vodka} Запрос: @@ -323,7 +323,7 @@ ORDER BY d ASC; Чтобы получить «водку», нам нужно написать `ILIKE '%vodka%'`, и это, мягко говоря, звучит многозначительно. -### Икра +### Икра {#query-caviar} Выведем цены на икру, а также название любого блюда с икрой. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md index 51a12af366d..816e4a6af05 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md @@ -28,7 +28,7 @@ keywords: ['пример набора данных', 'noaa', 'погодные - [Предварительно подготовленная версия](#pre-prepared-data) данных для ClickHouse, очищенная, переработанная и обогащённая. Эти данные охватывают период с 1900 по 2022 годы. - [Скачать исходные данные](#original-data) и преобразовать их в формат, требуемый ClickHouse. Пользователи, желающие добавить собственные столбцы, могут использовать этот подход. -### Предварительно подготовленные данные +### Предварительно подготовленные данные {#pre-prepared-data} Более конкретно, были удалены строки, не провалившие ни одной проверки качества со стороны NOAA. Данные также были реструктурированы из формата «одно измерение на строку» в формат «одна строка на идентификатор станции и дату», т. е. @@ -55,7 +55,7 @@ wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enriche Ниже приведены шаги по скачиванию и преобразованию исходных данных перед их загрузкой в ClickHouse. -#### Загрузка +#### Загрузка {#download} Чтобы скачать исходные данные: @@ -64,7 +64,7 @@ for i in {1900..2023}; do wget https://noaa-ghcn-pds.s3.amazonaws.com/csv.gz/${i ``` -#### Сэмплирование данных +#### Сэмплирование данных {#sampling-the-data} ```bash $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format PrettyCompact @@ -108,7 +108,7 @@ $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format Prett Формат «одно измерение на строку» приведёт к разрежённой структуре таблицы в ClickHouse. Мы должны преобразовать данные к формату «одна строка на момент времени и станцию», с измерениями в виде столбцов. Сначала мы ограничим набор данных строками без проблем, т.е. где `qFlag` равен пустой строке. -#### Очистите данные +#### Очистите данные {#clean-the-data} Используя [ClickHouse local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local), мы можем отфильтровать строки, которые представляют интересующие нас измерения и соответствуют нашим требованиям к качеству: @@ -122,7 +122,7 @@ FROM file('*.csv.gz', CSV, 'station_id String, date String, measurement String, При объёме более 2,6 миллиарда строк этот запрос получается не очень быстрым, так как нужно разобрать все файлы. На нашей машине с 8 ядрами это занимает около 160 секунд. -### Преобразование данных (pivot) +### Преобразование данных (pivot) {#pivot-data} Хотя структуру «одно измерение на строку» можно использовать с ClickHouse, она будет излишне усложнять будущие запросы. В идеале нам нужна одна строка по идентификатору станции и дате, где каждый тип измерения и соответствующее ему значение представлены отдельным столбцом, т. е. @@ -161,7 +161,7 @@ done Этот запрос создаёт один файл `noaa.csv` размером 50 ГБ. -### Обогащение данных +### Обогащение данных {#enriching-the-data} В данных нет информации о местоположении, кроме идентификатора станции, который включает префикс с кодом страны. В идеале у каждой станции должны быть указаны широта и долгота. Для этого NOAA предоставляет сведения о каждой станции в отдельном файле [ghcnd-stations.txt](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file). Этот файл содержит [несколько столбцов](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file), из которых пять пригодятся для нашего дальнейшего анализа: id, latitude, longitude, elevation и name. @@ -194,7 +194,7 @@ FROM file('noaa.csv', CSV, Этот запрос выполняется в течение нескольких минут и создаёт файл размером 6,4 ГБ, `noaa_enriched.parquet`. -## Создание таблицы +## Создание таблицы {#create-table} Создайте таблицу MergeTree в ClickHouse (в клиенте ClickHouse). @@ -223,7 +223,7 @@ CREATE TABLE noaa ## Добавление данных в ClickHouse {#inserting-into-clickhouse} -### Вставка из локального файла +### Вставка из локального файла {#inserting-from-local-file} Данные можно вставить из локального файла следующим образом (в клиенте ClickHouse): @@ -236,7 +236,7 @@ INSERT INTO noaa FROM INFILE '<путь>/noaa_enriched.parquet' См. [здесь](https://clickhouse.com/blog/real-world-data-noaa-climate-data#load-the-data), чтобы узнать, как ускорить загрузку данных. -### Вставка из S3 +### Вставка из S3 {#inserting-from-s3} ```sql INSERT INTO noaa SELECT * @@ -249,7 +249,7 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enr ## Примеры запросов {#sample-queries} -### Максимальная температура за всё время +### Максимальная температура за всё время {#highest-temperature-ever} ```sql SELECT @@ -278,7 +278,7 @@ LIMIT 5 Обнадеживающе соответствует [задокументированному рекорду](https://en.wikipedia.org/wiki/List_of_weather_records#Highest_temperatures_ever_recorded) в [Furnace Creek](https://www.google.com/maps/place/36%C2%B027'00.0%22N+116%C2%B052'00.1%22W/@36.1329666,-116.1104099,8.95z/data=!4m5!3m4!1s0x0:0xf2ed901b860f4446!8m2!3d36.45!4d-116.8667) по состоянию на 2023 год. -### Лучшие горнолыжные курорты +### Лучшие горнолыжные курорты {#best-ski-resorts} Используя [список горнолыжных курортов](https://gist.githubusercontent.com/gingerwizard/dd022f754fd128fdaf270e58fa052e35/raw/622e03c37460f17ef72907afe554cb1c07f91f23/ski_resort_stats.csv) в США и их координаты, мы объединяем его с топ-1000 метеостанций с наибольшими снегопадами в любой месяц за последние 5 лет. Отсортировав результат этого объединения по [geoDistance](/sql-reference/functions/geo/coordinates/#geodistance) и ограничив выборку расстоянием менее 20 км, мы выбираем лучший результат для каждого курорта и затем сортируем полученный список по суммарному количеству снега. Обратите внимание, что мы также ограничиваем выборку курортами, расположенными выше 1800 м, как общим индикатором хороших условий для катания. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md index 7e7bcad570d..0dafaa6a050 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md @@ -24,7 +24,7 @@ import TabItem from '@theme/TabItem'; ::: -## Создайте таблицу trips +## Создайте таблицу trips {#create-the-table-trips} Сначала создайте таблицу для поездок на такси: @@ -126,7 +126,7 @@ FROM gcs( -## Примеры запросов +## Примеры запросов {#sample-queries} Следующие запросы выполняются для описанного выше примера. Пользователи могут запускать эти примерные запросы на полном наборе данных в [sql.clickhouse.com](https://sql.clickhouse.com/?query=U0VMRUNUIGNvdW50KCkgRlJPTSBueWNfdGF4aS50cmlwcw\&chart=eyJ0eXBlIjoibGluZSIsImNvbmZpZyI6eyJ0aXRsZSI6IlRlbXBlcmF0dXJlIGJ5IGNvdW50cnkgYW5kIHllYXIiLCJ4YXhpcyI6InllYXIiLCJ5YXhpcyI6ImNvdW50KCkiLCJzZXJpZXMiOiJDQVNUKHBhc3Nlbmdlcl9jb3VudCwgJ1N0cmluZycpIn19), изменив приведённые ниже запросы для использования таблицы `nyc_taxi.trips`. @@ -183,7 +183,7 @@ ORDER BY passenger_count ASC ``` -## Скачивание подготовленных партиций +## Скачивание подготовленных партиций {#download-of-prepared-partitions} :::note Следующие шаги содержат информацию об исходном наборе данных и метод загрузки подготовленных партиций в самостоятельно управляемую среду сервера ClickHouse. @@ -196,9 +196,9 @@ ORDER BY passenger_count ASC ```bash $ curl -O https://datasets.clickhouse.com/trips_mergetree/partitions/trips_mergetree.tar -# Проверьте контрольную сумму +# Проверьте контрольную сумму {#validate-the-checksum} $ md5sum trips_mergetree.tar -# Контрольная сумма должна быть: f3b8d469b41d9a82da064ded7245d12c +# Контрольная сумма должна быть: f3b8d469b41d9a82da064ded7245d12c {#checksum-should-be-equal-to-f3b8d469b41d9a82da064ded7245d12c} $ tar xvf trips_mergetree.tar -C /var/lib/clickhouse # путь к каталогу данных ClickHouse $ # проверьте права доступа к распакованным данным и исправьте при необходимости $ sudo service clickhouse-server restart @@ -210,7 +210,7 @@ $ clickhouse-client --query "select count(*) from datasets.trips_mergetree" ::: -## Результаты на одном сервере +## Результаты на одном сервере {#results-on-single-server} Q1: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md index a51d21eb170..89f81878b6e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md @@ -42,7 +42,7 @@ keywords: ['пример набора данных', 'nypd', 'данные о п Перед началом работы с базой данных ClickHouse ознакомьтесь с данными. -### Посмотрите на поля из исходного TSV-файла +### Посмотрите на поля из исходного TSV-файла {#look-at-the-fields-in-the-source-tsv-file} Это пример команды для выполнения запроса к TSV-файлу, но пока не запускайте её. @@ -120,7 +120,7 @@ New Georeferenced Column Nullable(String) На этом этапе вам следует проверить, что столбцы в TSV‑файле совпадают по названиям и типам с указанными в разделе **Columns in this Dataset** на [веб‑странице набора данных](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243). Типы данных заданы не очень строго: все числовые поля имеют тип `Nullable(Float64)`, а все остальные поля — `Nullable(String)`. При создании таблицы ClickHouse для хранения этих данных вы можете задать более подходящие и эффективные типы. -### Определите подходящую схему +### Определите подходящую схему {#determine-the-proper-schema} Чтобы определить, какие типы следует использовать для полей, необходимо понимать, как выглядят данные. Например, поле `JURISDICTION_CODE` представляет собой числовое значение: должно ли оно иметь тип `UInt8`, `Enum` или подойдет `Float64`? @@ -211,7 +211,7 @@ clickhouse-local --input_format_max_rows_to_read_for_schema_inference=2000 \ В используемом на момент написания наборе данных всего несколько сотен уникальных парков и игровых площадок в столбце `PARK_NM`. Это небольшое количество и оно укладывается в рекомендацию для [LowCardinality](/sql-reference/data-types/lowcardinality#description) — не превышать 10 000 различных строк в поле типа `LowCardinality(String)`. -### Поля DateTime +### Поля DateTime {#datetime-fields} Согласно разделу **Columns in this Dataset** на [веб‑странице набора данных](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243), в этом наборе данных есть поля даты и времени для начала и окончания зарегистрированного события. Анализ минимальных и максимальных значений полей `CMPLNT_FR_DT` и `CMPLT_TO_DT` позволяет понять, всегда ли эти поля заполняются: @@ -298,7 +298,7 @@ FORMAT PrettyCompact" Требуется внести ещё множество изменений в типы; все их можно определить, следуя тем же шагам анализа. Посмотрите на количество различных строковых значений в поле, минимальные и максимальные значения числовых полей и принимайте решения. Схема таблицы, которая приводится далее в руководстве, содержит много строковых полей с низкой кардинальностью и полей с беззнаковыми целыми числами и очень мало чисел с плавающей точкой. ::: -## Объединение полей даты и времени +## Объединение полей даты и времени {#concatenate-the-date-and-time-fields} Чтобы объединить поля даты и времени `CMPLNT_FR_DT` и `CMPLNT_FR_TM` в одну строку (`String`), которую затем можно привести к типу `DateTime`, выберите выражение с двумя полями, соединёнными оператором конкатенации: `CMPLNT_FR_DT || ' ' || CMPLNT_FR_TM`. Поля `CMPLNT_TO_DT` и `CMPLNT_TO_TM` обрабатываются аналогичным образом. @@ -329,7 +329,7 @@ FORMAT PrettyCompact" ``` -## Преобразование строкового значения даты и времени в тип DateTime64 +## Преобразование строкового значения даты и времени в тип DateTime64 {#convert-the-date-and-time-string-to-a-datetime64-type} Ранее в этом руководстве мы обнаружили, что в TSV-файле есть даты до 1 января 1970 года, что означает, что нам нужен 64-битный тип DateTime64 для хранения дат. Даты также нужно преобразовать из формата `MM/DD/YYYY` в формат `YYYY/MM/DD`. Оба этих действия можно выполнить с помощью функции [`parseDateTime64BestEffort()`](../../sql-reference/functions/type-conversion-functions.md#parsedatetime64besteffort). @@ -390,7 +390,7 @@ FORMAT PrettyCompact" Принятые выше решения относительно типов данных, используемых для столбцов, отражены в приведённой ниже схеме таблицы. Нам также необходимо определить `ORDER BY` и `PRIMARY KEY`, которые будут использоваться в таблице. Должен быть указан как минимум один из `ORDER BY` или `PRIMARY KEY`. Ниже приведены некоторые рекомендации по выбору столбцов для включения в `ORDER BY`; дополнительная информация приведена в разделе *Next Steps* в конце этого документа. -### Операторы `ORDER BY` и `PRIMARY KEY` +### Операторы `ORDER BY` и `PRIMARY KEY` {#order-by-and-primary-key-clauses} * Кортеж `ORDER BY` должен включать поля, которые используются в фильтрах запросов * Для максимального сжатия на диске кортеж `ORDER BY` должен быть упорядочен по возрастанию кардинальности полей @@ -486,7 +486,7 @@ CREATE TABLE NYPD_Complaint ( ``` -### Поиск первичного ключа таблицы +### Поиск первичного ключа таблицы {#finding-the-primary-key-of-a-table} Системная база данных ClickHouse `system`, в частности таблица `system.table`, содержит всю информацию о таблице, которую вы только что создали. Этот запрос показывает `ORDER BY` (ключ сортировки) и `PRIMARY KEY`: @@ -521,7 +521,7 @@ table: NYPD_Complaint Используем утилиту `clickhouse-local` для предварительной обработки данных и `clickhouse-client` для их загрузки. -### Используемые аргументы `clickhouse-local` +### Используемые аргументы `clickhouse-local` {#clickhouse-local-arguments-used} :::tip `table='input'` присутствует в аргументах clickhouse-local ниже. clickhouse-local принимает переданные входные данные (`cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv`) и вставляет их в таблицу. По умолчанию таблица называется `table`. В этом руководстве имя таблицы задано как `input`, чтобы сделать поток данных более наглядным. Последний аргумент clickhouse-local — это запрос, который выбирает данные из таблицы (`FROM input`), после чего результат перенаправляется в `clickhouse-client` для заполнения таблицы `NYPD_Complaint`. @@ -572,7 +572,7 @@ cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv \ ``` -## Проверка данных +## Проверка данных {#validate-data} :::note Набор данных обновляется один или несколько раз в год, поэтому ваши результаты подсчёта могут отличаться от приведённых в этом документе. @@ -616,7 +616,7 @@ WHERE name = 'NYPD_Complaint' ## Выполните несколько запросов {#run-queries} -### Запрос 1. Сравнение количества жалоб по месяцам +### Запрос 1. Сравнение количества жалоб по месяцам {#query-1-compare-the-number-of-complaints-by-month} Запрос: @@ -654,7 +654,7 @@ Query id: 7fbd4244-b32a-4acf-b1f3-c3aa198e74d9 ``` -### Запрос 2. Сравнение общего числа жалоб по районам +### Запрос 2. Сравнение общего числа жалоб по районам {#query-2-compare-total-number-of-complaints-by-borough} Запрос: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md index c09016063a7..13c6e0c4de2 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md @@ -127,7 +127,7 @@ CREATE TABLE `ontime` ORDER BY (Year, Quarter, Month, DayofMonth, FlightDate, IATA_CODE_Reporting_Airline); ``` -## Импорт сырых данных +## Импорт сырых данных {#import-from-raw-data} Загрузка данных: @@ -144,7 +144,7 @@ ls -1 *.zip | xargs -I{} -P $(nproc) bash -c "echo {}; unzip -cq {} '*.csv' | se (если на вашем сервере будет нехватка памяти или возникнут другие проблемы, удалите флаг `-P $(nproc)`) -## Импорт из сохранённой копии +## Импорт из сохранённой копии {#import-from-a-saved-copy} Также вы можете импортировать данные из сохранённой копии с помощью следующего запроса: @@ -155,7 +155,7 @@ INSERT INTO ontime SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazo Снимок был создан 29.05.2022. -## Запросы +## Запросы {#queries} Q0. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md index 80578c5ccda..55aa0bcb402 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md @@ -22,7 +22,7 @@ import stackoverflow from '@site/static/images/getting-started/example-datasets/ Описание схемы этих данных можно найти [здесь](https://meta.stackexchange.com/questions/2677/database-schema-documentation-for-the-public-data-dump-and-sede). -## Заранее подготовленные данные +## Заранее подготовленные данные {#pre-prepared-data} Мы предоставляем копию этих данных в формате Parquet, актуальную по состоянию на апрель 2024 года. Хотя этот набор данных и невелик для ClickHouse с точки зрения количества строк (60 миллионов постов), он содержит значительные объемы текста и большие столбцы строкового типа (String). @@ -33,7 +33,7 @@ CREATE DATABASE stackoverflow Приведённые ниже замеры времени относятся к кластеру ClickHouse Cloud с 96 GiB памяти и 24 vCPU, расположенному в регионе `eu-west-2`. Набор данных находится в регионе `eu-west-3`. -### Публикации +### Публикации {#posts} ```sql CREATE TABLE stackoverflow.posts @@ -73,7 +73,7 @@ INSERT INTO stackoverflow.posts SELECT * FROM s3('https://datasets-documentation Публикации также доступны по годам, например, по адресу [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet) -### Голоса +### Голоса {#votes} ```sql CREATE TABLE stackoverflow.votes @@ -96,7 +96,7 @@ INSERT INTO stackoverflow.votes SELECT * FROM s3('https://datasets-documentation Голоса также доступны по годам, например, по адресу [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/votes/2020.parquet) -### Комментарии +### Комментарии {#comments} ```sql CREATE TABLE stackoverflow.comments @@ -120,7 +120,7 @@ INSERT INTO stackoverflow.comments SELECT * FROM s3('https://datasets-documentat Комментарии также доступны по годам, например, по адресу: [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/comments/2020.parquet) -### Пользователи +### Пользователи {#users} ```sql CREATE TABLE stackoverflow.users @@ -147,7 +147,7 @@ INSERT INTO stackoverflow.users SELECT * FROM s3('https://datasets-documentation ``` -### Значки +### Значки {#badges} ```sql CREATE TABLE stackoverflow.badges @@ -168,7 +168,7 @@ INSERT INTO stackoverflow.badges SELECT * FROM s3('https://datasets-documentatio ``` -### PostLinks +### PostLinks {#postlinks} ```sql CREATE TABLE stackoverflow.postlinks @@ -188,7 +188,7 @@ INSERT INTO stackoverflow.postlinks SELECT * FROM s3('https://datasets-documenta ``` -### PostHistory +### PostHistory {#posthistory} ```sql CREATE TABLE stackoverflow.posthistory @@ -217,7 +217,7 @@ INSERT INTO stackoverflow.posthistory SELECT * FROM s3('https://datasets-documen Исходный набор данных доступен в сжатом XML-формате (7zip) по адресу [https://archive.org/download/stackexchange](https://archive.org/download/stackexchange) — файлы с префиксом `stackoverflow.com*`. -### Загрузка +### Загрузка {#download} ```bash wget https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z @@ -232,7 +232,7 @@ wget https://archive.org/download/stackexchange/stackoverflow.com-Votes.7z Размер этих файлов может достигать 35 ГБ, и их загрузка может занять около 30 минут в зависимости от интернет-соединения — сервер загрузки ограничивает скорость примерно до 20 МБ/с. -### Преобразование в JSON +### Преобразование в JSON {#convert-to-json} На момент написания ClickHouse не имеет встроенной поддержки XML в качестве входного формата. Чтобы загрузить данные в ClickHouse, мы сначала преобразуем их в NDJSON. @@ -260,7 +260,7 @@ p7zip -d stackoverflow.com-Posts.7z ```bash mkdir posts cd posts -# следующая команда разбивает входной xml-файл на подфайлы по 10000 строк +# следующая команда разбивает входной xml-файл на подфайлы по 10000 строк {#the-following-splits-the-input-xml-file-into-sub-files-of-10000-rows} tail +3 ../Posts.xml | head -n -1 | split -l 10000 --filter='{ printf "\n"; cat - ; printf "\n"; } > $FILE' - ``` @@ -283,7 +283,7 @@ clickhouse local --query "SELECT * FROM file('posts.json', JSONEachRow, 'Id Int3 Несколько простых запросов для начала работы. -### Самые популярные теги на Stack Overflow +### Самые популярные теги на Stack Overflow {#most-popular-tags-on-stack-overflow} ```sql @@ -313,7 +313,7 @@ LIMIT 10 ``` -### Пользователь с наибольшим количеством ответов (активные учётные записи) +### Пользователь с наибольшим количеством ответов (активные учётные записи) {#user-with-the-most-answers-active-accounts} Для учётной записи требуется `UserId`. @@ -340,7 +340,7 @@ LIMIT 5 ``` -### Самые популярные статьи о ClickHouse +### Самые популярные статьи о ClickHouse {#clickhouse-related-posts-with-the-most-views} ```sql SELECT @@ -371,7 +371,7 @@ LIMIT 10 ``` -### Самые спорные публикации +### Самые спорные публикации {#most-controversial-posts} ```sql SELECT diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md index 4d5645690b4..41684aad26c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md @@ -13,12 +13,12 @@ keywords: ['пример набора данных', 'tpch', 'бенчмарк', **Ссылки** -- [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) -- [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291) (Poess et. al., 2000) -- [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5) (Boncz et. al.), 2013 -- [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138) (Dresseler et. al.), 2020 +* [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) +* [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291) (Poess et. al., 2000) +* [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5) (Boncz et. al.), 2013 +* [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138) (Dresseler et. al.), 2020 -## Генерация и импорт данных +## Генерация и импорт данных {#data-generation-and-import} Сначала клонируйте репозиторий TPC-H и скомпилируйте генератор данных: @@ -58,7 +58,6 @@ make * В соответствии с разделом 1.4.2.1 определения таблиц не используют необязательные ограничения `NOT NULL`, даже если `dbgen` генерирует их по умолчанию. Производительность запросов `SELECT` в ClickHouse не зависит от наличия или отсутствия ограничений `NOT NULL`. * В соответствии с разделом 1.3.1 мы используем собственные типы данных ClickHouse (например, `Int32`, `String`) для реализации абстрактных типов данных, указанных в спецификации (например, `Identifier`, `Variable text, size N`). Единственный эффект этого — лучшая читаемость; типы данных SQL-92, генерируемые `dbgen` (например, `INTEGER`, `VARCHAR(40)`), также будут работать в ClickHouse. - ```sql CREATE TABLE nation ( n_nationkey Int32, @@ -169,7 +168,6 @@ clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO lineitem FORMA Вместо использования tpch-kit и самостоятельной генерации таблиц вы можете импортировать данные из общедоступного бакета S3. Перед этим обязательно создайте пустые таблицы, используя приведённые выше операторы `CREATE`. - ```sql -- Коэффициент масштабирования 1 INSERT INTO nation SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/h/1/nation.tbl', NOSIGN, CSV) SETTINGS format_csv_delimiter = '|', input_format_defaults_for_omitted_fields = 1, input_format_csv_empty_as_default = 1; @@ -194,8 +192,7 @@ INSERT INTO lineitem SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws. ::: - -## Запросы +## Запросы {#queries} :::note Для получения корректных результатов в соответствии со стандартом SQL необходимо включить настройку [`join_use_nulls`](../../operations/settings/settings.md#join_use_nulls). @@ -348,7 +345,6 @@ ORDER BY **Q5** - ```sql SELECT n_name, @@ -496,7 +492,6 @@ ORDER BY **Q9** - ```sql SELECT nation, @@ -850,7 +845,6 @@ WHERE **Q20** - ```sql SELECT s_name, diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md index 69e792d9e55..2ecf71eeafa 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md @@ -26,7 +26,7 @@ keywords: ['пример набора данных', 'погода', 'тайва - [Предварительно обработанная версия](#pre-processed-data) данных для ClickHouse, которые были очищены, переработаны и обогащены. Этот набор данных охватывает период с 1896 по 2023 год. - [Скачать исходные «сырые» данные](#original-raw-data) и преобразовать их в формат, требуемый ClickHouse. Пользователи, которые хотят добавить собственные столбцы, могут изучить или доработать свои подходы. -### Предобработанные данные +### Предобработанные данные {#pre-processed-data} Набор данных был преобразован из формата «одно измерение на строку» в формат «одна строка по идентификатору метеостанции и дате измерения», т.е. @@ -47,16 +47,16 @@ C0X100,2016-01-01 04:00:00,1021.2,15.8,74,1.7,8.0,,,,,,,,,,,,,,,,,,,,,,, ```bash wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/preprocessed_weather_daily_1896_2023.tar.gz -# Опционально: Проверьте контрольную сумму +# Опционально: Проверьте контрольную сумму {#option-validate-the-checksum} md5sum preprocessed_weather_daily_1896_2023.tar.gz -# Контрольная сумма должна совпадать с: 11b484f5bd9ddafec5cfb131eb2dd008 +# Контрольная сумма должна совпадать с: 11b484f5bd9ddafec5cfb131eb2dd008 {#checksum-should-be-equal-to-11b484f5bd9ddafec5cfb131eb2dd008} tar -xzvf preprocessed_weather_daily_1896_2023.tar.gz daily_weather_preprocessed_1896_2023.csv -# Опционально: Проверьте контрольную сумму +# Опционально: Проверьте контрольную сумму {#option-validate-the-checksum} md5sum daily_weather_preprocessed_1896_2023.csv -# Контрольная сумма должна совпадать с: 1132248c78195c43d93f843753881754 +# Контрольная сумма должна совпадать с: 1132248c78195c43d93f843753881754 {#checksum-should-be-equal-to-1132248c78195c43d93f843753881754} ``` @@ -64,7 +64,7 @@ md5sum daily_weather_preprocessed_1896_2023.csv Далее приведены сведения о шагах по загрузке исходных необработанных данных, которые затем можно преобразовать и конвертировать по своему усмотрению. -#### Загрузка +#### Загрузка {#download} Чтобы скачать исходные сырые данные: @@ -73,9 +73,9 @@ mkdir tw_raw_weather_data && cd tw_raw_weather_data wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/raw_data_weather_daily_1896_2023.tar.gz -# Опционально: Проверка контрольной суммы +# Опционально: Проверка контрольной суммы {#option-validate-the-checksum} md5sum raw_data_weather_daily_1896_2023.tar.gz -# Контрольная сумма должна совпадать с: b66b9f137217454d655e3004d7d1b51a +# Контрольная сумма должна совпадать с: b66b9f137217454d655e3004d7d1b51a {#checksum-should-be-equal-to-b66b9f137217454d655e3004d7d1b51a} tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1928.csv @@ -84,23 +84,23 @@ tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1931.csv ... -# Опционально: Проверка контрольной суммы +# Опционально: Проверка контрольной суммы {#option-validate-the-checksum} cat *.csv | md5sum -# Контрольная сумма должна совпадать с: b26db404bf84d4063fac42e576464ce1 +# Контрольная сумма должна совпадать с: b26db404bf84d4063fac42e576464ce1 {#checksum-should-be-equal-to-b26db404bf84d4063fac42e576464ce1} ``` -#### Получение данных метеостанций Тайваня +#### Получение данных метеостанций Тайваня {#retrieve-the-taiwan-weather-stations} ```bash wget -O weather_sta_list.csv https://github.com/Raingel/weather_station_list/raw/main/data/weather_sta_list.csv -# Опционально: Преобразование кодировки UTF-8-BOM в UTF-8 +# Опционально: Преобразование кодировки UTF-8-BOM в UTF-8 {#option-convert-the-utf-8-bom-to-utf-8-encoding} sed -i '1s/^\xEF\xBB\xBF//' weather_sta_list.csv ``` -## Создание схемы таблицы +## Создание схемы таблицы {#create-table-schema} Создайте таблицу MergeTree в ClickHouse (через клиент ClickHouse). @@ -144,7 +144,7 @@ ORDER BY (MeasuredDate); ## Вставка данных в ClickHouse {#inserting-into-clickhouse} -### Вставка данных из локального файла +### Вставка данных из локального файла {#inserting-from-local-file} Данные можно вставить из локального файла следующим образом (в клиенте ClickHouse): @@ -165,7 +165,7 @@ INSERT INTO tw_weather_data FROM INFILE '/path/to/daily_weather_preprocessed_189 ``` -### Вставка из URL +### Вставка из URL {#inserting-from-url} ```sql INSERT INTO tw_weather_data SELECT * @@ -176,7 +176,7 @@ FROM url('https://storage.googleapis.com/taiwan-weather-observaiton-datasets/dai Чтобы узнать, как ускорить этот процесс, ознакомьтесь с нашей публикацией в блоге о [настройке загрузки больших объёмов данных](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2). -## Проверка числа строк и объёма данных +## Проверка числа строк и объёма данных {#check-data-rows-and-sizes} 1. Посмотрим, сколько строк было вставлено: @@ -210,7 +210,7 @@ WHERE (`table` = 'tw_weather_data') AND active ## Примеры запросов {#sample-queries} -### Q1: Получите максимальное значение температуры точки росы для каждой метеостанции за заданный год +### Q1: Получите максимальное значение температуры точки росы для каждой метеостанции за заданный год {#q1-retrieve-the-highest-dew-point-temperature-for-each-weather-station-in-the-specific-year} ```sql SELECT @@ -257,7 +257,7 @@ GROUP BY StationId ``` -### Q2: Выборка сырых данных за заданный интервал времени, по полям и метеостанции +### Q2: Выборка сырых данных за заданный интервал времени, по полям и метеостанции {#q2-raw-data-fetching-with-the-specific-duration-time-range-fields-and-weather-station} ```sql SELECT diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md index b784a8a0bc4..25dfa2e506a 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md @@ -13,7 +13,7 @@ keywords: ['пример набора данных', 'недвижимость - Описание полей: https://www.gov.uk/guidance/about-the-price-paid-data - Содержит данные HM Land Registry © Crown copyright and database right 2021. Эти данные распространяются по лицензии Open Government Licence v3.0. -## Создание таблицы +## Создание таблицы {#create-table} ```sql CREATE DATABASE uk; @@ -40,7 +40,7 @@ ORDER BY (postcode1, postcode2, addr1, addr2); ``` -## Предобработка и вставка данных +## Предобработка и вставка данных {#preprocess-import-data} Мы будем использовать функцию `url` для потоковой передачи данных в ClickHouse. Сначала нам нужно предварительно обработать часть входящих данных, включая: @@ -95,7 +95,7 @@ FROM url( Дождитесь, пока данные будут вставлены — это может занять одну-две минуты в зависимости от скорости сети. -## Проверка данных +## Проверка данных {#validate-data} Проверим, что всё сработало, посмотрев, сколько строк было записано: @@ -119,7 +119,7 @@ WHERE name = 'uk_price_paid' Давайте выполним несколько запросов, чтобы проанализировать данные: -### Запрос 1. Средняя цена по годам +### Запрос 1. Средняя цена по годам {#average-price} ```sql runnable SELECT @@ -133,7 +133,7 @@ ORDER BY year ``` -### Запрос 2. Средняя цена по годам в Лондоне +### Запрос 2. Средняя цена по годам в Лондоне {#average-price-london} ```sql runnable SELECT @@ -150,7 +150,7 @@ ORDER BY year Что-то произошло с ценами на жильё в 2020 году! Однако, вероятно, это не стало сюрпризом... -### Запрос 3. Самые дорогие районы +### Запрос 3. Самые дорогие районы {#most-expensive-neighborhoods} ```sql runnable SELECT diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md index 7e958bd2ce4..0e75010ffb5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md @@ -241,7 +241,7 @@ keywords: ['пример набора данных', 'youtube', 'образцы ## Вопросы {#questions} -### Если отключить комментарии, уменьшится ли вероятность того, что кто-то поставит лайк или дизлайк? +### Если отключить комментарии, уменьшится ли вероятность того, что кто-то поставит лайк или дизлайк? {#create-the-table} Когда комментарии отключены, станут ли люди чаще ставить лайки или дизлайки, чтобы выразить своё отношение к видео? @@ -297,7 +297,7 @@ ORDER BY Включение комментариев, как правило, коррелирует с более высоким уровнем вовлечённости. -### Как со временем меняется количество видео — какие при этом можно выделить события? +### Как со временем меняется количество видео — какие при этом можно выделить события? {#insert-data} ```sql SELECT @@ -336,7 +336,7 @@ ORDER BY month ASC; Всплеск числа авторов, загружающих видео, [в период COVID-19 заметен](https://www.theverge.com/2020/3/27/21197642/youtube-with-me-style-videos-views-coronavirus-cook-workout-study-home-beauty). -### Больше субтитров со временем: когда это произошло +### Больше субтитров со временем: когда это произошло {#count-row-numbers} С развитием технологий распознавания речи создавать субтитры для видео стало проще, чем когда-либо: YouTube добавил автоматическое создание субтитров в конце 2009 года — стал ли это переломным моментом? @@ -374,7 +374,7 @@ ORDER BY month ASC; Это привело к запуску очень успешной кампании, призывавшей авторов добавлять субтитры к своим видео для слабослышащих и глухих зрителей. -### Лидеры по загрузкам во времени +### Лидеры по загрузкам во времени {#explore-the-data} ```sql WITH uploaders AS @@ -467,7 +467,7 @@ ORDER BY ``` -### Как распределяются представления? +### Как распределяются представления? {#if-someone-disables-comments-does-it-lower-the-chance-someone-will-actually-click-like-or-dislike} ```sql SELECT diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/index.md index fd852dc3ec7..e7da3264997 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/index.md @@ -9,9 +9,7 @@ title: 'Учебные руководства и примеры наборов doc_type: 'landing-page' --- - - -# Учебные материалы и примеры наборов данных +# Учебные материалы и примеры наборов данных {#tutorials-and-example-datasets} У нас есть множество ресурсов, которые помогут вам начать работу и понять, как работает ClickHouse: @@ -25,7 +23,6 @@ doc_type: 'landing-page' {/* Приведённая ниже таблица автоматически генерируется на этапе сборки скриптом https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh */ } - {/*AUTOGENERATED_START*/ } | Страница | Описание | 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..b43267969f6 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,116 @@ 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 {#install-clickhouse-server-and-client} + ```bash sudo apt-get install -y clickhouse-server clickhouse-client ``` + ## Запуск ClickHouse {#start-clickhouse-server} -Для запуска сервера ClickHouse выполните: +Чтобы запустить сервер ClickHouse, выполните следующую команду: + ```bash sudo service clickhouse-server start ``` -Для запуска клиента ClickHouse выполните: +Чтобы запустить клиент ClickHouse, выполните: + ```bash clickhouse-client ``` -Если вы установили пароль для вашего сервера, то вам нужно будет выполнить: +Если вы задали пароль для своего сервера, вам потребуется выполнить: + ```bash clickhouse-client --password ``` + ## Установка автономного ClickHouse Keeper {#install-standalone-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 +119,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/getting-started/install/_snippets/_docker.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md index f49c5d136ce..aa6e0a09b84 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md @@ -1,4 +1,4 @@ -# Установка ClickHouse с помощью Docker +# Установка ClickHouse с помощью Docker {#install-clickhouse-using-docker} Руководство на [Docker Hub](https://hub.docker.com/r/clickhouse/clickhouse-server/) приведено ниже для удобства. Доступные Docker-образы используют @@ -33,9 +33,9 @@ docker pull clickhouse/clickhouse-server -## Как использовать этот образ +## Как использовать этот образ {#how-to-use-image} -### Запуск экземпляра сервера +### Запуск экземпляра сервера {#start-server-instance} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server @@ -45,18 +45,18 @@ docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickh По умолчанию описанный выше экземпляр сервера запускается от имени пользователя `default` без пароля. -### Подключение к нему из нативного клиента +### Подключение к нему из нативного клиента {#connect-to-it-from-native-client} ```bash docker run -it --rm --network=container:some-clickhouse-server --entrypoint clickhouse-client clickhouse/clickhouse-server -# ИЛИ +# ИЛИ {#or} docker exec -it some-clickhouse-server clickhouse-client ``` Подробнее о клиенте ClickHouse см. в разделе [ClickHouse client](/interfaces/cli). -### Подключение с помощью curl +### Подключение с помощью curl {#connect-to-it-using-curl} ```bash echo "SELECT 'Hello, ClickHouse!'" | docker run -i --rm --network=container:some-clickhouse-server buildpack-deps:curl curl 'http://localhost:8123/?query=' -s --data-binary @- @@ -64,14 +64,14 @@ echo "SELECT 'Hello, ClickHouse!'" | docker run -i --rm --network=container:some Подробную информацию об HTTP-интерфейсе см. в разделе [ClickHouse HTTP Interface](/interfaces/http). -### Остановка и удаление контейнера +### Остановка и удаление контейнера {#stopping-removing-container} ```bash docker stop some-clickhouse-server docker rm some-clickhouse-server ``` -### Сеть +### Сеть {#networking} :::note Предопределённый пользователь `default` не имеет сетевого доступа, пока для него не задан пароль, @@ -98,7 +98,7 @@ echo 'SELECT version()' | curl 'http://localhost:8123/' --data-binary @- Пользователь по умолчанию в приведённом выше примере доступен только для запросов с localhost ::: -### Томa +### Томa {#volumes} Обычно для обеспечения сохранности данных имеет смысл смонтировать в контейнер следующие каталоги: @@ -119,7 +119,7 @@ docker run -d \ * `/docker-entrypoint-initdb.d/` - каталог со скриптами инициализации базы данных (см. ниже). -## Возможности Linux +## Возможности Linux {#linear-capabilities} У ClickHouse есть дополнительная функциональность, для работы которой требуется включить несколько [возможностей Linux (capabilities)](https://man7.org/linux/man-pages/man7/capabilities.7.html). @@ -134,29 +134,29 @@ docker run -d \ Дополнительные сведения см. в разделе ["Настройка возможностей CAP_IPC_LOCK и CAP_SYS_NICE в Docker"](/knowledgebase/configure_cap_ipc_lock_and_cap_sys_nice_in_docker) -## Конфигурация +## Конфигурация {#configuration} Контейнер открывает порт 8123 для [HTTP-интерфейса](https://clickhouse.com/docs/interfaces/http_interface/) и порт 9000 для [нативного клиента](https://clickhouse.com/docs/interfaces/tcp/). Конфигурация ClickHouse представлена файлом «config.xml» ([документация](https://clickhouse.com/docs/operations/configuration_files/)). -### Запуск экземпляра сервера с собственной конфигурацией +### Запуск экземпляра сервера с собственной конфигурацией {#start-server-instance-with-custom-config} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 -v /path/to/your/config.xml:/etc/clickhouse-server/config.xml clickhouse/clickhouse-server ``` -### Запуск сервера от имени отдельного пользователя +### Запуск сервера от имени отдельного пользователя {#start-server-custom-user} ```bash -# Директория $PWD/data/clickhouse должна существовать и принадлежать текущему пользователю +# Директория $PWD/data/clickhouse должна существовать и принадлежать текущему пользователю {#pwddataclickhouse-should-exist-and-be-owned-by-current-user} docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit nofile=262144:262144 -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` Когда вы используете образ с примонтированными локальными каталогами, вам, вероятно, нужно указать пользователя, чтобы сохранить корректное владение файлами. Используйте аргумент `--user` и смонтируйте `/var/lib/clickhouse` и `/var/log/clickhouse-server` внутрь контейнера. В противном случае образ будет выдавать ошибку и не запустится. -### Запуск сервера от root +### Запуск сервера от root {#start-server-from-root} Запуск сервера от root полезен в случаях, когда включено пространство имён пользователей. Чтобы сделать это, выполните: @@ -165,7 +165,7 @@ docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit no docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` -### Как создать базу данных и пользователя по умолчанию при запуске +### Как создать базу данных и пользователя по умолчанию при запуске {#how-to-create-default-db-and-user} Иногда может потребоваться при запуске контейнера создать пользователя (по умолчанию используется пользователь с именем `default`) и базу данных. Это можно сделать с помощью переменных окружения `CLICKHOUSE_DB`, `CLICKHOUSE_USER`, `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` и `CLICKHOUSE_PASSWORD`: @@ -173,7 +173,7 @@ docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v " docker run --rm -e CLICKHOUSE_DB=my_database -e CLICKHOUSE_USER=username -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=password -p 9000:9000/tcp clickhouse/clickhouse-server ``` -#### Управление пользователем `default` +#### Управление пользователем `default` {#managing-default-user} Пользователь `default` по умолчанию не имеет сетевого доступа, если не заданы ни `CLICKHOUSE_USER`, ни `CLICKHOUSE_PASSWORD`, ни `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT`. @@ -184,7 +184,7 @@ docker run --rm -e CLICKHOUSE_SKIP_USER_SETUP=1 -p 9000:9000/tcp clickhouse/clic ``` -## Как расширить этот образ +## Как расширить этот образ {#how-to-extend-image} Чтобы выполнить дополнительную инициализацию в образе, производном от этого, добавьте один или несколько скриптов `*.sql`, `*.sql.gz` или `*.sh` в каталог `/docker-entrypoint-initdb.d`. После того как entrypoint-скрипт вызовет `initdb`, он выполнит все файлы `*.sql`, запустит все исполняемые скрипты `*.sh` и подключит (source) все неисполняемые скрипты `*.sh`, найденные в этом каталоге, для дальнейшей инициализации перед запуском сервиса.\ Также вы можете задать переменные окружения `CLICKHOUSE_USER` & `CLICKHOUSE_PASSWORD`, которые будут использоваться clickhouse-client во время инициализации. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md index 3a16793617a..a20cc32147d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md @@ -1,4 +1,4 @@ -# Установка ClickHouse с помощью tgz-архивов +# Установка ClickHouse с помощью tgz-архивов {#install-clickhouse-using-tgz-archives} > Рекомендуется использовать официальные предкомпилированные `tgz`-архивы для всех дистрибутивов Linux, где установка пакетов `deb` или `rpm` невозможна. @@ -20,7 +20,7 @@ -## Получите последнюю версию ClickHouse +## Получите последнюю версию ClickHouse {#get-latest-version} Получите последнюю версию ClickHouse с GitHub и сохраните её в переменной `LATEST_VERSION`. @@ -31,7 +31,7 @@ export LATEST_VERSION ``` -## Определите архитектуру системы +## Определите архитектуру системы {#detect-system-architecture} Определите архитектуру системы и задайте переменную ARCH соответствующим образом: @@ -44,7 +44,7 @@ esac ``` -## Загрузка tar-архивов для каждого компонента ClickHouse +## Загрузка tar-архивов для каждого компонента ClickHouse {#download-tarballs} Скачайте tar-архивы для каждого компонента ClickHouse. Цикл сначала пытается использовать пакеты, специфичные для архитектуры, затем при необходимости переходит к универсальным. @@ -65,7 +65,7 @@ done ```bash -# Извлечение и установка пакета clickhouse-common-static +# Извлечение и установка пакета clickhouse-common-static {#extract-and-install-clickhouse-common-static-package} tar -xzvf "clickhouse-common-static-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" @@ -75,7 +75,7 @@ sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" ```bash -# Извлеките и установите пакет отладочных символов +# Извлеките и установите пакет отладочных символов {#extract-and-install-debug-symbols-package} tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" @@ -85,7 +85,7 @@ sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" ```bash -# Извлечение и установка серверного пакета с конфигурацией +# Извлечение и установка серверного пакета с конфигурацией {#extract-and-install-server-package-with-configuration} tar -xzvf "clickhouse-server-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-server-$LATEST_VERSION.tgz" sudo "clickhouse-server-$LATEST_VERSION/install/doinst.sh" configure @@ -96,7 +96,7 @@ sudo /etc/init.d/clickhouse-server start # Запуск сервера ```bash -# Извлечь и установить клиентский пакет +# Извлечь и установить клиентский пакет {#extract-and-install-client-package} tar -xzvf "clickhouse-client-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-client-$LATEST_VERSION.tgz" sudo "clickhouse-client-$LATEST_VERSION/install/doinst.sh" diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md index 9f49a18deb2..610900f143c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md @@ -5,12 +5,12 @@ import privacy_allow from "@site/static/images/knowledgebase/fix-the-developer-v -# Установите ClickHouse с помощью Homebrew +# Установите ClickHouse с помощью Homebrew {#install-clickhouse-using-homebrew} -## Установка с помощью формулы Homebrew сообщества +## Установка с помощью формулы Homebrew сообщества {#install-using-community-homebrew-formula} Чтобы установить ClickHouse на macOS с помощью [Homebrew](https://brew.sh/), воспользуйтесь формулой Homebrew, поддерживаемой сообществом ClickHouse ([clickhouse](https://formulae.brew.sh/cask/clickhouse)). @@ -19,7 +19,7 @@ brew install --cask clickhouse ``` -## Исправление ошибки проверки разработчика в macOS +## Исправление ошибки проверки разработчика в macOS {#fix-developer-verification-error-macos} Если вы устанавливаете ClickHouse с помощью `brew`, вы можете столкнуться с ошибкой со стороны macOS. По умолчанию macOS не запускает приложения или инструменты, созданные разработчиком, подлинность которого не может быть подтверждена. @@ -30,7 +30,7 @@ brew install --cask clickhouse Чтобы обойти эту ошибку проверки, нужно убрать приложение из карантина macOS — либо найдя соответствующую настройку в окне **System Settings**, используя терминал, либо переустановив ClickHouse. -### Процесс через системные настройки +### Процесс через системные настройки {#system-settings-process} Самый простой способ убрать исполняемый файл `clickhouse` из карантина: @@ -50,7 +50,7 @@ brew install --cask clickhouse Теперь вы должны иметь возможность запускать команды `clickhouse` в терминале. -### Процесс через терминал +### Процесс через терминал {#terminal-process} Иногда нажатие кнопки `Allow Anyway` не решает эту проблему, и в этом случае вы можете выполнить этот процесс через командную строку. Или вы можете просто предпочитать использовать командную строку! diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md index a9b25d487e0..c7b0e931dab 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md @@ -1,11 +1,11 @@ -# Установка ClickHouse через скрипт с использованием curl +# Установка ClickHouse через скрипт с использованием curl {#install-clickhouse-via-script-using-curl} Если вам не нужно устанавливать ClickHouse для production-среды, самый быстрый способ настройки — запустить установочный скрипт с помощью curl. Скрипт автоматически определит подходящий бинарный файл для вашей ОС. -## Установка ClickHouse с помощью curl +## Установка ClickHouse с помощью curl {#install-clickhouse-using-curl} Выполните следующую команду, чтобы скачать один бинарный файл для вашей операционной системы. @@ -18,7 +18,7 @@ curl https://clickhouse.com/ | sh ::: -## Запустите clickhouse-local +## Запустите clickhouse-local {#start-clickhouse-local} `clickhouse-local` позволяет обрабатывать локальные и удалённые файлы, используя мощный SQL-синтаксис ClickHouse и без какой-либо предварительной настройки. Данные таблиц @@ -32,7 +32,7 @@ curl https://clickhouse.com/ | sh ``` -## Запуск clickhouse-server +## Запуск clickhouse-server {#start-clickhouse-server} Если вы хотите хранить данные, вам потребуется запустить `clickhouse-server`. Вы можете запустить сервер ClickHouse с помощью следующей команды: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md index de97b67d73a..32576a9da4e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md @@ -5,7 +5,7 @@ -## Настройка RPM-репозитория +## Настройка RPM-репозитория {#setup-the-rpm-repository} Добавьте официальный репозиторий, выполнив следующую команду: @@ -24,7 +24,7 @@ sudo zypper --gpg-auto-import-keys refresh clickhouse-stable В шагах ниже команду `yum install` можно заменить на `zypper install` в зависимости от используемого менеджера пакетов. -## Установка сервера и клиента ClickHouse +## Установка сервера и клиента ClickHouse {#install-clickhouse-server-and-client-1} Установите ClickHouse, выполнив следующие команды: @@ -42,7 +42,7 @@ sudo yum install clickhouse-server-22.8.7.34 ``` -## Запуск сервера ClickHouse +## Запуск сервера ClickHouse {#start-clickhouse-server-1} Чтобы запустить сервер ClickHouse, выполните команду: @@ -65,7 +65,7 @@ clickhouse-client --password ``` -## Установка отдельного ClickHouse Keeper +## Установка отдельного ClickHouse Keeper {#install-standalone-clickhouse-keeper-1} :::tip В производственных средах мы настоятельно рекомендуем запускать ClickHouse Keeper на выделенных узлах. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md index 5075f1bc89d..3db2fcee5ed 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md @@ -1,4 +1,4 @@ -# Установка ClickHouse на Windows с помощью WSL +# Установка ClickHouse на Windows с помощью WSL {#install-clickhouse-on-windows-with-wsl} @@ -11,7 +11,7 @@ -## Установка WSL +## Установка WSL {#install-wsl} Откройте Windows PowerShell от имени администратора и выполните следующую команду: @@ -26,7 +26,7 @@ wsl --install ``` -## Установите ClickHouse с помощью скрипта curl +## Установите ClickHouse с помощью скрипта curl {#install-clickhouse-via-script-using-curl} Выполните следующую команду, чтобы установить ClickHouse с помощью скрипта curl: @@ -42,7 +42,7 @@ curl https://clickhouse.com/ | sh ``` -## Запуск clickhouse-local +## Запуск clickhouse-local {#start-clickhouse-local} `clickhouse-local` позволяет обрабатывать локальные и удалённые файлы с использованием мощного SQL-синтаксиса ClickHouse и без необходимости настройки. Данные таблиц @@ -56,7 +56,7 @@ curl https://clickhouse.com/ | sh ``` -## Запуск clickhouse-server +## Запуск clickhouse-server {#start-clickhouse-server} Если вы хотите обеспечить сохранность данных, вам нужно запустить `clickhouse-server`. Вы можете запустить сервер ClickHouse с помощью следующей команды: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md index 990d3f39aa4..5142035a658 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md @@ -10,7 +10,7 @@ doc_type: 'guide' -## Сборка из исходных кодов +## Сборка из исходных кодов {#compile-from-source} Чтобы вручную собрать ClickHouse, следуйте инструкциям по сборке для [Linux](/development/build.md) или [macOS](/development/build-osx.md). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx index f587de616b5..4dd9b2770db 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx @@ -18,32 +18,12 @@ import Docker from './_snippets/_docker.md' import {CardPrimary} from '@clickhouse/click-ui/bundled'; import {galaxyOnClick} from '@site/src/lib/galaxy/galaxy' +# Инструкции по установке \{#installation-instructions\} -# Инструкции по установке + - - -
+
Или выберите ниже платформу, дистрибутив и способ установки, чтобы просмотреть инструкции по установке ClickHouse (open source): -} - quickinstall={} - debian_prod={} - rpm_prod={} - tar_prod={} - macos_prod={} - docker={} -/> \ No newline at end of file +} quickinstall={} debian_prod={} rpm_prod={} tar_prod={} macos_prod={} docker={} /> \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/playground.md b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/playground.md index fc626e5b653..0a45394e905 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/playground.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/playground.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# Песочница ClickHouse +# Песочница ClickHouse {#clickhouse-playground} [ClickHouse Playground](https://sql.clickhouse.com) позволяет экспериментировать с ClickHouse, мгновенно выполняя запросы без необходимости развертывать собственный сервер или кластер. В Playground доступно несколько примеров наборов данных. @@ -40,7 +40,7 @@ doc_type: 'guide' -## Примеры +## Примеры {#examples} Пример HTTPS-эндпоинта с использованием `curl`: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx index ecef4f95d81..dc52945164c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx @@ -20,17 +20,16 @@ import data_sources from '@site/static/images/_snippets/data_sources.png'; import select_data_source from '@site/static/images/_snippets/select_data_source.png'; import client_details from '@site/static/images/_snippets/client_details.png'; import new_rows_from_csv from '@site/static/images/_snippets/new_rows_from_csv.png'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; +import SQLConsoleDetail from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; - -# Быстрый старт с ClickHouse Cloud +# Быстрый старт с ClickHouse Cloud \{#clickhouse-cloud-quick-start\} > Самый быстрый и простой способ начать работу с ClickHouse — создать новый -сервис в [ClickHouse Cloud](https://console.clickhouse.cloud). В этом руководстве по быстрому старту вы сможете настроить систему -в три простых шага. +> сервис в [ClickHouse Cloud](https://console.clickhouse.cloud). В этом руководстве по быстрому старту вы сможете настроить систему +> в три простых шага. - ## Создайте сервис ClickHouse + ## Создайте сервис ClickHouse \{#1-create-a-clickhouse-service\} Чтобы создать бесплатный сервис ClickHouse в [ClickHouse Cloud](https://console.clickhouse.cloud), необходимо зарегистрироваться, выполнив следующие действия: @@ -59,7 +58,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; Поздравляем! Ваш сервис ClickHouse Cloud запущен и работает, процесс подключения завершён. Продолжайте чтение, чтобы узнать, как начать приём данных и выполнять запросы к ним. - ## Подключение к ClickHouse + ## Подключение к ClickHouse \{#2-connect-to-clickhouse\} Существует два способа подключения к ClickHouse: @@ -68,7 +67,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### Подключение через SQL-консоль + ### Подключение через SQL-консоль \{#connect-using-sql-console\} Для быстрого начала работы ClickHouse предоставляет веб-консоль SQL, на которую вы будете перенаправлены после завершения онбординга. @@ -88,7 +87,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; Вот и всё — вы готовы начать использовать свой новый сервис ClickHouse! - ### Подключение приложения + ### Подключение приложения \{#connect-with-your-app\} Нажмите кнопку подключения в меню навигации. Откроется модальное окно с учетными данными для вашего сервиса и инструкциями по подключению с использованием вашего интерфейса или клиентских библиотек. @@ -98,7 +97,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; Если вы не видите клиент для вашего языка программирования, ознакомьтесь со списком [интеграций](/integrations). - ## Добавление данных + ## Добавление данных \{#3-add-data\} ClickHouse эффективнее всего работает с данными! Существует несколько способов добавления данных, большинство из которых доступны на странице Data Sources в навигационном меню. @@ -114,7 +113,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; * Загрузите файл — поддерживаемые форматы: JSON, CSV и TSV * Загрузка данных из файла по URL - ### ClickPipes + ### ClickPipes \{#clickpipes\} [ClickPipes](http://clickhouse.com/docs/integrations/clickpipes) — управляемая платформа интеграции, которая упрощает приём данных из различных источников до нескольких нажатий кнопок. Разработанная для самых требовательных рабочих нагрузок, надёжная и масштабируемая архитектура ClickPipes обеспечивает стабильную производительность и отказоустойчивость. ClickPipes можно использовать как для долгосрочной потоковой передачи данных, так и для однократной загрузки. @@ -122,7 +121,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### Добавление данных через SQL Console + ### Добавление данных через SQL Console \{#add-data-using-the-sql-console\} Как и большинство систем управления базами данных, ClickHouse логически группирует таблицы в **базы данных**. Для создания новой базы данных в ClickHouse используйте команду [`CREATE DATABASE`](../../sql-reference/statements/create/database.md): @@ -163,7 +162,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; Существует множество движков таблиц на выбор, но для простой таблицы на одноузловом сервере ClickHouse оптимальным выбором будет [`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md). ::: - #### Краткое введение в первичные ключи + #### Краткое введение в первичные ключи \{#a-brief-intro-to-primary-keys\} Прежде чем двигаться дальше, важно понять, как работают первичные ключи в ClickHouse (их реализация может оказаться неожиданной!): @@ -183,7 +182,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; Для углубленного изучения основных концепций ClickHouse см. ["Основные концепции"](../../managing-data/core-concepts/index.md). - #### Вставка данных в таблицу + #### Вставка данных в таблицу \{#insert-data-into-your-table\} Вы можете использовать знакомую команду [`INSERT INTO TABLE`](../../sql-reference/statements/insert-into.md) в ClickHouse, но важно понимать, что каждая вставка в таблицу [`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md) приводит к созданию **части** в хранилище. @@ -213,7 +212,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; SELECT * FROM helloworld.my_first_table ``` - ### Добавление данных с помощью клиента ClickHouse + ### Добавление данных с помощью клиента ClickHouse \{#add-data-using-the-clickhouse-client\} Вы также можете подключиться к вашему сервису ClickHouse Cloud с помощью инструмента командной строки [**clickhouse client**](/interfaces/cli). Нажмите `Connect` в левом меню для доступа к этим данным. В диалоговом окне выберите `Native` из выпадающего списка: @@ -293,7 +292,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; exit ``` - ### Загрузка файла + ### Загрузка файла \{#upload-a-file\} Распространённая задача при начале работы с базой данных — загрузить имеющиеся данные из файлов. Мы предоставляем образцы данных онлайн, которые можно использовать для демонстрации работы с данными о кликах (clickstream) — они включают идентификатор пользователя, посещённый URL и временную метку события. @@ -328,9 +327,9 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; ## Что дальше? \{#whats-next\} -- В [руководстве](/tutorial.md) вы загрузите 2 миллиона строк в таблицу и выполните несколько аналитических запросов -- У нас есть список [примеров наборов данных](/getting-started/index.md) с инструкциями по их загрузке -- Посмотрите наше 25-минутное видео [Начало работы с ClickHouse](https://clickhouse.com/company/events/getting-started-with-clickhouse/) -- Если ваши данные поступают из внешнего источника, ознакомьтесь с [коллекцией руководств по интеграции](/integrations/index.mdx) по подключению к очередям сообщений, базам данных, пайплайнам и многому другому -- Если вы используете инструмент визуализации (UI/BI), ознакомьтесь с [руководствами по подключению пользовательского интерфейса к ClickHouse](/integrations/data-visualization) -- Руководство по [первичным ключам](/guides/best-practices/sparse-primary-indexes.md) содержит всё, что вам нужно знать о первичных ключах и о том, как их определять \ No newline at end of file +* В [руководстве](/tutorial.md) вы загрузите 2 миллиона строк в таблицу и выполните несколько аналитических запросов +* У нас есть список [примеров наборов данных](/getting-started/index.md) с инструкциями по их загрузке +* Посмотрите наше 25-минутное видео [Начало работы с ClickHouse](https://clickhouse.com/company/events/getting-started-with-clickhouse/) +* Если ваши данные поступают из внешнего источника, ознакомьтесь с [коллекцией руководств по интеграции](/integrations/index.mdx) по подключению к очередям сообщений, базам данных, пайплайнам и многому другому +* Если вы используете инструмент визуализации (UI/BI), ознакомьтесь с [руководствами по подключению пользовательского интерфейса к ClickHouse](/integrations/data-visualization) +* Руководство по [первичным ключам](/guides/best-practices/sparse-primary-indexes.md) содержит всё, что вам нужно знать о первичных ключах и о том, как их определять \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx index 8d1929f269d..d8e3c1e1e86 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx +++ b/i18n/ru/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx @@ -14,16 +14,15 @@ import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; import {VerticalStepper} from '@clickhouse/click-ui/bundled'; - -# Быстрый старт с ClickHouse OSS +# Быстрый старт с ClickHouse OSS \{#clickhouse-oss-quick-start\} > В этом кратком руководстве по быстрому старту вы за 8 -простых шагов настроите ClickHouse OSS. Вы скачаете подходящий бинарный файл для своей ОС, -узнаете, как запускать сервер ClickHouse, и воспользуетесь клиентом ClickHouse, чтобы создать таблицу, -затем вставите в неё данные и выполните запрос для выборки этих данных. +> простых шагов настроите ClickHouse OSS. Вы скачаете подходящий бинарный файл для своей ОС, +> узнаете, как запускать сервер ClickHouse, и воспользуетесь клиентом ClickHouse, чтобы создать таблицу, +> затем вставите в неё данные и выполните запрос для выборки этих данных. - ## Загрузка ClickHouse + ## Загрузка ClickHouse \{#download-the-binary\} ClickHouse работает нативно на Linux, FreeBSD и macOS, а на Windows — через [WSL](https://learn.microsoft.com/en-us/windows/wsl/about). Самый простой способ загрузить ClickHouse локально — выполнить @@ -57,7 +56,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; Для пользователей Mac: Если вы получаете ошибки о том, что разработчик бинарного файла не может быть проверен, см. ["Исправление ошибки проверки разработчика в MacOS"](https://clickhouse.com/docs/knowledgebase/fix-developer-verification-error-in-macos). ::: - ## Запуск сервера + ## Запуск сервера \{#start-the-server\} Выполните следующую команду для запуска сервера ClickHouse: @@ -69,7 +68,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; [уровень логирования по умолчанию](https://clickhouse.com/docs/knowledgebase/why_default_logging_verbose) установлен в `trace`, а не в `warning`. - ## Запуск клиента + ## Запуск клиента \{#start-the-client\} Используйте `clickhouse-client` для подключения к вашему сервису ClickHouse. Откройте новый терминал, перейдите в каталог, где сохранён бинарный файл `clickhouse`, и @@ -85,7 +84,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; my-host :) ``` - ## Создание таблицы + ## Создание таблицы \{#create-a-table\} Используйте `CREATE TABLE` для создания новой таблицы. Стандартные SQL DDL-команды работают в ClickHouse с одним дополнением — таблицы в ClickHouse требуют @@ -104,7 +103,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; PRIMARY KEY (user_id, timestamp) ``` - ## Вставка данных + ## Вставка данных \{#insert-data\} Вы можете использовать знакомую команду `INSERT INTO TABLE` с ClickHouse, но важно понимать, что каждая вставка в таблицу `MergeTree` приводит к созданию в хранилище @@ -125,7 +124,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; (101, 'Гранулы — это наименьшие порции читаемых данных', now() + 5, 3.14159 ) ``` - ## Запросы к новой таблице + ## Запросы к новой таблице \{#query-your-new-table\} Запрос `SELECT` можно написать так же, как в любой другой SQL-базе данных: @@ -148,7 +147,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; 4 строки в наборе. Прошло: 0.008 сек. ``` - ## Вставка собственных данных + ## Вставка собственных данных \{#insert-your-own-data\} Следующий шаг — загрузить ваши данные в ClickHouse. Для приёма данных доступно множество [табличных функций](/sql-reference/table-functions/index.md) и [интеграций](/integrations). Примеры приведены на вкладках @@ -366,7 +365,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; - ## Исследование данных + ## Исследование данных \{#explore\} * Ознакомьтесь с разделом [Основные концепции](/managing-data/core-concepts), чтобы познакомиться с основами того, как ClickHouse работает «под капотом». * Ознакомьтесь с [углублённым руководством](tutorial.md), которое гораздо глубже раскрывает ключевые концепции и возможности ClickHouse. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/index.md index b013cbb0be6..53aca3cdf5e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/index.md @@ -7,13 +7,12 @@ keywords: ['оптимизация производительности', 'лу doc_type: 'reference' --- -import TableOfContents from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContents from '@site/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +# Производительность и оптимизация {#performance-and-optimizations} -# Производительность и оптимизация - -В этом разделе приведены рекомендации и лучшие практики по улучшению производительности при работе с ClickHouse. -Мы рекомендуем пользователям сначала ознакомиться с разделом [Основные концепции](/parts), +В этом разделе приведены рекомендации и лучшие практики по улучшению производительности при работе с ClickHouse. +Мы рекомендуем пользователям сначала ознакомиться с разделом [Основные концепции](/parts), в котором рассмотрены ключевые понятия, необходимые для оптимизации производительности. - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md index ba689533664..af8d05f6252 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/prewhere_05.gif' import Image from '@theme/IdealImage'; -# Как работает оптимизация PREWHERE? +# Как работает оптимизация PREWHERE? {#how-does-the-prewhere-optimization-work} [Предложение PREWHERE](/sql-reference/statements/select/prewhere) — это оптимизация выполнения запроса в ClickHouse. Она уменьшает объём операций ввода-вывода и ускоряет выполнение запроса, избегая ненужного чтения данных и отфильтровывая лишние данные до чтения со встроенного диска столбцов, не участвующих в фильтрации. @@ -109,7 +109,7 @@ ClickHouse начинает обработку PREWHERE, ① читая выбр -## Как измерить влияние PREWHERE +## Как измерить влияние PREWHERE {#how-to-measure-prewhere-impact} Чтобы убедиться, что PREWHERE действительно ускоряет ваши запросы, вы можете сравнить их производительность с включённой и выключенной настройкой `optimize_move_to_prewhere`. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md index 332c2023cce..1b0d0f96257 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md @@ -11,7 +11,7 @@ import queryOptimizationDiagram1 from '@site/static/images/guides/best-practices import Image from '@theme/IdealImage'; -# Простое руководство по оптимизации запросов +# Простое руководство по оптимизации запросов {#a-simple-guide-for-query-optimization} В этом разделе на распространённых сценариях показано, как использовать различные методы повышения производительности и оптимизации, такие как [анализатор](/operations/analyzer), [профилирование запросов](/operations/optimizing-performance/sampling-query-profiler) и [отказ от использования Nullable-столбцов](/optimize/avoid-nullable-columns), чтобы улучшить производительность выполнения запросов в ClickHouse. @@ -61,7 +61,7 @@ ClickHouse предоставляет богатый набор инструме -## Набор данных +## Набор данных {#dataset} Мы используем реальный пример, чтобы проиллюстрировать наш подход к оптимизации производительности запросов.  @@ -112,9 +112,9 @@ ORDER BY tuple() ``` -## Найдите медленные запросы +## Найдите медленные запросы {#spot-the-slow-queries} -### Журнал запросов +### Журнал запросов {#query-logs} По умолчанию ClickHouse собирает и записывает информацию о каждом выполненном запросе в [журналы запросов](/operations/system-tables/query_log). Эти данные хранятся в таблице `system.query_log`.  @@ -431,7 +431,7 @@ _Наконец, будьте внимательны к выбросам: дов -## Базовая оптимизация +## Базовая оптимизация {#basic-optimization} Теперь, когда у нас есть фреймворк для тестирования, можно приступать к оптимизации. @@ -439,7 +439,7 @@ _Наконец, будьте внимательны к выбросам: дов В зависимости от того, как вы осуществляли приём данных, вы могли использовать [возможности](/interfaces/schema-inference) ClickHouse для вывода схемы таблицы на основе принятых данных. Хотя это очень удобно на начальном этапе, если вы хотите оптимизировать производительность запросов, вам потребуется пересмотреть схему данных, чтобы она наилучшим образом соответствовала вашему сценарию применения. -### Nullable +### Nullable {#nullable} Как описано в [документации по лучшим практикам](/best-practices/select-data-types#avoid-nullable-columns), по возможности избегайте столбцов с типом Nullable. Их часто хочется использовать, так как они делают механизм ингестии данных более гибким, но они негативно влияют на производительность, поскольку каждый раз приходится обрабатывать дополнительный столбец. @@ -485,7 +485,7 @@ dropoff_location_id_nulls: 0 У нас есть только два столбца со значениями NULL: `mta_tax` и `payment_type`. Остальные поля не должны использовать тип столбца `Nullable`. -### Низкая кардинальность +### Низкая кардинальность {#low-cardinality} Простая оптимизация для строковых типов — максимально эффективно использовать тип данных LowCardinality. Как описано в [документации по низкой кардинальности](/sql-reference/data-types/lowcardinality), ClickHouse применяет словарное кодирование к столбцам LowCardinality, что значительно повышает производительность запросов.  @@ -515,7 +515,7 @@ uniq(vendor_id): 3 Благодаря низкой кардинальности эти четыре столбца — `ratecode_id`, `pickup_location_id`, `dropoff_location_id` и `vendor_id` — являются хорошими кандидатами для типа данных LowCardinality. -### Оптимизируйте тип данных +### Оптимизируйте тип данных {#optimize-data-type} ClickHouse поддерживает большое количество типов данных. Для оптимизации производительности и уменьшения объёма занимаемого на диске пространства данных убедитесь, что вы выбираете наименьший возможный тип данных, подходящий для вашего сценария использования.  @@ -538,7 +538,7 @@ Query id: 4306a8e1-2a9c-4b06-97b4-4d902d2233eb Для дат следует выбирать такую точность, которая соответствует вашему набору данных и лучше всего подходит для выполнения запросов, которые вы планируете запускать. -### Применим оптимизации +### Применим оптимизации {#apply-the-optimizations} Давайте создадим новую таблицу, чтобы использовать оптимизированную схему и повторно выполнить приём данных. @@ -604,7 +604,7 @@ ORDER BY size DESC Новая таблица значительно меньше предыдущей. Мы наблюдаем сокращение объёма дискового пространства, занимаемого таблицей, примерно на 34% (7,38 GiB против 4,89 GiB). -## Важность первичных ключей +## Важность первичных ключей {#the-importance-of-primary-keys} Первичные ключи в ClickHouse работают иначе, чем в большинстве традиционных систем управления базами данных. В таких системах первичные ключи обеспечивают уникальность и целостность данных. Любая попытка вставки дублирующихся значений первичного ключа отклоняется, а для быстрого поиска обычно создаётся индекс на основе B-tree или хэша.  @@ -616,7 +616,7 @@ ORDER BY size DESC Другие возможности, поддерживаемые ClickHouse, такие как проекция (Projection) или материализованное представление, позволяют использовать другой набор первичных ключей для тех же данных. Во второй части этой серии статей в блоге это будет рассмотрено подробнее.  -### Выбор первичных ключей +### Выбор первичных ключей {#choose-primary-keys} Выбор корректного набора первичных ключей — сложная тема, и для нахождения наилучшей комбинации могут потребоваться компромиссы и эксперименты.  diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md index f007f07f47c..befb3ef4e91 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/query-parallelis import Image from '@theme/IdealImage'; -# Как ClickHouse выполняет запросы параллельно +# Как ClickHouse выполняет запросы параллельно {#how-clickhouse-executes-a-query-in-parallel} ClickHouse [создан для высокой скорости](/concepts/why-clickhouse-is-so-fast). Он выполняет запросы в высокопараллельном режиме, используя все доступные ядра CPU, распределяя данные по потокам обработки и часто подводя оборудование к пределам его возможностей. @@ -66,7 +66,7 @@ ClickHouse [создан для высокой скорости](/concepts/why-c -## Мониторинг параллелизма запросов +## Мониторинг параллелизма запросов {#monitoring-query-parallelism} Используйте эти инструменты, чтобы убедиться, что ваш запрос полностью задействует доступные ресурсы CPU и диагностировать случаи, когда это не так. @@ -126,12 +126,12 @@ FROM Примечание: читайте визуализацию слева направо. Каждая строка представляет параллельный конвейер обработки, который передаёт данные блок за блоком, применяя преобразования, такие как фильтрация, агрегация и финальные стадии обработки. В этом примере вы видите четыре параллельных конвейера, соответствующих настройке `max_threads = 4`. -### Балансировка нагрузки между конвейерами обработки +### Балансировка нагрузки между конвейерами обработки {#load-balancing-across-processing-lanes} Обратите внимание, что операторы `Resize` в физическом плане выше [переразбивают на части и перераспределяют](/academic_overview#4-2-multi-core-parallelization) потоки блоков данных между конвейерами обработки, чтобы поддерживать их равномерную загрузку. Такое перебалансирование особенно важно, когда диапазоны данных различаются по количеству строк, удовлетворяющих предикатам запроса, иначе некоторые конвейеры могут быть перегружены, в то время как другие простаивают. Перераспределяя работу, более быстрые конвейеры фактически помогают более медленным, оптимизируя общее время выполнения запроса. -## Почему max_threads не всегда соблюдается +## Почему max_threads не всегда соблюдается {#why-max-threads-isnt-always-respected} Как отмечалось выше, количество параллельных потоков обработки `n` контролируется параметром `max_threads`, который по умолчанию равен числу ядер CPU, доступных ClickHouse на сервере: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md index a51f9455a12..c8e59e8fbde 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md @@ -10,7 +10,7 @@ keywords: ['индексы пропуска данных', 'пропуск да -# Примеры индексов пропуска данных +# Примеры индексов пропуска данных {#data-skipping-index-examples} На этой странице собраны примеры индексов пропуска данных ClickHouse, показано, как объявить каждый тип, когда их использовать и как проверить, что они используются. Все возможности работают с [таблицами семейства MergeTree](/engines/table-engines/mergetree-family/mergetree). @@ -33,7 +33,7 @@ ClickHouse поддерживает пять типов индексов про В каждом разделе приводятся примеры с демонстрационными данными и показывается, как проверить использование индекса при выполнении запроса. -## Индекс MinMax +## Индекс MinMax {#minmax-index} Индекс `minmax` лучше всего подходит для диапазонных предикатов по слабо упорядоченным данным или по столбцам, коррелированным с `ORDER BY`. @@ -64,7 +64,7 @@ SELECT count() FROM events WHERE ts >= now() - 3600; См. [подробный пример](/best-practices/use-data-skipping-indices-where-appropriate#example) с `EXPLAIN` и отсечением данных. -## Индекс set +## Индекс set {#set-index} Используйте индекс `set`, когда локальная кардинальность на уровне блока низкая; он неэффективен, если в каждом блоке много различных значений. @@ -81,7 +81,7 @@ SELECT * FROM events WHERE user_id IN (101, 202); Процесс создания и материализации, а также эффект до/после показаны в [базовом руководстве по работе](/optimize/skipping-indexes#basic-operation). -## Универсальный Bloom-фильтр (скалярный) +## Универсальный Bloom-фильтр (скалярный) {#generic-bloom-filter-scalar} Индекс `bloom_filter` хорошо подходит для поиска «иголки в стоге сена» по условию равенства или проверки принадлежности (оператор IN). Он принимает необязательный параметр — вероятность ложноположительных срабатываний (по умолчанию 0.025). @@ -96,7 +96,7 @@ SELECT * FROM events WHERE value IN (7, 42, 99); ``` -## N-граммный фильтр Блума (ngrambf_v1) для поиска подстрок +## N-граммный фильтр Блума (ngrambf_v1) для поиска подстрок {#n-gram-bloom-filter-ngrambf-v1-for-substring-search} Индекс `ngrambf_v1` разбивает строки на n-граммы. Он хорошо подходит для запросов вида `LIKE '%...%'`. Поддерживаются типы String/FixedString/Map (через mapKeys/mapValues), а также настраиваемые размер, количество хэшей и значение seed. Дополнительные сведения см. в документации по [N-граммному фильтру Блума](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter). @@ -133,7 +133,7 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) AS k; -- ~13 См. [документацию по параметрам](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter) для получения подробных рекомендаций по настройке. -## Токен-блум-фильтр (tokenbf_v1) для поиска по словам +## Токен-блум-фильтр (tokenbf_v1) для поиска по словам {#token-bloom-filter-tokenbf-v1-for-word-based-search} `tokenbf_v1` индексирует токены, разделённые небуквенно-цифровыми символами. Используйте его с [`hasToken`](/sql-reference/functions/string-search-functions#hasToken), с шаблонами слов `LIKE` или с операторами равенства (`=`) и `IN`. Поддерживает типы `String`/`FixedString`/`Map`. @@ -153,7 +153,7 @@ SELECT count() FROM logs WHERE hasToken(lower(msg), 'exception'); См. примеры по наблюдаемости и рекомендации по выбору token vs ngram [здесь](/use-cases/observability/schema-design#bloom-filters-for-text-search). -## Добавление индексов при выполнении CREATE TABLE (несколько примеров) +## Добавление индексов при выполнении CREATE TABLE (несколько примеров) {#add-indexes-during-create-table-multiple-examples} Индексы пропуска данных также поддерживают составные выражения и типы `Map`/`Tuple`/`Nested`. Это показано в примере ниже: @@ -175,7 +175,7 @@ ORDER BY u64; ``` -## Материализация индекса на существующих данных и проверка +## Материализация индекса на существующих данных и проверка {#materializing-on-existing-data-and-verifying} Вы можете добавить индекс к уже существующим частям данных с помощью `MATERIALIZE` и проверить отсечение с помощью `EXPLAIN` или трассировочных журналов, как показано ниже: @@ -211,7 +211,7 @@ SET send_logs_level = 'trace'; -## Временно игнорировать или принудительно использовать индексы +## Временно игнорировать или принудительно использовать индексы {#temporarily-ignore-or-force-indexes} Отключайте отдельные индексы по имени для конкретных запросов во время тестирования и устранения неполадок. Также доступны настройки для принудительного использования индексов при необходимости. См. [`ignore_data_skipping_indices`](/operations/settings/settings#ignore_data_skipping_indices). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md index 45006697f1b..7e09f3a40c9 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md @@ -13,7 +13,7 @@ import bad_skip from '@site/static/images/guides/best-practices/bad_skip.png'; import Image from '@theme/IdealImage'; -# Что такое индексы пропуска данных в ClickHouse +# Что такое индексы пропуска данных в ClickHouse {#understanding-clickhouse-data-skipping-indexes} @@ -29,7 +29,7 @@ import Image from '@theme/IdealImage'; -## Базовый принцип работы +## Базовый принцип работы {#basic-operation} Пользователи могут использовать индексы пропуска данных (Data Skipping Indexes) только для таблиц семейства MergeTree. Каждый индекс пропуска данных имеет четыре основных аргумента: @@ -121,11 +121,11 @@ SET send_logs_level='trace'; default.skip_table (933d4b2c-8cea-4bf9-8c93-c56e900eefd1) (SelectExecutor): Индекс `vix` пропустил 6102/6104 гранул. ``` -## Типы индексов пропуска данных +## Типы индексов пропуска данных {#skip-index-types} {/* vale off */ } -### minmax +### minmax {#minmax} {/* vale on */ } @@ -137,7 +137,7 @@ SET send_logs_level='trace'; {/* vale off */ } -### SET +### SET {#set} {/* vale on */ } @@ -146,7 +146,7 @@ SET send_logs_level='trace'; Затраты, производительность и эффективность этого индекса зависят от кардинальности внутри блоков. Если каждый блок содержит большое количество уникальных значений, то либо вычисление условия запроса по большому набору индекса будет очень ресурсоёмким, либо индекс не будет применён, потому что он пуст из‑за превышения max_size. -### Типы фильтров Блума +### Типы фильтров Блума {#bloom-filter-types} *Фильтр Блума* — это структура данных, которая позволяет эффективно по памяти проверять принадлежность к набору ценой небольшой вероятности ложноположительных результатов. Ложноположительные срабатывания не являются существенной проблемой в случае пропускающих индексов, поскольку единственный недостаток — чтение нескольких лишних блоков. Однако возможность ложноположительных срабатываний означает, что индексированное выражение, как правило, должно быть истинным, иначе часть корректных данных может быть пропущена. @@ -187,7 +187,7 @@ SET send_logs_level='trace'; -## Рекомендации по использованию skip index +## Рекомендации по использованию skip index {#skip-best-practices} Skip-индексы неочевидны, особенно для пользователей, привыкших к вторичным строковым индексам из мира СУБД или инвертированным индексам из документных хранилищ. Чтобы получить от них пользу, применение индекса пропуска данных (data skipping index) в ClickHouse должно позволять избежать достаточного количества чтений гранул, чтобы компенсировать стоимость вычисления индекса. Критически важно, что если значение встречается хотя бы один раз в индексируемом блоке, это означает, что весь блок должен быть считан в память и обработан, а затраты на вычисление индекса окажутся напрасными. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md index d029a951e34..c8440883b2e 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md @@ -36,7 +36,7 @@ import sparsePrimaryIndexes15b from '@site/static/images/guides/best-practices/s import Image from '@theme/IdealImage'; -# Практическое введение в первичные индексы ClickHouse +# Практическое введение в первичные индексы ClickHouse {#a-practical-introduction-to-primary-indexes-in-clickhouse} ## Введение {#introduction} @@ -73,7 +73,7 @@ import Image from '@theme/IdealImage'; Все показатели времени выполнения, приведённые в этом документе, основаны на локальном запуске ClickHouse 22.2.1 на MacBook Pro с чипом Apple M1 Pro и 16 ГБ оперативной памяти. -### Полное сканирование таблицы +### Полное сканирование таблицы {#a-full-table-scan} Чтобы увидеть, как выполняется запрос по нашему набору данных без первичного ключа, создадим таблицу (с движком таблиц MergeTree), выполнив следующий SQL DDL‑оператор: @@ -150,7 +150,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 10 rows in set. Elapsed: 0.022 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 8,87 млн строк, 70,45 МБ (398,53 млн строк/с., 3,17 ГБ/с.) ``` @@ -172,7 +172,7 @@ LIMIT 10; Ниже подробно показано, как ClickHouse строит и использует свой разрежённый первичный индекс. Позже в статье мы обсудим лучшие практики выбора, удаления и упорядочивания столбцов таблицы, используемых для построения индекса (столбцов первичного ключа). -### Таблица с первичным ключом +### Таблица с первичным ключом {#a-table-with-a-primary-key} Создайте таблицу с составным первичным ключом по столбцам UserID и URL: @@ -496,7 +496,7 @@ SELECT UserID, URL FROM file('primary-hits_UserID_URL.idx', 'RowBinary', 'UserID Последствия этого для производительности выполнения запросов мы рассмотрим подробнее позже. -### Первичный индекс используется для отбора гранул +### Первичный индекс используется для отбора гранул {#the-primary-index-is-used-for-selecting-granules} Теперь мы можем выполнять запросы с использованием первичного индекса. @@ -528,7 +528,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 10 rows in set. Elapsed: 0.005 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 8,19 тыс. строк, 740,18 КБ (1,53 млн. строк/с., 138,59 МБ/с.) ``` @@ -539,13 +539,13 @@ LIMIT 10; ```response ...Executor): Key condition: (column 0 in [749927693, 749927693]) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Running binary search on index range for part all_1_9_2 (1083 marks) ...Executor): Found (LEFT) boundary mark: 176 ...Executor): Found (RIGHT) boundary mark: 177 ...Executor): Found continuous range in 19 steps ...Executor): Selected 1/1 parts by partition key, 1 parts by primary key, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 1/1083 marks by primary key, 1 marks to read from 1 ranges ...Reading ...approx. 8192 rows starting from 1441792 ``` @@ -594,7 +594,7 @@ LIMIT 10; │ UserID │ │ Condition: (UserID in [749927693, 749927693]) │ │ Parts: 1/1 │ -# highlight-next-line +# highlight-next-line {#highlight-next-line} │ Granules: 1/1083 │ └───────────────────────────────────────────────────────────────────────────────────────┘ @@ -713,7 +713,7 @@ ClickHouse нужно найти (и потоково считать все зн -### Вторичные ключевые столбцы могут быть (не)эффективными +### Вторичные ключевые столбцы могут быть (не)эффективными {#secondary-key-columns-can-not-be-inefficient} Когда запрос фильтрует данные по столбцу, который является частью составного ключа и при этом является первым ключевым столбцом, [ClickHouse выполняет алгоритм бинарного поиска по индексным меткам этого ключевого столбца](#the-primary-index-is-used-for-selecting-granules). @@ -759,7 +759,7 @@ LIMIT 10; └────────────┴───────┘ 10 строк в наборе. Прошло: 0.086 сек. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 8.81 млн строк, 799.69 МБ (102.11 млн строк/с., 9.27 ГБ/с.) ``` @@ -771,11 +771,11 @@ LIMIT 10; ```response ...Executor): Условие по ключу: (столбец 1 в ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Использован общий поиск с исключениями по индексу для части all_1_9_2 за 1537 шагов ...Executor): Выбрано 1/1 частей по ключу партиционирования, 1 часть по первичному ключу, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 1076/1083 засечек по первичному ключу, 1076 засечек для чтения из 5 диапазонов ...Executor): Чтение примерно 8814592 строк в 10 потоков ``` @@ -844,7 +844,7 @@ LIMIT 10; В нашем примерном наборе данных оба ключевых столбца (UserID, URL) имеют схожую высокую кардинальность, и, как уже объяснялось, универсальный алгоритм поиска с исключением не очень эффективен, когда предшествующий ключевой столбец для столбца URL имеет высокую (или схожую) кардинальность. -### Примечание об индексе пропуска данных +### Примечание об индексе пропуска данных {#note-about-data-skipping-index} Из-за схожей высокой кардинальности `UserID` и `URL` наша [фильтрация запросов по URL](/guides/best-practices/sparse-primary-indexes#secondary-key-columns-can-not-be-inefficient) также не дала бы существенного выигрыша от создания [вторичного индекса пропуска данных](./skipping-indexes.md) на столбце `URL` в нашей [таблице с составным первичным ключом (UserID, URL)](#a-table-with-a-primary-key). @@ -909,7 +909,7 @@ ClickHouse создал дополнительный индекс, которы -### Вариант 1: вторичные таблицы +### Вариант 1: вторичные таблицы {#option-1-secondary-tables} @@ -989,7 +989,7 @@ LIMIT 10; └────────────┴───────┘ 10 строк в наборе. Затрачено: 0.017 сек. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 319.49 тысяч строк, 11.38 MB (18.41 million rows/s., 655.75 MB/s.) ``` @@ -1005,13 +1005,13 @@ LIMIT 10; ```response ...Executor): Условие по ключу: (столбец 0 в ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Выполняется бинарный поиск по диапазону индекса для части all_1_9_2 (1083 гранулы) ...Executor): Найдена (ЛЕВАЯ) граничная гранула: 644 ...Executor): Найдена (ПРАВАЯ) граничная гранула: 683 ...Executor): Найден непрерывный диапазон за 19 шагов ...Executor): Выбрано 1/1 частей по ключу партиционирования, 1 часть по первичному ключу, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 39/1083 гранул по первичному ключу, 39 гранул для чтения из 1 диапазона ...Executor): Чтение примерно 319488 строк с использованием 2 потоков ``` @@ -1146,7 +1146,7 @@ LIMIT 10; └────────────┴───────┘ 10 строк в наборе. Прошло: 0.026 сек. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 335.87 тыс. строк, 13.54 МБ (12.91 млн строк/с., 520.38 МБ/с.) ``` @@ -1159,7 +1159,7 @@ LIMIT 10; ```response ...Executor): Key condition: (column 0 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Running binary search on index range ... ... ...Executor): Selected 4/4 parts by partition key, 4 parts by primary key, @@ -1236,7 +1236,7 @@ LIMIT 10; └────────────┴───────┘ 10 строк в наборе. Прошло: 0.029 сек. -# highlight-next-line +# highlight-next-line {#highlight-next-line} Обработано 319.49 тыс. строк, 1 1.38 МБ (11.05 млн строк/сек., 393.58 МБ/сек.) ``` @@ -1249,14 +1249,14 @@ LIMIT 10; ```response ...Executor): Условие по ключу: (столбец 0 в ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Выполняется бинарный поиск по диапазону индекса для части prj_url_userid (1083 гранулы) ...Executor): ... # highlight-next-line ...Executor): Выбрана полная обычная проекция prj_url_userid ...Executor): требуемые столбцы проекции: URL, UserID ...Executor): Выбрано 1/1 частей по ключу партиции, 1 частей по первичному ключу, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 39/1083 гранул по первичному ключу, 39 гранул для чтения из 1 диапазона ...Executor): Чтение приблизительно 319488 строк с использованием 2 потоков ``` @@ -1448,7 +1448,7 @@ WHERE UserID = 112304 Причина в том, что [generic exclusion search algorithm](https://github.com/ClickHouse/ClickHouse/blob/22.3/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp#L1444) работает наиболее эффективно, когда [гранулы](#the-primary-index-is-used-for-selecting-granules) выбираются по столбцу вторичного ключа, при этом предшествующий ему столбец ключа имеет более низкую кардинальность. Мы подробно показали это в [предыдущем разделе](#generic-exclusion-search-algorithm) данного руководства. -### Оптимальный коэффициент сжатия файлов данных +### Оптимальный коэффициент сжатия файлов данных {#efficient-filtering-on-secondary-key-columns} Этот запрос сравнивает коэффициент сжатия столбца `UserID` в двух таблицах, созданных выше: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md index 855aa7ff57a..83890616327 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md @@ -19,8 +19,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; Используемый язык запросов задаётся параметром `dialect`. - -## Стандартный SQL +## Стандартный SQL {#standard-sql} Стандартный SQL — язык запросов, используемый в ClickHouse по умолчанию. @@ -28,8 +27,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; SET dialect = 'clickhouse' ``` - -## Конвейерный реляционный язык запросов (PRQL) +## Конвейерный реляционный язык запросов (PRQL) {#pipelined-relational-query-language-prql} @@ -52,8 +50,7 @@ aggregate { Внутренне ClickHouse транспилирует PRQL в SQL для выполнения запросов PRQL. - -## Язык запросов Kusto (KQL) +## Язык запросов Kusto (KQL) {#kusto-query-language-kql} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md index 9e565577392..cd2f4576e75 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md @@ -6,13 +6,11 @@ keywords: ['materialized view', 'агрегация'] doc_type: 'guide' --- - - -# Каскадные материализованные представления +# Каскадные материализованные представления {#cascading-materialized-views} Этот пример демонстрирует, как создать материализованное представление, а затем — как создать второе материализованное представление на основе первого (каскадно). На этой странице вы увидите, как это сделать, узнаете о многих возможностях и ограничениях. Разные варианты использования можно реализовать, создавая материализованное представление, использующее в качестве источника другое материализованное представление. - + + + + allowfullscreen +/> -
+
ClickHouse предоставляет несколько подходов к работе с JSON, каждый из которых имеет свои преимущества, недостатки и области применения. В этом руководстве мы рассмотрим, как загружать JSON и оптимально проектировать схему. Руководство состоит из следующих разделов: -- [Loading JSON](/integrations/data-formats/json/loading) - Загрузка и выполнение запросов к структурированному и полуструктурированному JSON в ClickHouse с использованием простых схем. -- [JSON schema inference](/integrations/data-formats/json/inference) - Использование автоматического вывода схемы JSON для выполнения запросов к JSON и создания схем таблиц. -- [Designing JSON schema](/integrations/data-formats/json/schema) - Этапы проектирования и оптимизации схемы JSON. -- [Exporting JSON](/integrations/data-formats/json/exporting) - Как экспортировать JSON. -- [Handling other JSON Formats](/integrations/data-formats/json/other-formats) - Рекомендации по работе с форматами JSON, отличными от формата с разделением по строкам (NDJSON). -- [Other approaches to modeling JSON](/integrations/data-formats/json/other-approaches) - Устаревшие подходы к моделированию JSON. **Не рекомендуется к использованию.** \ No newline at end of file +* [Loading JSON](/integrations/data-formats/json/loading) - Загрузка и выполнение запросов к структурированному и полуструктурированному JSON в ClickHouse с использованием простых схем. +* [JSON schema inference](/integrations/data-formats/json/inference) - Использование автоматического вывода схемы JSON для выполнения запросов к JSON и создания схем таблиц. +* [Designing JSON schema](/integrations/data-formats/json/schema) - Этапы проектирования и оптимизации схемы JSON. +* [Exporting JSON](/integrations/data-formats/json/exporting) - Как экспортировать JSON. +* [Handling other JSON Formats](/integrations/data-formats/json/other-formats) - Рекомендации по работе с форматами JSON, отличными от формата с разделением по строкам (NDJSON). +* [Other approaches to modeling JSON](/integrations/data-formats/json/other-approaches) - Устаревшие подходы к моделированию JSON. **Не рекомендуется к использованию.** \ No newline at end of file diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md index f7691d59497..7dc6de90385 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md @@ -17,7 +17,7 @@ doc_type: 'guide' -## Загрузка структурированного JSON +## Загрузка структурированного JSON {#loading-structured-json} В этом разделе предполагается, что данные находятся в формате [`NDJSON`](https://github.com/ndjson/ndjson-spec) (Newline delimited JSON — JSON, где объекты разделены переводами строки), который в ClickHouse известен как [`JSONEachRow`](/interfaces/formats/JSONEachRow), и хорошо структурированы, то есть имена и типы столбцов фиксированы. Формат `NDJSON` является предпочтительным для загрузки JSON из‑за своей компактности и эффективного использования места, но поддерживаются и другие форматы как для [ввода, так и вывода](/interfaces/formats/JSON). @@ -124,7 +124,7 @@ FORMAT JSONEachRow В этих примерах используется формат `JSONEachRow`. Поддерживаются и другие распространённые форматы JSON; примеры их загрузки приведены [здесь](/integrations/data-formats/json/other-formats). -## Загрузка полуструктурированного JSON +## Загрузка полуструктурированного JSON {#loading-semi-structured-json} В нашем предыдущем примере мы загружали JSON с фиксированной структурой и хорошо известными именами ключей и типами. На практике так бывает не всегда — ключи могут добавляться, а их типы меняться. Это часто встречается в сценариях, связанных с данными для наблюдаемости (Observability). @@ -200,7 +200,7 @@ LIMIT 2 Обратите внимание на разницу в производительности при загрузке данных. Для JSON-столбца при вставке требуется определение типов, а также дополнительное место для хранения, если есть столбцы, содержащие значения более чем одного типа. Хотя тип JSON можно настроить (см. [Проектирование схемы JSON](/integrations/data-formats/json/schema)) так, чтобы его производительность была сопоставима с явным объявлением столбцов, по умолчанию он намеренно остаётся гибким. Однако эта гибкость имеет свою цену. -### Когда использовать тип JSON +### Когда использовать тип JSON {#when-to-use-the-json-type} Используйте тип JSON, когда ваши данные: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md index 0464a38de60..dc9bb5522cb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md @@ -6,9 +6,7 @@ keywords: ['json', 'formats'] doc_type: 'reference' --- - - -# Другие подходы к моделированию JSON +# Другие подходы к моделированию JSON {#other-approaches-to-modeling-json} **Ниже приведены альтернативные подходы к моделированию JSON в ClickHouse. Они приведены для полноты и использовались до появления типа JSON, поэтому, как правило, не рекомендуются и не применяются в большинстве сценариев.** @@ -16,9 +14,7 @@ doc_type: 'reference' К разным объектам в одной и той же схеме можно применять разные техники. Например, для одних объектов лучше всего подойдет тип `String`, а для других — тип `Map`. Обратите внимание, что после выбора типа `String` больше не требуется принимать какие-либо решения о схеме. Напротив, в ключ `Map` можно вложить подчиненные объекты, включая `String`, представляющую JSON, как показано ниже: ::: - - -## Использование типа String +## Использование типа String {#using-string} Если объекты очень динамичны, не имеют предсказуемой структуры и содержат произвольные вложенные объекты, следует использовать тип `String`. Значения можно извлекать во время выполнения запроса с помощью JSON‑функций, как показано ниже. @@ -95,7 +91,6 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/arxiv/arxiv.j 0 строк в наборе. Прошло: 25.186 с. Обработано 2.52 миллиона строк, 1.38 ГБ (99.89 тысячи строк/с, 54.79 МБ/с.) ``` - Предположим, мы хотим посчитать количество статей, выпущенных по годам. Сравним следующий запрос, использующий только строковое поле, с [структурированной версией](/integrations/data-formats/json/inference#creating-tables) схемы: ```sql @@ -156,7 +151,7 @@ LIMIT 10 Гибкость такого подхода имеет очевидную цену в виде потерь производительности и усложнения синтаксиса, поэтому его следует использовать только для высокодинамичных объектов в схеме. -### Простые JSON-функции +### Простые JSON-функции {#simple-json-functions} Выше приведены примеры использования семейства функций JSON*. Они используют полноценный JSON-парсер на базе [simdjson](https://github.com/simdjson/simdjson), который строго относится к разбору и различает одноимённые поля на разных уровнях вложенности. Эти функции способны корректно обрабатывать синтаксически правильный, но плохо отформатированный JSON, например с двойными пробелами между ключами. @@ -174,7 +169,6 @@ LIMIT 10 В то время как следующий пример будет успешно разобран: - ````json {"@timestamp":893964617,"clientip":"40.135.0.0","request":{"method":"GET", "path":"/images/hm_bg.jpg","version":"HTTP/1.0"},"status":200,"size":24736} @@ -209,8 +203,7 @@ LIMIT 10 Приведённый выше запрос использует `simpleJSONExtractString` для извлечения ключа `created`, учитывая, что нам нужно только первое значение для даты публикации. В этом случае ограничения функций `simpleJSON*` приемлемы ради повышения производительности. - -## Использование типа Map +## Использование типа Map {#using-map} Если объект используется для хранения произвольных ключей (преимущественно одного типа), рассмотрите использование типа `Map`. В идеале количество уникальных ключей не должно превышать нескольких сотен. Тип `Map` также можно использовать для объектов с вложенными объектами при условии, что последние однородны по своим типам. В целом мы рекомендуем использовать тип `Map` для лейблов и тегов, например лейблов подов Kubernetes в логах. @@ -224,7 +217,7 @@ LIMIT 10 При моделировании объектов как `Map` в качестве ключа используется строка (`String`), в которой хранится имя ключа JSON. Поэтому `Map` всегда будет иметь вид `Map(String, T)`, где `T` зависит от данных. ::: -#### Примитивные значения +#### Примитивные значения {#primitive-values} Простейшее применение `Map` — когда объект содержит значения одного и того же примитивного типа. В большинстве случаев это означает использование типа `String` для значения `T`. @@ -281,13 +274,12 @@ SELECT company.labels['type'] AS type FROM people Полный набор функций `Map`, доступных для выполнения запросов, описан [здесь](/sql-reference/functions/tuple-map-functions.md). Если ваши данные не имеют согласованного типа, существуют функции для выполнения [необходимого приведения типов](/sql-reference/functions/type-conversion-functions). -#### Значения объектов +#### Значения объектов {#object-values} Тип `Map` также можно использовать для представления объектов с вложенными объектами, при условии, что у последних согласованы их типы. Предположим, ключ `tags` для нашего объекта `persons` требует согласованной структуры, где вложенный объект для каждого `tag` имеет столбцы `name` и `time`. Упрощённый пример такого JSON-документа может выглядеть следующим образом: - ```json { "id": 1, @@ -360,8 +352,7 @@ FORMAT JSONEachRow } ``` - -## Использование типа Nested +## Использование типа Nested {#using-nested} Тип [Nested](/sql-reference/data-types/nested-data-structures/nested) можно использовать для моделирования статических объектов, которые редко изменяются, в качестве альтернативы `Tuple` и `Array(Tuple)`. В целом мы рекомендуем избегать использования этого типа для JSON, поскольку его поведение часто оказывается запутанным. Основное преимущество `Nested` заключается в том, что подколонки могут использоваться в ключах сортировки. @@ -396,11 +387,11 @@ CREATE table http ) ENGINE = MergeTree() ORDER BY (status, timestamp); ``` -### flatten_nested +### flatten_nested {#flatten_nested} Параметр `flatten_nested` управляет поведением типа данных `Nested`. -#### flatten_nested=1 +#### flatten_nested=1 {#flatten_nested1} Значение `1` (по умолчанию) не поддерживает произвольную глубину вложенности. При таком значении проще всего рассматривать вложенную структуру данных как несколько столбцов [Array](/sql-reference/data-types/array) одинаковой длины. Поля `method`, `path` и `version` фактически являются отдельными столбцами `Array(Type)` с одним критическим ограничением: **длина полей `method`, `path` и `version` должна быть одинаковой.** Если мы воспользуемся `SHOW CREATE TABLE`, это иллюстрируется следующим образом: @@ -471,10 +462,9 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth Получена 1 строка. Время выполнения: 0.002 сек. ``` - Обратите внимание, что использование `Array` для подстолбцов означает, что можно потенциально использовать весь спектр [функций работы с массивами](/sql-reference/functions/array-functions), включая клаузу [`ARRAY JOIN`](/sql-reference/statements/select/array-join), что полезно, если ваши столбцы содержат несколько значений. -#### flatten_nested=0 +#### flatten_nested=0 {#flatten_nested0} Это позволяет использовать произвольный уровень вложенности и означает, что вложенные столбцы остаются одним массивом `Tuple` — по сути, они становятся тем же самым, что и `Array(Tuple)`. @@ -546,7 +536,7 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth Получена 1 строка. Время выполнения: 0.002 сек. ``` -### Пример +### Пример {#example} Более объёмный пример приведённых выше данных доступен в общедоступном бакете в S3 по адресу: `s3://datasets-documentation/http/`. @@ -584,7 +574,6 @@ size FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/http/doc Чтобы выполнять запросы к этим данным, нам необходимо обращаться к полям запроса как к массивам. Ниже мы агрегируем ошибки и HTTP-методы за фиксированный период времени. - ```sql SELECT status, request.method[1] AS method, count() AS c FROM http @@ -604,7 +593,7 @@ ORDER BY c DESC LIMIT 5; 5 строк в наборе. Прошло: 0,007 сек. ``` -### Использование парных массивов +### Использование парных массивов {#using-pairwise-arrays} Парные массивы обеспечивают баланс между гибкостью представления JSON в виде строк (`String`) и производительностью более структурированного подхода. Схема гибкая в том смысле, что любые новые поля потенциально могут быть добавлены в корень. Однако это требует значительно более сложного синтаксиса запросов и несовместимо с вложенными структурами. @@ -668,7 +657,6 @@ GROUP BY method, status ORDER BY c DESC LIMIT 5; └────────┴────────┴───────┘ ``` - 5 строк в наборе. Прошло времени: 0.383 сек. Обработано 8.22 млн строк, 1.97 ГБ (21.45 млн строк/с, 5.15 ГБ/с.) Пиковое потребление памяти: 51.35 МиБ. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md index 4e5974300f5..db143fbcf73 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md @@ -13,11 +13,11 @@ import json_offsets from '@site/static/images/integrations/data-ingestion/data-f import shared_json_column from '@site/static/images/integrations/data-ingestion/data-formats/json_shared_column.png'; -# Проектирование схемы +# Проектирование схемы {#designing-your-schema} Хотя [вывод схемы](/integrations/data-formats/json/inference) можно использовать для формирования начальной схемы JSON‑данных и выполнения запросов к JSON‑файлам непосредственно в хранилище, например в S3, пользователям следует стремиться разработать оптимизированную версионируемую схему для своих данных. Ниже рассматривается рекомендуемый подход к моделированию JSON‑структур. -## Статический и динамический JSON +## Статический и динамический JSON {#static-vs-dynamic-json} Основная задача при определении схемы для JSON — определить подходящий тип для значения каждого ключа. Мы рекомендуем рекурсивно применять к каждому ключу в иерархии JSON следующие правила, чтобы определить соответствующий тип для каждого ключа. @@ -92,7 +92,7 @@ import shared_json_column from '@site/static/images/integrations/data-ingestion/ Структуры с сотнями или тысячами статических ключей можно считать динамическими, так как редко бывает реалистично статически объявлять для них столбцы. Тем не менее, при возможности [пропускайте пути](#using-type-hints-and-skipping-paths), которые не нужны, чтобы сократить затраты как на хранение, так и на определение типов. ::: -## Обработка статических структур +## Обработка статических структур {#handling-static-structures} Мы рекомендуем обрабатывать статические структуры с помощью именованных кортежей (`Tuple`). Массивы объектов могут храниться в массивах кортежей, то есть `Array(Tuple)`. Внутри самих кортежей столбцы и их соответствующие типы должны определяться по тем же правилам. Это может приводить к вложенным `Tuple` для представления вложенных объектов, как показано ниже. @@ -203,7 +203,7 @@ ORDER BY company.name ``` -### Обработка значений по умолчанию +### Обработка значений по умолчанию {#handling-default-values} Даже если объекты JSON структурированы, они часто разреженные и содержат только подмножество известных ключей. К счастью, тип `Tuple` не требует, чтобы в JSON-полезной нагрузке присутствовали все столбцы. Если какие-либо из них не указаны, будут использованы значения по умолчанию. @@ -282,7 +282,7 @@ FORMAT PrettyJSONEachRow ::: -### Обработка новых столбцов +### Обработка новых столбцов {#handling-new-columns} Хотя структурированный подход наиболее прост, когда ключи JSON статичны, его все же можно использовать и в том случае, если изменения схемы можно спланировать, то есть новые ключи известны заранее и схему можно соответствующим образом изменить. @@ -360,7 +360,7 @@ SELECT id, nickname FROM people ``` -## Обработка полуструктурированных/динамических структур +## Обработка полуструктурированных/динамических структур {#handling-semi-structured-dynamic-structures} Если JSON-данные являются полуструктурированными, где ключи могут динамически добавляться и/или иметь несколько типов, рекомендуется использовать тип [`JSON`](/sql-reference/data-types/newjson). @@ -491,7 +491,7 @@ SELECT id, nickname FROM people - **Избежание риска взрывного роста числа столбцов** – хотя тип JSON масштабируется потенциально до тысяч столбцов, где подстолбцы хранятся как отдельные столбцы, это может привести к «взрыву» файлов столбцов, когда создаётся чрезмерное количество файлов столбцов, что ухудшает производительность. Чтобы минимизировать этот риск, базовый [тип Dynamic](/sql-reference/data-types/dynamic), используемый JSON, предоставляет параметр [`max_dynamic_paths`](/sql-reference/data-types/newjson#reading-json-paths-as-sub-columns), который ограничивает количество уникальных путей, хранимых как отдельные файлы столбцов. После достижения порога дополнительные пути сохраняются в общем файле столбца с использованием компактного кодированного формата, что позволяет сохранить производительность и эффективность хранения при обеспечении гибкости ингестии данных. Однако доступ к этому общему файлу столбца менее эффективен по производительности. Обратите внимание, что столбец JSON может использоваться с [подсказками типов](#using-type-hints-and-skipping-paths). Столбцы с «подсказками» будут обеспечивать ту же производительность, что и выделенные столбцы. - **Упрощённая интроспекция путей и типов** – хотя тип JSON поддерживает [функции интроспекции](/sql-reference/data-types/newjson#introspection-functions) для определения выведенных типов и путей, статические структуры зачастую проще исследовать, например, с помощью `DESCRIBE`. -### Один столбец JSON +### Один столбец JSON {#single-json-column} Этот подход полезен для прототипирования и задач data engineering. В продакшене старайтесь использовать `JSON` только для динамических подструктур, когда это действительно необходимо. @@ -667,7 +667,7 @@ FROM people ``` -### Целевой столбец JSON +### Целевой столбец JSON {#targeted-json-column} Хотя такой подход полезен при прототипировании и решении задач инженерии данных, в продуктивной среде мы рекомендуем по возможности использовать явную схему. @@ -767,7 +767,7 @@ FORMAT PrettyJsonEachRow ``` -### Использование подсказок типов и пропуска путей +### Использование подсказок типов и пропуска путей {#using-type-hints-and-skipping-paths} Подсказки типов позволяют указать тип для пути и его подстолбца, предотвращая излишний вывод типов. Рассмотрим следующий пример, в котором мы задаём типы для JSON-ключей `dissolved`, `employees` и `founded` внутри JSON-столбца `company.labels`. @@ -934,7 +934,7 @@ FORMAT PrettyJSONEachRow В результате для наборов данных, которые в основном однородны, но при этом выигрывают от гибкости JSON, подсказки типов предоставляют удобный способ сохранить производительность без необходимости переработки схемы или конвейера приёма данных. -### Настройка динамических путей +### Настройка динамических путей {#configuring-dynamic-paths} ClickHouse хранит каждый JSON-путь как подколонку в настоящем колоночном формате, обеспечивая те же преимущества по производительности, что и для традиционных столбцов — например, сжатие, SIMD-ускоренную обработку и минимальное дисковое I/O. Каждая уникальная комбинация пути и типа в ваших JSON-данных может быть вынесена в отдельный файловый столбец на диске. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md index 0faf3e900d3..9652f1d8def 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md @@ -10,7 +10,7 @@ keywords: ['parquet', 'колоночный формат', 'формат дан -# Работа с Parquet в ClickHouse +# Работа с Parquet в ClickHouse {#working-with-parquet-in-clickhouse} Parquet — это эффективный файловый формат для хранения данных в колоночном формате. ClickHouse поддерживает как чтение, так и запись файлов Parquet. @@ -24,7 +24,7 @@ ClickHouse поддерживает как чтение, так и запись -## Импорт из Parquet +## Импорт из Parquet {#importing-from-parquet} Перед загрузкой данных мы можем использовать функцию [file()](/sql-reference/functions/files.md/#file), чтобы изучить структуру [примерного файла формата Parquet](assets/data.parquet): @@ -64,7 +64,7 @@ LIMIT 3; ::: -## Импорт в существующую таблицу +## Импорт в существующую таблицу {#importing-to-an-existing-table} Создадим таблицу, в которую будем импортировать данные в формате Parquet: @@ -103,7 +103,7 @@ LIMIT 5; Обратите внимание, что ClickHouse автоматически преобразовал строки формата Parquet (в столбце `date`) в тип `Date`. Это происходит потому, что ClickHouse выполняет приведение типов на основе типов в целевой таблице. -## Загрузка локального файла на удалённый сервер +## Загрузка локального файла на удалённый сервер {#inserting-a-local-file-to-remote-server} Если вы хотите загрузить локальный файл Parquet на удалённый сервер ClickHouse, вы можете сделать это, передав его содержимое в `clickhouse-client` через pipe, как показано ниже: @@ -112,7 +112,7 @@ clickhouse client -q "INSERT INTO sometable FORMAT Parquet" < data.parquet ``` -## Создание новых таблиц из файлов Parquet +## Создание новых таблиц из файлов Parquet {#creating-new-tables-from-parquet-files} Поскольку ClickHouse читает схему файлов Parquet, мы можем динамически создавать таблицы: @@ -141,7 +141,7 @@ DESCRIBE TABLE imported_from_parquet; По умолчанию ClickHouse строго проверяет имена столбцов, их типы и значения. Но иногда при импорте можно игнорировать несуществующие столбцы или неподдерживаемые значения. Это можно настроить с помощью [настроек Parquet](/interfaces/formats/Parquet#format-settings). -## Экспорт в формат Parquet +## Экспорт в формат Parquet {#exporting-to-parquet-format} :::tip При использовании `INTO OUTFILE` с ClickHouse Cloud команды в `clickhouse client` нужно запускать на той машине (хосте), на которую будет записан файл. @@ -159,7 +159,7 @@ FORMAT Parquet В результате в текущем рабочем каталоге будет создан файл `export.parquet`. -## Типы данных ClickHouse и Parquet +## Типы данных ClickHouse и Parquet {#clickhouse-and-parquet-data-types} Типы данных ClickHouse и Parquet в основном совпадают, но всё же [имеют некоторые отличия](/interfaces/formats/Parquet#data-types-matching-parquet). Например, ClickHouse экспортирует тип `DateTime` как значение типа `int64` в формате Parquet. Если затем импортировать его обратно в ClickHouse, мы увидим числа ([файл time.parquet](assets/time.parquet)): diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md index dfeb10aafaa..c6717999b4d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md @@ -9,13 +9,13 @@ keywords: ['формат SQL', 'экспорт данных', 'импорт да -# Вставка и выгрузка SQL-данных в ClickHouse +# Вставка и выгрузка SQL-данных в ClickHouse {#inserting-and-dumping-sql-data-in-clickhouse} ClickHouse можно легко интегрировать в OLTP‑инфраструктуры баз данных разными способами. Один из вариантов — передавать данные между другими базами данных и ClickHouse с помощью SQL‑дампов. -## Создание SQL-дампов +## Создание SQL-дампов {#creating-sql-dumps} Данные можно выгрузить в формате SQL с помощью [SQLInsert](/interfaces/formats/SQLInsert). ClickHouse запишет данные в виде `INSERT INTO VALUES(...` и будет использовать настройку [`output_format_sql_insert_table_name`](/operations/settings/settings-formats.md/#output_format_sql_insert_table_name) в качестве имени таблицы: @@ -46,7 +46,7 @@ mysql some_db < dump.sql SET output_format_sql_insert_max_batch_size = 1000; ``` -### Экспорт набора значений +### Экспорт набора значений {#exporting-a-set-of-values} В ClickHouse есть формат [Values](/interfaces/formats/Values), который аналогичен SQL INSERT, но опускает оператор `INSERT INTO table VALUES` и содержит только набор значений: @@ -59,7 +59,7 @@ SELECT * FROM some_data LIMIT 3 FORMAT Values ``` -## Импорт данных из SQL-дампов +## Импорт данных из SQL-дампов {#inserting-data-from-sql-dumps} Для чтения SQL-дампов используется формат [MySQLDump](/interfaces/formats/MySQLDump): diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md index 4dfdbc17ceb..f65e20847f1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md @@ -10,13 +10,13 @@ keywords: ['форматы данных', 'шаблоны', 'regex', 'польз -# Импорт и экспорт произвольных текстовых данных с помощью форматов Template и Regex в ClickHouse +# Импорт и экспорт произвольных текстовых данных с помощью форматов Template и Regex в ClickHouse {#importing-and-exporting-custom-text-data-using-templates-and-regex-in-clickhouse} Нам часто приходится работать с данными в произвольных текстовых форматах. Это может быть нестандартный формат, некорректный JSON или «сломанный» CSV. Использование стандартных парсеров, таких как CSV или JSON, в таких случаях не всегда работает. Но в ClickHouse для этого предусмотрены мощные форматы Template и Regex. -## Импорт на основе шаблона +## Импорт на основе шаблона {#importing-based-on-a-template} Предположим, что мы хотим импортировать данные из следующего [файла журнала](assets/error.log): @@ -88,7 +88,7 @@ GROUP BY request └──────────────────────────────────────────────────┴─────────┘ ``` -### Пропуск пробелов +### Пропуск пробелов {#skipping-whitespaces} Рекомендуется использовать [TemplateIgnoreSpaces](/interfaces/formats/TemplateIgnoreSpaces), который позволяет игнорировать пробелы между разделителями в шаблоне: @@ -98,7 +98,7 @@ TemplateIgnoreSpaces --> "p1:${p1:CSV}, p2:${p2:CSV}" ``` -## Экспорт данных с использованием шаблонов +## Экспорт данных с использованием шаблонов {#exporting-data-using-templates} Мы также можем экспортировать данные в любой текстовый формат с помощью шаблонов. В этом случае нужно создать два файла: @@ -142,7 +142,7 @@ FORMAT Template SETTINGS format_template_resultset = 'output.results', --- Прочитано 1000 строк за 0.001380604 --- ``` -### Экспорт в HTML-файлы +### Экспорт в HTML-файлы {#exporting-to-html-files} Результаты, сформированные по шаблону, также можно экспортировать в файлы с помощью предложения [`INTO OUTFILE`](/sql-reference/statements/select/into-outfile.md). Сгенерируем HTML-файлы на основе указанных форматов [resultset](assets/html.results) и [row](assets/html.row): @@ -157,7 +157,7 @@ SETTINGS format_template_resultset = 'html.results', format_template_row = 'html.row' ``` -### Экспорт в XML +### Экспорт в XML {#exporting-to-xml} Формат шаблона можно использовать для генерации файлов любого текстового формата, включая XML. Просто подготовьте соответствующий шаблон и выполните экспорт. @@ -203,7 +203,7 @@ FORMAT XML ``` -## Импорт данных на основе регулярных выражений +## Импорт данных на основе регулярных выражений {#importing-data-based-on-regular-expressions} Формат [Regexp](/interfaces/formats/Regexp) предназначен для более сложных случаев, когда входные данные необходимо разбирать более сложным способом. Давайте разберём наш пример с файлом [error.log](assets/error.log), но на этот раз извлечём имя файла и протокол, чтобы сохранить их в отдельные столбцы. Для начала подготовим для этого новую таблицу: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md index d37457d767b..6e2d3f1b687 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md @@ -6,7 +6,7 @@ description: 'Главная страница раздела об ингести doc_type: 'landing-page' --- -# Ингестия данных +# Ингестия данных {#data-ingestion} ClickHouse интегрируется с рядом решений для интеграции и трансформации данных. Для получения дополнительной информации ознакомьтесь со страницами ниже: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md index 94cb56c155a..63838b7a23c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md @@ -6,7 +6,7 @@ title: 'Источники данных' doc_type: 'landing-page' --- -# Источники данных +# Источники данных {#data-sources} ClickHouse позволяет с лёгкостью выполнять приём данных в базу данных из различных источников. Дополнительную информацию см. на следующих страницах: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md index 6d621c92536..1cb59452e6c 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md @@ -17,7 +17,7 @@ import dynamodb_map_columns from '@site/static/images/integrations/data-ingestio import Image from '@theme/IdealImage'; -# CDC из DynamoDB в ClickHouse +# CDC из DynamoDB в ClickHouse {#cdc-from-dynamodb-to-clickhouse} @@ -50,9 +50,9 @@ import Image from '@theme/IdealImage'; -## 3. Загрузка снимка в ClickHouse +## 3. Загрузка снимка в ClickHouse {#3-load-the-snapshot-into-clickhouse} -### Создайте необходимые таблицы +### Создайте необходимые таблицы {#create-necessary-tables} Данные снимка из DynamoDB будут выглядеть примерно так: @@ -115,7 +115,7 @@ ORDER BY id; * Таблица должна использовать ключ партиционирования в качестве ключа сортировки (задаваемого в `ORDER BY`) * Строки с одинаковым ключом сортировки будут очищаться от дубликатов на основе столбца `version`. -### Создание snapshot ClickPipe +### Создание snapshot ClickPipe {#create-the-snapshot-clickpipe} Теперь вы можете создать ClickPipe для загрузки snapshot-данных из S3 в ClickHouse. Следуйте руководству по S3 ClickPipe [здесь](/integrations/clickpipes/object-storage), но используйте следующие настройки: @@ -146,7 +146,7 @@ https://{bucket}.s3.amazonaws.com/{prefix}/AWSDynamoDB/{export-id}/data/* -## 5. Очистка (необязательно) +## 5. Очистка (необязательно) {#5-cleanup-optional} После завершения снапшотного ClickPipe вы можете удалить таблицу снимка и материализованное представление. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md index 802f77d3da7..9b57b6703ae 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md @@ -16,7 +16,7 @@ import Jdbc02 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-02 import Jdbc03 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-03.png'; -# Подключение ClickHouse к внешним источникам данных с помощью JDBC +# Подключение ClickHouse к внешним источникам данных с помощью JDBC {#connecting-clickhouse-to-external-data-sources-with-jdbc} :::note Использование JDBC требует ClickHouse JDBC Bridge, поэтому вам понадобится использовать `clickhouse-local` на локальной машине, чтобы передавать данные из вашей базы данных в ClickHouse Cloud. Перейдите на страницу [**Using clickhouse-local**](/cloud/migration/clickhouse-local#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge) в разделе **Migrate** документации для получения подробной информации. @@ -44,7 +44,7 @@ import Jdbc03 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-03 -## Установка ClickHouse JDBC Bridge локально +## Установка ClickHouse JDBC Bridge локально {#install-the-clickhouse-jdbc-bridge-locally} Самый простой способ использовать ClickHouse JDBC Bridge — установить и запустить его на той же машине, где работает ClickHouse: @@ -107,7 +107,7 @@ java -jar clickhouse-jdbc-bridge-2.0.7-shaded.jar ::: -## Использование JDBC-подключения из ClickHouse +## Использование JDBC-подключения из ClickHouse {#use-the-jdbc-connection-from-within-clickhouse} Теперь ClickHouse может получать доступ к данным MySQL с помощью [табличной функции jdbc](/sql-reference/table-functions/jdbc.md) или [движка таблицы JDBC](/engines/table-engines/integrations/jdbc.md). diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md index f60acf8d735..8f824b5de13 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md @@ -10,27 +10,24 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; - -# Подключение ClickHouse к PostgreSQL +# Подключение ClickHouse к PostgreSQL {#connecting-clickhouse-to-postgresql} На этой странице рассматриваются следующие варианты интеграции PostgreSQL с ClickHouse: -- использование движка таблиц `PostgreSQL` для чтения данных из таблицы PostgreSQL -- использование экспериментального движка баз данных `MaterializedPostgreSQL` для синхронизации базы данных в PostgreSQL с базой данных в ClickHouse +* использование движка таблиц `PostgreSQL` для чтения данных из таблицы PostgreSQL +* использование экспериментального движка баз данных `MaterializedPostgreSQL` для синхронизации базы данных в PostgreSQL с базой данных в ClickHouse :::tip Мы рекомендуем использовать [ClickPipes](/integrations/clickpipes/postgres) — управляемый сервис интеграции для ClickHouse Cloud на базе PeerDB. В качестве альтернативы [PeerDB](https://github.com/PeerDB-io/peerdb) доступен как open-source CDC‑инструмент, специально разработанный для репликации базы данных PostgreSQL как в самостоятельно развернутый ClickHouse, так и в ClickHouse Cloud. ::: - - -## Использование табличного движка PostgreSQL +## Использование табличного движка PostgreSQL {#using-the-postgresql-table-engine} Табличный движок `PostgreSQL` позволяет выполнять операции **SELECT** и **INSERT** над данными, хранящимися на удалённом сервере PostgreSQL, из ClickHouse. В этой статье иллюстрируются базовые способы интеграции на примере одной таблицы. -### 1. Настройка PostgreSQL +### 1. Настройка PostgreSQL {#1-setting-up-postgresql} 1. В `postgresql.conf` добавьте следующую запись, чтобы разрешить PostgreSQL прослушивать сетевые интерфейсы: @@ -93,7 +90,7 @@ psql -U clickhouse_user -W -d db_in_psg -h <ваш_хост_postgresql> Обратитесь к ClickHouse [Cloud Endpoints API](/cloud/get-started/query-endpoints), чтобы получить сведения об исходящем трафике. ::: -### 2. Определите таблицу в ClickHouse +### 2. Определите таблицу в ClickHouse {#2-define-a-table-in-clickhouse} 1. Подключитесь к `clickhouse-client`: @@ -131,7 +128,7 @@ ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'cli См. страницу документации [PostgreSQL table engine](/engines/table-engines/integrations/postgresql) для полного списка параметров. ::: -### 3 Тестирование интеграции +### 3 Тестирование интеграции {#3-test-the-integration} 1. В ClickHouse просмотрите несколько первых строк: @@ -166,7 +163,6 @@ VALUES SELECT * FROM db_in_ch.table1 ``` - Ответ должен выглядеть следующим образом: ```response @@ -208,8 +204,7 @@ id | column1 В этом примере была продемонстрирована базовая интеграция между PostgreSQL и ClickHouse с использованием движка таблицы `PostrgeSQL`. Ознакомьтесь с [документацией по движку таблицы PostgreSQL](/engines/table-engines/integrations/postgresql), чтобы узнать о дополнительных возможностях, таких как указание схем, возврат только подмножества столбцов и подключение к нескольким репликам. Также рекомендуем ознакомиться с записью в блоге [ClickHouse and PostgreSQL - a match made in data heaven - part 1](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres). - -## Использование движка базы данных MaterializedPostgreSQL +## Использование движка базы данных MaterializedPostgreSQL {#using-the-materializedpostgresql-database-engine} @@ -220,7 +215,7 @@ id | column1 ***В описанных ниже процедурах используются PostgreSQL CLI (psql) и ClickHouse CLI (clickhouse-client). Сервер PostgreSQL установлен на Linux. Далее приведены минимальные настройки для новой тестовой установки базы данных PostgreSQL.*** -### 1. В PostgreSQL +### 1. В PostgreSQL {#1-in-postgresql} 1. В `postgresql.conf` установите минимальные параметры прослушивания, уровень WAL для репликации и слоты репликации: @@ -275,7 +270,6 @@ VALUES 7. Настройте PostgreSQL так, чтобы он разрешал подключения к новой базе данных новому пользователю для репликации. Ниже приведена минимально необходимая запись, которую нужно добавить в файл `pg_hba.conf`: - ```text # TYPE DATABASE USER ADDRESS METHOD host db1 clickhouse_user 192.168.1.0/24 password @@ -349,7 +343,7 @@ Query id: df2381ac-4e30-4535-b22e-8be3894aaafc └────┴─────────┘ ``` -### 3. Проверьте базовую репликацию +### 3. Проверьте базовую репликацию {#2-in-clickhouse} 1. В PostgreSQL добавьте новые строки: @@ -385,7 +379,7 @@ Query id: b0729816-3917-44d3-8d1a-fed912fb59ce └────┴─────────┘ ``` -### 4. Итоги +### 4. Итоги {#3-test-basic-replication} В данном руководстве по интеграции был рассмотрен простой пример репликации базы данных с одной таблицей, однако существуют и более продвинутые варианты, включая репликацию всей базы данных или добавление новых таблиц и схем к уже настроенным репликациям. Хотя DDL-команды не поддерживаются в этой схеме репликации, движок можно настроить на обнаружение изменений и перезагрузку таблиц при внесении структурных изменений. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md index 5765282fa5c..6decd83a1f8 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md @@ -40,7 +40,7 @@ import clickhouse_result from '@site/static/images/integrations/data-ingestion/e import Image from '@theme/IdealImage'; -# Интеграция EMQX с ClickHouse +# Интеграция EMQX с ClickHouse {#integrating-emqx-with-clickhouse} @@ -63,7 +63,7 @@ import Image from '@theme/IdealImage'; -## Получение сервиса ClickHouse Cloud +## Получение сервиса ClickHouse Cloud {#get-your-clickhouse-cloudservice} В ходе этой настройки мы развернули экземпляр ClickHouse в AWS в регионе N. Virginia (us-east -1), при этом экземпляр EMQX Cloud также был развернут в том же регионе. @@ -153,7 +153,7 @@ EMQX Cloud по умолчанию не допускает анонимные п -## Интеграция EMQX Cloud с ClickHouse Cloud +## Интеграция EMQX Cloud с ClickHouse Cloud {#integration-emqx-cloud-with-clickhouse-cloud} [EMQX Cloud Data Integrations](https://docs.emqx.com/en/cloud/latest/rule_engine/introduction.html#general-flow) используется для настройки правил обработки и реакции на потоки сообщений EMQX и события устройств. Data Integrations не только предоставляет понятное и гибкое «конфигурируемое» архитектурное решение, но также упрощает процесс разработки, повышает удобство использования и снижает степень связности между бизнес-системой и EMQX Cloud. Кроме того, он обеспечивает превосходную инфраструктуру для кастомизации проприетарных возможностей EMQX Cloud. @@ -163,7 +163,7 @@ EMQX Cloud предлагает более 30 нативных интеграц -### Создание ресурса ClickHouse +### Создание ресурса ClickHouse {#create-clickhouse-resource} Нажмите «Data Integrations» в левом меню и затем «View All Resources». Вы найдете ClickHouse в разделе Data Persistence или можете выполнить поиск по ClickHouse. @@ -177,7 +177,7 @@ EMQX Cloud предлагает более 30 нативных интеграц -### Создание нового правила +### Создание нового правила {#create-a-new-rule} Во время создания ресурса вы увидите всплывающее окно, и нажатие кнопки «New» перенаправит вас на страницу создания правила. @@ -212,7 +212,7 @@ FROM Теперь нажмите кнопку «NEXT». На этом шаге вы указываете EMQX Cloud, как записывать обработанные данные в вашу базу данных ClickHouse. -### Добавьте ответное действие +### Добавьте ответное действие {#add-a-response-action} Если у вас только один ресурс, вам не нужно изменять «Resource» и «Action Type». Вам нужно только задать SQL‑шаблон. Ниже приведён пример, используемый в этом руководстве: @@ -225,7 +225,7 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ Это шаблон для вставки данных в ClickHouse; здесь вы можете увидеть, как используются переменные. -### Просмотр сведений о правиле +### Просмотр сведений о правиле {#view-rules-details} Нажмите «Confirm» и «View Details». Теперь всё должно быть корректно настроено. На странице сведений о правиле вы можете убедиться, что интеграция данных работает. @@ -234,13 +234,13 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ Все MQTT-сообщения, отправленные в топик `temp_hum/emqx`, будут сохранены в вашей базе данных ClickHouse Cloud. -## Сохранение данных в ClickHouse +## Сохранение данных в ClickHouse {#saving-data-into-clickhouse} Мы будем имитировать данные о температуре и влажности и отправлять их в EMQX Cloud через MQTT X, а затем использовать EMQX Cloud Data Integrations для сохранения данных в ClickHouse Cloud. -### Публикация MQTT‑сообщений в EMQX Cloud +### Публикация MQTT‑сообщений в EMQX Cloud {#publish-mqtt-messages-to-emqx-cloud} Вы можете использовать любой MQTT‑клиент или SDK для публикации сообщений. В этом руководстве мы будем использовать [MQTT X](https://mqttx.app/) — удобный MQTT‑клиент, предоставляемый EMQ. @@ -274,13 +274,13 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ -### Просмотр мониторинга правил +### Просмотр мониторинга правил {#view-rules-monitoring} Проверьте мониторинг правил и убедитесь, что счётчик успешных срабатываний увеличился на единицу. -### Проверка сохранённых данных +### Проверка сохранённых данных {#check-the-data-persisted} Теперь пришло время посмотреть на данные в ClickHouse Cloud. В идеале данные, которые вы отправляете с помощью MQTTX, попадут в EMQX Cloud и будут сохранены в базе данных ClickHouse Cloud с помощью встроенной интеграции данных. @@ -293,6 +293,6 @@ SELECT * FROM emqx.temp_hum; -### Итоги +### Итоги {#summary} Вы не написали ни единой строки кода, а данные MQTT уже поступают из EMQX Cloud в ClickHouse Cloud. С EMQX Cloud и ClickHouse Cloud вам не нужно управлять инфраструктурой — вы можете сосредоточиться на разработке IoT‑приложений, пока данные надёжно хранятся в ClickHouse Cloud. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md index fb80c5ac0cf..c01cd2bab10 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md @@ -25,7 +25,7 @@ import airbyte09 from '@site/static/images/integrations/data-ingestion/etl-tools import PartnerBadge from '@theme/badges/PartnerBadge'; -# Подключение Airbyte к ClickHouse +# Подключение Airbyte к ClickHouse {#connect-airbyte-to-clickhouse} @@ -72,7 +72,7 @@ import PartnerBadge from '@theme/badges/PartnerBadge'; -## Добавьте ClickHouse в качестве приемника данных +## Добавьте ClickHouse в качестве приемника данных {#2-add-clickhouse-as-a-destination} В этом разделе мы покажем, как добавить экземпляр ClickHouse в качестве приемника данных. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md index fb9cf050ab2..f3ccbdf96a3 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md @@ -13,7 +13,7 @@ keywords: ['apache beam', 'потоковая обработка', 'пакетн import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Интеграция Apache Beam и ClickHouse +# Интеграция Apache Beam и ClickHouse {#integrating-apache-beam-and-clickhouse} @@ -29,9 +29,9 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## Настройка пакета ClickHouse для Apache Beam +## Настройка пакета ClickHouse для Apache Beam {#setup-of-the-apache-beam-clickhouse-package} -### Установка пакета +### Установка пакета {#package-installation} Добавьте следующую зависимость в используемую систему управления пакетами: @@ -50,7 +50,7 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; Артефакты можно найти в [официальном репозитории Maven](https://mvnrepository.com/artifact/org.apache.beam/beam-sdks-java-io-clickhouse). -### Пример кода +### Пример кода {#code-example} Следующий пример считывает CSV‑файл с именем `input.csv` как коллекцию `PCollection`, преобразует его в объект `Row` (используя определённую схему) и вставляет в локальный экземпляр ClickHouse с помощью `ClickHouseIO`: diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md index 6048ae1c2ca..188cd0480b1 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md @@ -21,7 +21,7 @@ import bp_ck_9 from '@site/static/images/integrations/data-ingestion/etl-tools/b import PartnerBadge from '@theme/badges/PartnerBadge'; -# Подключение BladePipe к ClickHouse +# Подключение BladePipe к ClickHouse {#connect-bladepipe-to-clickhouse} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md index 7220213d65a..9667959ac4b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md @@ -12,7 +12,7 @@ import TOCInline from '@theme/TOCInline'; import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Возможности и конфигурации +# Возможности и конфигурации {#features-and-configurations} @@ -22,7 +22,7 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## Конфигурация Profile.yml +## Конфигурация Profile.yml {#profile-yml-configurations} Чтобы подключиться к ClickHouse из dbt, вам потребуется добавить [профиль](https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles) в файл `profiles.yml`. Профиль ClickHouse должен соответствовать следующему синтаксису: @@ -65,14 +65,14 @@ your_profile_name: compress_block_size: [1048576] # Размер блока сжатия, если сжатие включено ``` -### Схема и база данных +### Схема и база данных {#schema-vs-database} Идентификатор отношения модели dbt `database.schema.table` не совместим с ClickHouse, поскольку ClickHouse не поддерживает `schema`. Поэтому используется упрощённый вариант `schema.table`, где `schema` — это база данных ClickHouse. Использование базы данных `default` не рекомендуется. -### Предупреждение об операторе SET +### Предупреждение об операторе SET {#set-statement-warning} Во многих средах использование оператора SET для сохранения настройки ClickHouse, применяемой ко всем запросам dbt, ненадёжно и может приводить к неожиданным сбоям. Это особенно актуально при использовании HTTP‑подключений через балансировщик нагрузки, @@ -81,7 +81,7 @@ your_profile_name: в свойстве "custom_settings" профиля dbt как рекомендуемую практику, вместо того чтобы полагаться на оператор "SET" в pre-hook, как иногда предлагается. -### Настройка `quote_columns` +### Настройка `quote_columns` {#setting-quote_columns} Чтобы избежать предупреждения, обязательно явно задайте значение параметра `quote_columns` в файле `dbt_project.yml`. Дополнительную информацию смотрите в [документации по quote_columns](https://docs.getdbt.com/reference/resource-configs/quote_columns). @@ -91,14 +91,14 @@ seeds: +quote_columns: false #или `true`, если в заголовках столбцов CSV есть пробелы ``` -### О кластере ClickHouse +### О кластере ClickHouse {#about-the-clickhouse-cluster} При использовании кластера ClickHouse нужно учитывать две вещи: * Установку настройки `cluster`. * Обеспечение согласованности чтения после записи (read-after-write), особенно если вы используете более одного потока (`threads`). -#### Настройка кластера +#### Настройка кластера {#cluster-setting} Настройка `cluster` в профиле позволяет dbt-clickhouse работать с кластером ClickHouse. Если `cluster` задан в профиле, по умолчанию **все модели будут создаваться с оператором `ON CLUSTER`**, за исключением моделей, использующих движок **Replicated**. К ним относятся: @@ -129,7 +129,7 @@ seeds: Если модель была создана без настройки `cluster`, dbt-clickhouse обнаружит это и выполнит все DDL/DML без предложения `on cluster` для этой модели. -#### Согласованность чтения после записи (read-after-write) +#### Согласованность чтения после записи (read-after-write) {#read-after-write-consistency} dbt полагается на модель согласованности чтения после вставки (read-after-insert). Это несовместимо с кластерами ClickHouse с более чем одной репликой, если вы не можете гарантировать, что все операции будут направляться на одну и ту же реплику. В повседневной работе с dbt вы можете не столкнуться с проблемами, но в зависимости от конфигурации кластера есть несколько стратегий, позволяющих обеспечить такую гарантию: @@ -137,9 +137,9 @@ dbt полагается на модель согласованности чте * Если вы используете кластер с самостоятельным размещением (self-hosted), убедитесь, что все запросы dbt отправляются на одну и ту же реплику ClickHouse. Если поверх него есть балансировщик нагрузки, попробуйте использовать механизм `replica aware routing`/`sticky sessions`, чтобы всегда попадать на одну и ту же реплику. Добавление настройки `select_sequential_consistency = 1` в кластерах вне ClickHouse Cloud [не рекомендуется](https://clickhouse.com/docs/operations/settings/settings#select_sequential_consistency). -## Общая информация о возможностях +## Общая информация о возможностях {#general-information-about-features} -### Общие конфигурации таблиц +### Общие конфигурации таблиц {#general-table-configurations} | Option | Description | Default if any | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- | @@ -157,7 +157,7 @@ dbt полагается на модель согласованности чте | definer | Если `sql_security` установлено в значение `definer`, необходимо указать любого существующего пользователя или `CURRENT_USER` в предложении `definer`. | | | projections | Список [проекций](/data-modeling/projections), которые будут созданы. Подробности см. в разделе [О проекциях](#projections). | | -#### О data skipping индексах +#### О data skipping индексах {#data-skipping-indexes} Data skipping индексы доступны только для материализации `table`. Чтобы добавить список data skipping индексов в таблицу, используйте конфигурацию `indexes`: @@ -171,7 +171,7 @@ Data skipping индексы доступны только для материа ) }} ``` -#### О проекциях +#### О проекциях {#projections} Вы можете добавить [проекции](/data-modeling/projections) к материализациям типов `table` и `distributed_table` с помощью конфигурации `projections`: @@ -189,7 +189,7 @@ Data skipping индексы доступны только для материа **Примечание**: Для распределённых таблиц проекция применяется к таблицам `_local`, а не к распределённой прокси-таблице. -### Поддерживаемые движки таблиц +### Поддерживаемые движки таблиц {#supported-table-engines} | Тип | Подробности | | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -200,7 +200,7 @@ Data skipping индексы доступны только для материа | EmbeddedRocksDB | [https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb](https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb) | | Hive | [https://clickhouse.com/docs/en/engines/table-engines/integrations/hive](https://clickhouse.com/docs/en/engines/table-engines/integrations/hive) | -### Поддерживаемые экспериментальные движки таблиц +### Поддерживаемые экспериментальные движки таблиц {#experimental-supported-table-engines} | Тип | Подробности | @@ -211,7 +211,7 @@ Data skipping индексы доступны только для материа Если вы столкнётесь с проблемами при подключении к ClickHouse из dbt с одним из вышеуказанных движков, пожалуйста, сообщите о проблеме [здесь](https://github.com/ClickHouse/dbt-clickhouse/issues). -### Примечание о настройках моделей +### Примечание о настройках моделей {#a-note-on-model-settings} В ClickHouse есть несколько типов/уровней «настроек». В конфигурации модели выше настраиваются два их типа. `settings` означает секцию `SETTINGS`, @@ -224,7 +224,7 @@ Data skipping индексы доступны только для материа доступны в таблице `system.settings`). В целом рекомендуются настройки по умолчанию, а любое использование этих свойств следует тщательно исследовать и протестировать. -### Конфигурация столбцов +### Конфигурация столбцов {#column-configuration} > ***ПРИМЕЧАНИЕ:*** Приведённые ниже параметры конфигурации столбцов требуют применения [контрактов моделей](https://docs.getdbt.com/docs/collaborate/govern/model-contracts). @@ -233,7 +233,7 @@ Data skipping индексы доступны только для материа | codec | Строка, состоящая из аргументов, передаваемых в `CODEC()` в DDL-описании столбца. Например: `codec: "Delta, ZSTD"` будет скомпилирована в выражение `CODEC(Delta, ZSTD)`. | | | ttl | Строка, состоящая из [TTL-выражения (time-to-live)](https://clickhouse.com/docs/guides/developer/ttl), которое определяет TTL-правило в DDL-описании столбца. Например: `ttl: ts + INTERVAL 1 DAY` будет скомпилирована в выражение `TTL ts + INTERVAL 1 DAY`. | | -#### Пример конфигурации схемы +#### Пример конфигурации схемы {#example-of-schema-configuration} ```yaml models: @@ -251,7 +251,7 @@ models: ttl: ts + INTERVAL 1 DAY ``` -#### Добавление сложных типов данных +#### Добавление сложных типов данных {#adding-complex-types} dbt автоматически определяет тип данных каждого столбца, анализируя SQL, используемый для создания модели. Однако в некоторых случаях этот процесс может некорректно определить тип данных, что приводит к конфликтам с типами, указанными в свойстве контракта `data_type`. Чтобы избежать этого, рекомендуется использовать функцию `CAST()` в SQL-коде модели для явного указания требуемого типа. Например: @@ -276,9 +276,9 @@ group by event_type ``` -## Возможности +## Возможности {#features} -### Материализация: view +### Материализация: view {#materialization-view} Модель dbt может быть создана как [представление ClickHouse](https://clickhouse.com/docs/en/sql-reference/table-functions/view/) и настроена с использованием следующего синтаксиса: @@ -297,7 +297,7 @@ models: {{ config(materialized = "view") }} ``` -### Материализация: таблица +### Материализация: таблица {#materialization-table} Модель dbt может быть создана как [таблица ClickHouse](https://clickhouse.com/docs/en/operations/system-tables/tables/) и настроена с использованием следующего синтаксиса: @@ -326,7 +326,7 @@ models: ) }} ``` -### Материализация: incremental +### Материализация: incremental {#materialization-incremental} Модель таблицы будет пересоздаваться при каждом выполнении dbt. Это может быть неосуществимо и крайне затратно для больших наборов данных или сложных трансформаций. Чтобы решить эту проблему и сократить время сборки, модель dbt может быть создана как инкрементальная таблица ClickHouse и настраивается с помощью следующего синтаксиса: @@ -358,7 +358,7 @@ models: ) }} ``` -#### Конфигурации +#### Конфигурации {#configurations} Конфигурации, специфические для этого типа материализации, перечислены ниже: @@ -369,11 +369,11 @@ models: | `incremental_strategy` | Стратегия, используемая для инкрементальной материализации. Поддерживаются `delete+insert`, `append`, `insert_overwrite` или `microbatch`. Дополнительные сведения о стратегиях см. [здесь](/integrations/dbt/features-and-configurations#incremental-model-strategies). | Необязателен (по умолчанию: 'default') | | `incremental_predicates` | Дополнительные условия, которые будут применяться к инкрементальной материализации (применяются только для стратегии `delete+insert`). | Необязателен | -#### Стратегии инкрементальных моделей +#### Стратегии инкрементальных моделей {#incremental-model-strategies} `dbt-clickhouse` поддерживает три стратегии инкрементальных моделей. -##### Стратегия по умолчанию (устаревшая) +##### Стратегия по умолчанию (устаревшая) {#default-legacy-strategy} Исторически ClickHouse имел лишь ограниченную поддержку операций обновления и удаления в форме асинхронных «мутаций». Чтобы эмулировать ожидаемое поведение dbt, @@ -384,7 +384,7 @@ dbt-clickhouse по умолчанию создаёт новую временн идёт не так до завершения операции; однако, поскольку она включает полное копирование исходной таблицы, её выполнение может быть дорогим и медленным. -##### Стратегия Delete+Insert +##### Стратегия Delete+Insert {#delete-insert-strategy} ClickHouse добавил «облегчённые удаления» (lightweight deletes) как экспериментальную возможность в версии 22.8. Облегчённые удаления значительно @@ -466,7 +466,7 @@ ClickHouse добавил «облегчённые удаления» (lightweig Для этой стратегии требуется, чтобы `partition_by` был задан в конфигурации модели. Все остальные параметры конфигурации модели, относящиеся к стратегиям, игнорируются. -### Materialization: materialized_view (экспериментально) +### Materialization: materialized_view (экспериментально) {#materialized-view} Материализация `materialized_view` должна представлять собой запрос `SELECT` из существующей (исходной) таблицы. Адаптер создаст целевую таблицу с именем модели @@ -501,7 +501,7 @@ select a,b,c from {{ source('raw', 'table_2') }} > вы получите следующее предупреждение: > `Warning - Table was detected with the same pattern as model name but was not found in this run. In case it is a renamed mv that was previously part of this model, drop it manually (!!!) ` -#### Догрузка данных +#### Догрузка данных {#data-catch-up} В настоящее время при создании материализованного представления (MV) целевая таблица сначала заполняется историческими данными, и только затем создается само MV. @@ -518,7 +518,7 @@ select a,b,c from {{ source('raw', 'table_2') }} )}} ``` -#### Обновляемые материализованные представления +#### Обновляемые материализованные представления {#refreshable-materialized-views} Чтобы использовать [Refreshable Materialized View](https://clickhouse.com/docs/en/materialized-view/refreshable-materialized-view), при необходимости скорректируйте следующие параметры в вашей MV‑модели (все эти параметры должны быть заданы внутри @@ -550,7 +550,7 @@ select a,b,c from {{ source('raw', 'table_2') }} }} ``` -#### Ограничения +#### Ограничения {#limitations} * При создании обновляемого материализованного представления (MV) в ClickHouse, которое имеет зависимость, ClickHouse не выдаёт ошибку, если указанная зависимость не существует на момент создания. Вместо этого обновляемое MV остаётся в @@ -563,14 +563,14 @@ select a,b,c from {{ source('raw', 'table_2') }} гарантируется. * Функциональность обновляемости не тестировалась с несколькими mv, направляющими данные в одну и ту же целевую модель. -### Материализация: dictionary (экспериментальная) +### Материализация: dictionary (экспериментальная) {#materialization-dictionary} См. тесты в [https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py](https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py) для примеров того, как реализовывать материализации для словарей ClickHouse. -### Материализация: distributed_table (экспериментальная) +### Материализация: distributed_table (экспериментальная) {#materialization-distributed-table} Распределённая таблица создаётся следующими шагами: @@ -585,7 +585,7 @@ select a,b,c from {{ source('raw', 'table_2') }} корректное выполнение последующих операций инкрементальной материализации. Это может привести к тому, что некоторые вставки в распределённые таблицы будут выполняться медленнее, чем ожидается. -#### Пример модели распределённой таблицы +#### Пример модели распределённой таблицы {#distributed-table-model-example} ```sql {{ @@ -601,7 +601,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### Сгенерированные миграции +#### Сгенерированные миграции {#distributed-table-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -621,7 +621,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### materialization: distributed_incremental (экспериментальная) +### materialization: distributed_incremental (экспериментальная) {#materialization-distributed-incremental} Инкрементальная модель, основанная на той же идее, что и распределённая таблица; основная сложность — корректно обрабатывать все стратегии инкрементального обновления. @@ -632,7 +632,7 @@ CREATE TABLE db.table on cluster cluster ( Заменяются только таблицы шардов, потому что распределённая таблица не хранит данные. Распределённая таблица пересоздаётся только при включённом режиме full_refresh или если структура таблицы могла измениться. -#### Пример распределённой инкрементальной модели +#### Пример распределённой инкрементальной модели {#distributed-incremental-model-example} ```sql @@ -649,7 +649,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### Сгенерированные миграции +#### Сгенерированные миграции {#distributed-incremental-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -668,7 +668,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### Snapshot +### Snapshot {#snapshot} Снимки dbt позволяют фиксировать изменения изменяемой модели со временем. В свою очередь, это позволяет выполнять запросы к моделям в разрезе конкретного момента времени, когда аналитики могут «заглянуть в прошлое» и увидеть предыдущее состояние модели. Эта функциональность поддерживается коннектором ClickHouse и настраивается с помощью следующего синтаксиса: @@ -687,7 +687,7 @@ CREATE TABLE db.table on cluster cluster ( Для получения дополнительной информации о конфигурации см. справочную страницу [snapshot configs](https://docs.getdbt.com/docs/build/snapshots#snapshot-configs). -### Контракты и ограничения +### Контракты и ограничения {#contracts-and-constraints} Поддерживаются только контракты с точным совпадением типов столбцов. Например, контракт с типом столбца UInt32 завершится с ошибкой, если модель вернёт UInt64 или другой целочисленный тип. @@ -695,9 +695,9 @@ ClickHouse также поддерживает *только* ограничен ограничения CHECK на уровне отдельных столбцов не поддерживаются. (См. документацию ClickHouse по первичным ключам/ключам ORDER BY.) -### Дополнительные макросы ClickHouse +### Дополнительные макросы ClickHouse {#additional-clickhouse-macros} -#### Вспомогательные макросы материализации моделей +#### Вспомогательные макросы материализации моделей {#model-materialization-utility-macros} Следующие макросы включены для упрощения создания специфичных для ClickHouse таблиц и представлений: @@ -714,7 +714,7 @@ ClickHouse также поддерживает *только* ограничен * `ttl_config` -- использует свойство конфигурации модели `ttl` для назначения выражения TTL таблицы ClickHouse. По умолчанию TTL не назначен. -#### Вспомогательный макрос s3Source +#### Вспомогательный макрос s3Source {#s3source-helper-macro} Макрос `s3source` упрощает процесс выборки данных ClickHouse непосредственно из S3 с помощью табличной функции ClickHouse S3. Он работает за счёт diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md index 649eb95cf67..ffddbfc0a79 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md @@ -20,7 +20,7 @@ import dbt_07 from '@site/static/images/integrations/data-ingestion/etl-tools/db import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Руководства +# Руководства {#guides} @@ -39,13 +39,13 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## Настройка +## Настройка {#setup} Следуйте инструкциям из раздела [Настройка dbt и адаптера ClickHouse](/integrations/dbt), чтобы подготовить ваше окружение. **Важно: приведённые ниже инструкции протестированы с Python 3.9.** -### Подготовка ClickHouse +### Подготовка ClickHouse {#prepare-clickhouse} dbt особенно эффективен при моделировании сильно связанных реляционных данных. В качестве примера мы предоставляем небольшой набор данных IMDB со следующей реляционной схемой. Этот набор данных взят из [репозитория реляционных наборов данных](https://relational.fit.cvut.cz/dataset/IMDb). Он тривиален по сравнению с типичными схемами, используемыми с dbt, но является удобным для работы примером: @@ -672,7 +672,7 @@ SELECT * FROM imdb_dbt.actor_summary ORDER BY num_movies DESC LIMIT 2; +------+-------------------+----------+------------------+------+---------+-------------------+ ``` -### Внутреннее устройство +### Внутреннее устройство {#internals} Мы можем определить, какие запросы выполнялись для реализации описанного выше инкрементального обновления, обратившись к журналу запросов ClickHouse. @@ -694,7 +694,7 @@ AND event_time > subtractMinutes(now(), 15) ORDER BY event_time LIMIT 100; Такая стратегия может создавать сложности на очень больших моделях. Для получения дополнительной информации см. раздел [Limitations](/integrations/dbt#limitations). -### Стратегия append (режим только вставки) +### Стратегия append (режим только вставки) {#append-strategy-inserts-only-mode} Чтобы обойти ограничения, связанные с большими наборами данных в инкрементальных моделях, адаптер использует параметр конфигурации dbt `incremental_strategy`. Его можно установить в значение `append`. В этом случае обновлённые строки вставляются непосредственно в целевую таблицу (т.е. `imdb_dbt.actor_summary`), и временная таблица не создаётся. Примечание: режим только append требует, чтобы ваши данные были неизменяемыми или чтобы дубликаты были допустимы. Если вам нужна инкрементальная модель таблицы, поддерживающая изменение строк, не используйте этот режим! @@ -796,7 +796,7 @@ WHERE id > (SELECT max(id) FROM imdb_dbt.actor_summary) OR updated_at > (SELECT В этом прогоне непосредственно в таблицу `imdb_dbt.actor_summary` добавляются только новые строки, при этом создание таблицы не выполняется. -### Режим удаления и вставки (экспериментальный) +### Режим удаления и вставки (экспериментальный) {#deleteinsert-mode-experimental} Традиционно ClickHouse имел лишь ограниченную поддержку операций обновления и удаления в виде асинхронных [Mutations](/sql-reference/statements/alter/index.md). Эти операции могут быть крайне ресурсоёмкими по вводу-выводу, и, как правило, их следует избегать. @@ -821,7 +821,7 @@ WHERE id > (SELECT max(id) FROM imdb_dbt.actor_summary) OR updated_at > (SELECT -### режим insert_overwrite (экспериментальный) +### режим insert_overwrite (экспериментальный) {#insert_overwrite-mode-experimental} Выполняет следующие шаги: @@ -840,7 +840,7 @@ WHERE id > (SELECT max(id) FROM imdb_dbt.actor_summary) OR updated_at > (SELECT -## Создание снимка +## Создание снимка {#creating-a-snapshot} Снимки dbt позволяют зафиксировать изменения изменяемой модели во времени. Это, в свою очередь, позволяет выполнять запросы к моделям на состояние в конкретный момент времени, когда аналитики могут «оглядываться назад» и просматривать предыдущее состояние модели. Это достигается с помощью [измерений типа 2 (Slowly Changing Dimensions)](https://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2:_add_new_row), где столбцы from и to фиксируют период, в течение которого строка считалась актуальной. Эта функциональность поддерживается адаптером ClickHouse и продемонстрирована ниже. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md index 160aa72e408..312be5a3a71 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md @@ -95,9 +95,9 @@ dbt предоставляет 4 типа материализации: -## Настройка dbt и адаптера ClickHouse +## Настройка dbt и адаптера ClickHouse {#setup-of-dbt-and-the-clickhouse-adapter} -### Установка dbt-core и dbt-clickhouse +### Установка dbt-core и dbt-clickhouse {#install-dbt-core-and-dbt-clickhouse} dbt предоставляет несколько способов установки интерфейса командной строки (CLI), которые подробно описаны [здесь](https://docs.getdbt.com/dbt-cli/install/overview). Мы рекомендуем использовать `pip` для установки как dbt, так и dbt-clickhouse. @@ -105,7 +105,7 @@ dbt предоставляет несколько способов устано pip install dbt-core dbt-clickhouse ``` -### Укажите в dbt параметры подключения к нашему экземпляру ClickHouse. +### Укажите в dbt параметры подключения к нашему экземпляру ClickHouse. {#provide-dbt-with-the-connection-details-for-our-clickhouse-instance} Настройте профиль `clickhouse-service` в файле `~/.dbt/profiles.yml` и задайте параметры schema, host, port, user и password. Полный список вариантов конфигурации подключения доступен на странице [Возможности и параметры конфигурации](/integrations/dbt/features-and-configurations): @@ -125,7 +125,7 @@ clickhouse-service: secure: True # Use TLS (native protocol) or HTTPS (http protocol) ``` -### Создайте проект dbt +### Создайте проект dbt {#create-a-dbt-project} Теперь вы можете использовать этот профиль в одном из существующих проектов или создать новый с помощью: @@ -139,17 +139,17 @@ dbt init project_name profile: 'clickhouse-service' ``` -### Тестирование соединения +### Тестирование соединения {#test-connection} Выполните `dbt debug` с помощью инструмента командной строки (CLI), чтобы проверить, может ли dbt подключиться к ClickHouse. Убедитесь, что в ответе присутствует строка `Connection test: [OK connection ok]`, означающая успешное соединение. Перейдите на [страницу руководств](/integrations/dbt/guides), чтобы узнать больше о том, как использовать dbt с ClickHouse. -### Тестирование и развертывание моделей (CI/CD) +### Тестирование и развертывание моделей (CI/CD) {#testing-and-deploying-your-models-ci-cd} Существует множество способов тестировать и развертывать ваш dbt‑проект. У dbt есть рекомендации по [рекомендуемым рабочим процессам](https://docs.getdbt.com/best-practices/best-practice-workflows#pro-tips-for-workflows) и [CI‑заданиям](https://docs.getdbt.com/docs/deploy/ci-jobs). Мы рассмотрим несколько стратегий, но имейте в виду, что их может потребоваться существенно адаптировать под ваш конкретный сценарий. -#### CI/CD с простыми тестами данных и модульными тестами +#### CI/CD с простыми тестами данных и модульными тестами {#ci-with-simple-data-tests-and-unit-tests} Один из простых способов запустить ваш CI‑конвейер — развернуть кластер ClickHouse внутри задания и запускать ваши модели на нём. Перед запуском моделей вы можете загрузить демонстрационные данные в этот кластер. Можно просто использовать [seed](https://docs.getdbt.com/reference/commands/seed), чтобы наполнить промежуточную среду подмножеством ваших боевых данных. @@ -157,7 +157,7 @@ profile: 'clickhouse-service' Шаг CD может быть столь же простым, как запуск `dbt build` для вашего боевого кластера ClickHouse. -#### Более полный этап CI/CD: использование свежих данных, тестирование только затронутых моделей +#### Более полный этап CI/CD: использование свежих данных, тестирование только затронутых моделей {#more-complete-ci-stage} Одна из распространённых стратегий — использовать задания [Slim CI](https://docs.getdbt.com/best-practices/best-practice-workflows#run-only-modified-models-to-test-changes-slim-ci), в которых повторно разворачиваются только изменённые модели (и их зависимости вверх и вниз по потоку). Этот подход использует артефакты ваших боевых прогонов (например, [dbt manifest](https://docs.getdbt.com/reference/artifacts/manifest-json)), чтобы сократить время выполнения проекта и гарантировать отсутствие расхождений схем между средами. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md index 4d80f22edb9..d642e695838 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md @@ -10,7 +10,7 @@ doc_type: 'guide' import PartnerBadge from '@theme/badges/PartnerBadge'; -# Подключение dlt к ClickHouse +# Подключение dlt к ClickHouse {#connect-dlt-to-clickhouse} @@ -18,9 +18,9 @@ import PartnerBadge from '@theme/badges/PartnerBadge'; -## Установка dlt с ClickHouse +## Установка dlt с ClickHouse {#install-dlt-with-clickhouse} -### Установите библиотеку `dlt` с зависимостями для ClickHouse: +### Установите библиотеку `dlt` с зависимостями для ClickHouse: {#to-install-the-dlt-library-with-clickhouse-dependencies} ```bash pip install "dlt[clickhouse]" @@ -99,7 +99,7 @@ dataset_table_separator = "___" # Разделитель для имё ```bash -# разместите это в начале вашего toml-файла, перед началом любых секций. +# разместите это в начале вашего toml-файла, перед началом любых секций. {#keep-it-at-the-top-of-your-toml-file-before-any-section-starts} destination.clickhouse.credentials="clickhouse://dlt:Dlt*12345789234567@localhost:9000/dlt?secure=1" ``` @@ -156,7 +156,7 @@ ClickHouse поддерживает следующие табличной функции GCS ClickHouse, которую dlt использует под капотом. @@ -240,10 +240,10 @@ dlt передаст эти учетные данные в ClickHouse, кото * Обеспечить работу файлового назначения с GCS в режиме совместимости с S3 * Поддержка области промежуточного размещения Google Cloud Storage -### Поддержка dbt +### Поддержка dbt {#dbt-support} Интеграция с dbt в целом поддерживается через dbt-clickhouse. -### Синхронизация состояния `dlt` +### Синхронизация состояния `dlt` {#syncing-of-dlt-state} Это назначение полностью поддерживает синхронизацию состояния dlt. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md index 5b36309f52f..9e0045831f5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md @@ -14,7 +14,7 @@ keywords: ['fivetran', 'перемещение данных', 'etl', 'ClickHouse import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Fivetran и ClickHouse Cloud +# Fivetran и ClickHouse Cloud {#fivetran-and-clickhouse-cloud} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md index 8db1dd93213..1398184be7d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md @@ -11,7 +11,7 @@ integration: - category: 'data_ingestion' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import nifi01 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_01.png'; import nifi02 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_02.png'; @@ -31,7 +31,7 @@ import nifi15 from '@site/static/images/integrations/data-ingestion/etl-tools/ni import CommunityMaintainedBadge from '@theme/badges/CommunityMaintained'; -# Подключение Apache NiFi к ClickHouse +# Подключение Apache NiFi к ClickHouse {#connect-apache-nifi-to-clickhouse} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md index 86c85ff1d07..47088863b18 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md @@ -10,7 +10,7 @@ integration: - support_level: 'partner' - category: 'data_ingestion' - website: 'https://vector.dev/' -keywords: ['vector', 'сбор логов', 'Обзервабилити', 'ингестия данных', 'конвейер'] +keywords: ['vector', 'сбор логов', 'наблюдаемость', 'ингестия данных', 'конвейер'] --- import Image from '@theme/IdealImage'; @@ -18,8 +18,7 @@ import vector01 from '@site/static/images/integrations/data-ingestion/etl-tools/ import vector02 from '@site/static/images/integrations/data-ingestion/etl-tools/vector_02.png'; import PartnerBadge from '@theme/badges/PartnerBadge'; - -# Integrating Vector with ClickHouse +# Integrating Vector with ClickHouse {#integrating-vector-with-clickhouse} @@ -32,13 +31,11 @@ ClickHouse превосходно справляется с хранением **Предварительные требования:** -- У вас уже установлен и запущен ClickHouse -- У вас установлен Vector +* У вас уже установлен и запущен ClickHouse +* У вас установлен Vector - - -## Создайте базу данных и таблицу +## Создайте базу данных и таблицу {#1-create-a-database-and-table} Создайте таблицу для хранения событий логов: @@ -62,8 +59,7 @@ ORDER BY tuple() **ORDER BY** установлен в значение **tuple()** (пустой кортеж), так как пока нет необходимости задавать первичный ключ. ::: - -## Настройка Nginx +## Настройка Nginx {#2--configure-nginx} На этом шаге будет показано, как настроить логирование Nginx. @@ -92,13 +88,12 @@ http { 192.168.208.1 - - [12/Oct/2021:03:31:49 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36" ``` - -## Настройка Vector +## Настройка Vector {#3-configure-vector} Vector собирает, преобразует и маршрутизирует логи, метрики и трейсы (далее — **sources**) в различные системы/клиентов (далее — **sinks**), включая поддержку ClickHouse «из коробки». Sources и sinks задаются в конфигурационном файле **vector.toml**. -1. Следующий файл **vector.toml** определяет **source** типа **file**, который отслеживает (tail) конец файла **my_access.log**, а также **sink**, использующий таблицу **access_logs**, описанную выше: +1. Следующий файл **vector.toml** определяет **source** типа **file**, который отслеживает (tail) конец файла **my_access.log**, а также **sink**, использующий таблицу **access_logs**, описанную выше: ```bash [sources.nginx_logs] @@ -125,14 +120,13 @@ SELECT * FROM nginxdb.access_logs - -## Разбор логов +## Разбор логов {#4-parse-the-logs} Хранить логи в ClickHouse полезно, но сохранение каждого события в виде одной строки не дает больших возможностей для анализа данных. Далее мы рассмотрим, как разбирать события логов с помощью [материализованного представления](/materialized-view/incremental-materialized-view). **Материализованное представление** работает подобно триггеру на INSERT в SQL. Когда строки данных вставляются в исходную таблицу, материализованное представление выполняет над ними некоторые преобразования и вставляет результаты в целевую таблицу. -Материализованное представление можно настроить так, чтобы формировать разобранное представление событий логов в **access_logs**. +Материализованное представление можно настроить так, чтобы формировать разобранное представление событий логов в **access_logs**. Ниже приведен пример одного такого события лога: ```bash @@ -181,7 +175,6 @@ SELECT trim(LEADING '"' FROM '"GET') SELECT parseDateTimeBestEffort(replaceOne(trim(LEADING '[' FROM '[12/Oct/2021:15:32:43'), ':', ' ')) ``` - Теперь мы готовы определить материализованное представление. Определение ниже включает `POPULATE`, что означает, что существующие строки в **access_logs** будут обработаны и вставлены сразу же. Выполните следующую SQL-команду: @@ -228,18 +221,12 @@ FROM SELECT * FROM nginxdb.access_logs_view ``` - + :::note В приведённом выше примере данные сохраняются в двух таблицах, но вы можете изменить исходную таблицу `nginxdb.access_logs`, чтобы использовать движок таблиц [`Null`](/engines/table-engines/special/null). Разобранные данные по-прежнему будут попадать в таблицу `nginxdb.access_logs_view`, но исходные данные не будут сохраняться в таблице. ::: - > Используя Vector, который требует лишь простой установки и быстрой настройки, вы можете отправлять журналы с сервера Nginx в таблицу ClickHouse. Используя материализованное представление, вы можете разобрать эти журналы по столбцам для упрощения аналитики. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md index 23f45f96d9a..302eb98e87d 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md @@ -8,13 +8,13 @@ doc_type: 'guide' keywords: ['Google Cloud Storage ClickHouse', 'интеграция GCS с ClickHouse', 'MergeTree на базе GCS', 'хранение данных ClickHouse в GCS', 'Google Cloud ClickHouse'] --- -import BucketDetails from '@site/docs/_snippets/_GCS_authentication_and_bucket.md'; +import BucketDetails from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_GCS_authentication_and_bucket.md'; import Image from '@theme/IdealImage'; import GCS_examine_bucket_1 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-1.png'; import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-2.png'; -# Интеграция Google Cloud Storage с ClickHouse +# Интеграция Google Cloud Storage с ClickHouse {#integrate-google-cloud-storage-with-clickhouse} :::note Если вы используете ClickHouse Cloud в [Google Cloud](https://cloud.google.com), эта страница к вам не относится, так как ваши сервисы уже используют [Google Cloud Storage](https://cloud.google.com/storage). Если вы хотите выполнять `SELECT` или `INSERT` данных из GCS, обратитесь к табличной функции [`gcs`](/sql-reference/table-functions/gcs). @@ -24,13 +24,13 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio -## MergeTree с хранилищем в GCS +## MergeTree с хранилищем в GCS {#gcs-backed-mergetree} -### Создание диска +### Создание диска {#creating-a-disk} Чтобы использовать bucket GCS как диск, сначала необходимо объявить его в конфигурации ClickHouse в файле в каталоге `conf.d`. Ниже приведён пример объявления диска GCS. Эта конфигурация включает несколько секций для настройки GCS‑«диска», кэша и политики, которая указывается в DDL‑запросах при создании таблиц на диске GCS. Каждая из них описана ниже. -#### Storage configuration > disks > gcs +#### Storage configuration > disks > gcs {#storage_configuration--disks--gcs} Эта часть конфигурации показана на выделенном фрагменте и задаёт следующее: @@ -68,7 +68,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio ``` -#### Конфигурация хранилища > disks > cache +#### Конфигурация хранилища > disks > cache {#storage_configuration--disks--cache} Пример конфигурации, показанный ниже, включает кэш в памяти объёмом 10Gi для диска `gcs`. @@ -106,7 +106,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio ``` -#### Конфигурация хранилища > policies > gcs_main +#### Конфигурация хранилища > policies > gcs_main {#storage_configuration--policies--gcs_main} Политики хранения в конфигурации позволяют выбирать, где размещаются данные. Политика, показанная ниже, позволяет хранить данные на диске `gcs`, указывая политику `gcs_main`. Например, `CREATE TABLE ... SETTINGS storage_policy='gcs_main'`. @@ -141,7 +141,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio Полный список настроек, относящихся к этому описанию диска, можно найти [здесь](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3). -### Создание таблицы +### Создание таблицы {#creating-a-table} Если вы настроили диск на использование бакета с правом записи, вы сможете создать таблицу, как в примере ниже. Ради краткости мы используем подмножество столбцов набора данных NYC taxi и отправляем данные напрямую в таблицу на базе GCS: @@ -179,11 +179,11 @@ INSERT INTO trips_gcs SELECT trip_id, pickup_date, pickup_datetime, dropoff_date SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_gcs GROUP BY passenger_count; ``` -### Работа с репликацией +### Работа с репликацией {#handling-replication} Репликация с использованием дисков GCS может быть реализована с помощью движка таблиц `ReplicatedMergeTree`. Подробности см. в руководстве [репликация одного шарда в двух регионах GCP с использованием GCS](#gcs-multi-region). -### Дополнительные материалы +### Дополнительные материалы {#learn-more} [Cloud Storage XML API](https://cloud.google.com/storage/docs/xml-api/overview) совместим с некоторыми инструментами и библиотеками, которые работают с такими сервисами, как Amazon Simple Storage Service (Amazon S3). @@ -305,13 +305,13 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -### Настройка сервера ClickHouse +### Настройка сервера ClickHouse {#configure-clickhouse-server} :::note best practice На некоторых шагах этого руководства вам потребуется поместить конфигурационный файл в `/etc/clickhouse-server/config.d/`. Это каталог по умолчанию в системах Linux для файлов переопределения конфигурации. Когда вы помещаете эти файлы в этот каталог, ClickHouse объединяет их содержимое с конфигурацией по умолчанию. Размещая эти файлы в каталоге `config.d`, вы избежите потери настроек при обновлении. ::: -#### Сеть +#### Сеть {#networking} По умолчанию ClickHouse прослушивает только loopback‑интерфейс; в реплицированной конфигурации требуется сетевое взаимодействие между серверами. Включите прослушивание на всех сетевых интерфейсах: @@ -321,7 +321,7 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -#### Удалённые серверы ClickHouse Keeper +#### Удалённые серверы ClickHouse Keeper {#remote-clickhouse-keeper-servers} Репликация координируется ClickHouse Keeper. Этот конфигурационный файл идентифицирует узлы ClickHouse Keeper по имени хоста и номеру порта. @@ -346,7 +346,7 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -#### Удалённые серверы ClickHouse +#### Удалённые серверы ClickHouse {#remote-clickhouse-servers} Этот файл задаёт имя хоста и порт каждого сервера ClickHouse в кластере. Конфигурационный файл по умолчанию содержит примеры описаний кластеров; чтобы отображались только полностью настроенные кластеры, к записи `remote_servers` добавляется тег `replace="true"`, чтобы при слиянии этой конфигурации с конфигурацией по умолчанию она заменяла секцию `remote_servers`, а не дополняла её. @@ -372,7 +372,7 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -#### Идентификация реплики +#### Идентификация реплики {#replica-identification} Этот файл настраивает параметры, связанные с путём в ClickHouse Keeper. В частности, в нём задаются макросы, используемые для идентификации реплики, к которой относятся данные. На одном сервере реплика должна быть указана как `replica_1`, а на другом сервере — как `replica_2`. Эти имена можно изменить: например, в нашем случае, когда одна реплика хранится в Южной Каролине, а другая — в Северной Вирджинии, значениями могут быть `carolina` и `virginia`; просто убедитесь, что на каждой машине они отличаются. @@ -390,7 +390,7 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -#### Хранение в GCS +#### Хранение в GCS {#storage-in-gcs} Конфигурация хранилища ClickHouse включает `disks` и `policies`. Диск, настраиваемый ниже, называется `gcs` и имеет `type` `s3`. Тип `s3` используется, потому что ClickHouse обращается к бакету GCS так, как если бы это был бакет AWS S3. Понадобятся две копии этой конфигурации — по одной для каждого узла сервера ClickHouse. @@ -438,7 +438,7 @@ ClickHouse Keeper для работы требует двух узлов, поэ ``` -### Запустите ClickHouse Keeper +### Запустите ClickHouse Keeper {#start-clickhouse-keeper} Используйте команды, соответствующие вашей операционной системе, например: @@ -448,7 +448,7 @@ sudo systemctl start clickhouse-keeper sudo systemctl status clickhouse-keeper ``` -#### Проверьте статус ClickHouse Keeper +#### Проверьте статус ClickHouse Keeper {#check-clickhouse-keeper-status} Отправляйте команды в ClickHouse Keeper с помощью `netcat`. Например, команда `mntr` возвращает состояние кластера ClickHouse Keeper. Если выполнить эту команду на каждом узле Keeper, вы увидите, что один из них является лидером, а два других — ведомыми: @@ -464,11 +464,11 @@ zk_max_latency 11 zk_min_latency 0 zk_packets_received 1783 zk_packets_sent 1783 -# highlight-start +# highlight-start {#highlight-start} zk_num_alive_connections 2 zk_outstanding_requests 0 zk_server_state leader -# highlight-end +# highlight-end {#highlight-end} zk_znode_count 135 zk_watch_count 8 zk_ephemerals_count 3 @@ -477,13 +477,13 @@ zk_key_arena_size 28672 zk_latest_snapshot_size 0 zk_open_file_descriptor_count 182 zk_max_file_descriptor_count 18446744073709551615 -# highlight-start +# highlight-start {#highlight-start} zk_followers 2 zk_synced_followers 2 -# highlight-end +# highlight-end {#highlight-end} ``` -### Запуск сервера ClickHouse +### Запуск сервера ClickHouse {#start-clickhouse-server} На `chnode1` и `chnode` выполните: @@ -495,9 +495,9 @@ sudo service clickhouse-server start sudo service clickhouse-server status ``` -### Проверка +### Проверка {#verification} -#### Проверка конфигурации дисков +#### Проверка конфигурации дисков {#verify-disk-configuration} `system.disks` должна содержать записи для каждого диска: @@ -565,7 +565,7 @@ cache_path: 3 строки в наборе. Прошло: 0,002 сек. ```` -#### Убедитесь, что таблицы, созданные на кластере, создаются на обоих узлах +#### Убедитесь, что таблицы, созданные на кластере, создаются на обоих узлах {#verify-that-tables-created-on-the-cluster-are-created-on-both-nodes} ```sql -- highlight-next-line create table trips on cluster 'cluster_1S_2R' ( @@ -600,7 +600,7 @@ SETTINGS storage_policy='gcs_main' 2 строки в наборе. Затрачено: 0.641 сек. ``` -#### Убедитесь, что данные можно вставить +#### Убедитесь, что данные можно вставить {#verify-that-data-can-be-inserted} ```sql INSERT INTO trips SELECT @@ -621,7 +621,7 @@ FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz' LIMIT 1000000 ``` -#### Убедитесь, что для таблицы используется политика хранения данных `gcs_main`. +#### Убедитесь, что для таблицы используется политика хранения данных `gcs_main`. {#verify-that-the-storage-policy-gcs_main-is-used-for-the-table} ```sql SELECT @@ -647,14 +647,14 @@ formatReadableSize(total_bytes): 36.42 MiB Получена 1 строка. Прошло: 0.002 сек. ``` -#### Проверьте в консоли Google Cloud +#### Проверьте в консоли Google Cloud {#verify-in-google-cloud-console} Если открыть бакеты, вы увидите, что в каждом из них создана папка с именем, указанным в конфигурационном файле `storage.xml`. Разверните папки, и вы увидите множество файлов, соответствующих разделам данных. -#### Бакет для первой реплики +#### Бакет для первой реплики {#bucket-for-replica-one} -#### Бакет для второй реплики +#### Бакет для второй реплики {#bucket-for-replica-two} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md index 165620a4a2f..27254572a12 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md @@ -11,7 +11,7 @@ keywords: ['Google Dataflow ClickHouse', 'Dataflow ClickHouse integration', 'Apa import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Интеграция Google Dataflow с ClickHouse +# Интеграция Google Dataflow с ClickHouse {#integrating-google-dataflow-with-clickhouse} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md index 377baf37e09..83e9ac6257b 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md @@ -11,7 +11,7 @@ keywords: ['Dataflow Java Runner', 'Google Dataflow ClickHouse', 'Apache Beam Ja import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Java-раннер Dataflow +# Java-раннер Dataflow {#dataflow-java-runner} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md index 5287c52fd46..b688aea96f5 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md @@ -11,7 +11,7 @@ keywords: ['google dataflow', 'gcp', 'конвейер данных', 'шабл import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Шаблоны Google Dataflow +# Шаблоны Google Dataflow {#google-dataflow-templates} diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md index 188f6dfc2ab..3f3ef364b30 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md @@ -19,7 +19,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Шаблон Dataflow BigQuery to ClickHouse +# Шаблон Dataflow BigQuery to ClickHouse {#dataflow-bigquery-to-clickhouse-template} Шаблон BigQuery to ClickHouse представляет собой пакетный конвейер обработки данных, который выполняет приём данных из таблицы BigQuery в таблицу ClickHouse. Шаблон может считывать всю таблицу или фильтровать определённые записи с помощью заданного SQL-запроса. diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md index 2180f44e4df..f55fd0de7be 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md @@ -9,7 +9,7 @@ doc_type: 'guide' keywords: ['загрузка локальных файлов в ClickHouse', 'импорт локальных файлов в ClickHouse', 'загрузка файлов через clickhouse-client'] --- -# Вставка локальных файлов +# Вставка локальных файлов {#insert-local-files} Вы можете использовать `clickhouse-client` для потоковой загрузки локальных файлов в сервис ClickHouse. Это позволяет предварительно обрабатывать данные с помощью множества мощных и удобных функций ClickHouse. Рассмотрим пример... @@ -79,7 +79,6 @@ LIMIT 7 Результат: - ```response │ 488 │ comment │ mynameishere │ 2007-02-22 14:48:18 │ «Жаль. Javascript-в-браузере и Ajax — это оба грязные хаки, которые заставляют программистов делать всевозможные постыдные вещи. И результатом становятся кривоватые HTML‑фокусы. Java, при всех своих недостатках, достаточно чиста, когда запускается в среде апплета. У неё есть все преимущества перед JITBAJAX, за исключением проблем с установкой и тяжёлого процесса загрузки. Yahoo games, похоже, едва ли не единственная успешная история с апплетами. Конечно, раньше сколько-нибудь сложные апплеты обычно были слишком большими для dial‑up‑аккаунтов, которые были у людей. Сейчас, по крайней мере, это уже не так.» │ [454927] │ ['It','s','too','bad','Javascript','in','the','browser','and','Ajax','are','both','nasty','hacks','that','force','programmers','to','do','all','sorts','of','shameful','things','And','the','result','is','wanky','html','tricks','Java','for','its','faults','is','fairly','clean','when','run','in','the','applet','environment','It','has','every','superiority','over','JITBAJAX','except','for','install','issues','and','a','chunky','load','process','Yahoo','games','seems','like','just','about','the','only','applet','success','story','Of','course','back','in','the','day','non','trivial','Applets','tended','to','be','too','large','for','the','dial','up','accounts','people','had','At','least','that','is','changed'] │ │ 575 │ comment │ leoc │ 2007-02-23 00:09:49 │ «Сейчас я не могу найти ссылку, но, *кажется*, только что читал что‑то, из чего следует, что процесс установки апплета Apollo будет включать диалог подтверждения вида "install-this-application?" с последующей загрузкой примерно на 30 секунд. Если так, то Apollo менее многообещающ, чем я надеялся. Такой тип установки может считаться малообременительным по меркам настольных приложений, но он не сравним с лёгкостью запуска браузерного AJAX‑ или Flash‑приложения. (Подумайте, насколько просто впервые воспользоваться maps.google.com.)

Наверняка хотя бы будет так, что приложения Apollo по умолчанию запускаются в недоверенном режиме (untrusted), а уже установленное приложение будет запускаться автоматически, когда вы откроете в браузере URL, с которого его скачали?» │ [455071] │ ['I','can','t','find','the','reference','now','but','I','think','I','ve','just','read','something','suggesting','that','the','install','process','for','an','Apollo','applet','will','involve','an','34','install','this','application','34','confirmation','dialog','followed','by','a','download','of','30','seconds','or','so','If','so','then','Apollo','s','less','promising','than','I','hoped','That','kind','of','install','may','be','low','friction','by','desktop','app','standards','but','it','doesn','t','compare','to','the','ease','of','starting','a','browser','based','AJAX','or','Flash','application','Consider','how','easy','it','is','to','use','maps','google','com','for','the','first','time','p','Surely','it','will','at','least','be','that','Apollo','applications','will','run','untrusted','by','default','and','that','an','already','installed','app','will','start','automatically','whenever','you','take','your','browser','to','the','URL','you','downloaded','it','from'] │ diff --git a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md index 3628bc5e175..24d00e76ecb 100644 --- a/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md +++ b/i18n/ru/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md @@ -12,11 +12,11 @@ integration: - website: 'https://clickhouse.com/cloud/clickpipes' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/ru/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; -# Интеграция Confluent Cloud с ClickHouse +# Интеграция Confluent Cloud с ClickHouse {#integrating-confluent-cloud-with-clickhouse}

\ No newline at end of file + + + + +fullscreen; +picture-in-picture" + allowfullscreen + />
-
+
根据当前数据所在的位置,有多种方式可以将数据迁移到 ClickHouse Cloud: -- [自托管迁移到 Cloud](/cloud/migration/clickhouse-to-cloud):使用 `remoteSecure` 函数传输数据 -- [其他 DBMS](/cloud/migration/clickhouse-local):将 [clickhouse-local] ETL 工具与适用于当前 DBMS 的相应 ClickHouse 表函数配合使用 -- [任意数据源!](/cloud/migration/etl-tool-to-clickhouse):使用众多常用的 ETL/ELT 工具之一连接各种不同的数据源 -- [对象存储](/integrations/migration/object-storage-to-clickhouse):轻松将 S3 中的数据插入到 ClickHouse 中 +* [自托管迁移到 Cloud](/cloud/migration/clickhouse-to-cloud):使用 `remoteSecure` 函数传输数据 +* [其他 DBMS](/cloud/migration/clickhouse-local):将 [clickhouse-local] ETL 工具与适用于当前 DBMS 的相应 ClickHouse 表函数配合使用 +* [任意数据源!](/cloud/migration/etl-tool-to-clickhouse):使用众多常用的 ETL/ELT 工具之一连接各种不同的数据源 +* [对象存储](/integrations/migration/object-storage-to-clickhouse):轻松将 S3 中的数据插入到 ClickHouse 中 在示例 [从 Redshift 迁移](/migrations/redshift/migration-guide) 中,我们展示了三种不同的数据迁移方式,将数据迁移到 ClickHouse。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md index 5481f5ffa19..61b243f1d39 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# ClickHouse 与 PostgreSQL 对比 +# ClickHouse 与 PostgreSQL 对比 {#comparing-clickhouse-and-postgresql} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md index fa1ab35a7a5..24b3f03629b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/appendix.md @@ -129,7 +129,7 @@ ClickHouse Cloud 在 S3 上只保留一份数据副本,并配合多个计算 -## 压缩 +## 压缩 {#compression} 由于 ClickHouse 采用列式存储,相比 Postgres,压缩效果通常会显著更好。如下图所示,我们对比了在这两个数据库中存储所有 Stack Overflow 表时的空间需求: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md index c4a4686eb07..fcc34130fd0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/01_migration_guide_part1.md @@ -31,49 +31,49 @@ import Image from '@theme/IdealImage'; ```bash -# 用户 +# 用户 {#users} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/users.sql.gz gzip -d users.sql.gz psql < users.sql ``` -# posts 表 +# posts 表 {#posts} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posts.sql.gz gzip -d posts.sql.gz psql < posts.sql -# posthistory +# posthistory {#posthistory} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/posthistory.sql.gz gzip -d posthistory.sql.gz psql < posthistory.sql -# 评论 +# 评论 {#comments} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/comments.sql.gz gzip -d comments.sql.gz psql < comments.sql -# votes 表 +# votes 表 {#votes} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/votes.sql.gz gzip -d votes.sql.gz psql < votes.sql -# badges 徽章 +# badges 徽章 {#badges} wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/badges.sql.gz gzip -d badges.sql.gz psql < badges.sql -# postlinks +# postlinks {#postlinks} wget [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/pdump/2024/postlinks.sql.gz) gzip -d postlinks.sql.gz @@ -87,9 +87,9 @@ psql < postlinks.sql ``` -## 迁移数据 +## 迁移数据 {#migrating-data} -### 实时复制(CDC) +### 实时复制(CDC) {#real-time-replication-or-cdc} 请参阅此[指南](/integrations/clickpipes/postgres),为 PostgreSQL 配置 ClickPipes。该指南涵盖了多种不同类型的 Postgres 源实例。 @@ -125,7 +125,7 @@ ORDER BY id; 完成设置后,ClickPipes 会开始将 PostgreSQL 中的所有数据迁移到 ClickHouse。根据网络状况和部署规模,对于 Stack Overflow 数据集,这通常只需要几分钟。 -### 手动批量加载与定期更新 +### 手动批量加载与定期更新 {#initial-bulk-load-with-periodic-updates} 采用手动方式时,可以通过以下方法完成数据集的初始批量加载: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md index ae30c969daa..b4566b4e4ed 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/02_migration_guide_part2.md @@ -21,7 +21,7 @@ doc_type: 'guide' -## 在 ClickHouse 中优化查询 +## 在 ClickHouse 中优化查询 {#optimize-queries-in-clickhouse} 虽然可以在对查询做最少改写的情况下完成迁移,但建议充分利用 ClickHouse 的特性,以显著简化查询并进一步提升查询性能。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md index ec56435b52b..ba4af208d41 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/02_postgres/migration_guide/03_migration_guide_part3.md @@ -49,7 +49,7 @@ import Image from '@theme/IdealImage'; -## 分区 +## 分区 {#partitions} Postgres 用户对表分区这一概念应该很熟悉:通过将表拆分为更小、更易管理的片段(称为分区),以提升大型数据库的性能和可管理性。分区可以通过在指定列(例如日期)上使用范围、指定列表,或基于键的哈希来实现。这使管理员可以基于特定条件(如日期范围或地理位置)来组织数据。分区有助于通过分区裁剪和更高效的索引来提升查询性能,从而实现更快速的数据访问。同时,它也有助于维护任务,例如备份和数据清理,因为可以针对单个分区而不是整个表执行操作。此外,通过将负载分布到多个分区,分区还能显著提高 PostgreSQL 数据库的可扩展性。 @@ -76,7 +76,7 @@ PARTITION BY toYear(CreationDate) 有关分区的完整介绍,请参阅 ["Table partitions"](/partitions)。 -### 分区的应用场景 +### 分区的应用场景 {#applications-of-partitions} ClickHouse 中的分区与 Postgres 的应用场景类似,但也存在一些细微差别。更具体地说: @@ -132,7 +132,7 @@ ALTER TABLE posts -## 物化视图与投影 +## 物化视图与投影 {#materialized-views-vs-projections} Postgres 允许在单个表上创建多个索引,从而可以针对多种访问模式进行优化。这种灵活性使管理员和开发人员能够根据特定查询和运维需求定制数据库性能。ClickHouse 的投影(projections)概念虽然与此并非完全等价,但允许用户为一张表指定多个 `ORDER BY` 子句。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md index 096da1fcf13..8865e6998e7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/01_overview.md @@ -12,7 +12,7 @@ import bigquery_1 from '@site/static/images/migrations/bigquery-1.png'; import Image from '@theme/IdealImage'; -# ClickHouse Cloud 与 BigQuery 对比 +# ClickHouse Cloud 与 BigQuery 对比 {#comparing-clickhouse-cloud-and-bigquery} @@ -186,7 +186,7 @@ ClickHouse 提供了标准 SQL,并在此基础上进行了大量扩展和改 -## 数组 +## 数组 {#arrays} 与 BigQuery 仅有 8 个数组函数相比,ClickHouse 提供了 80 多个[内置数组函数](/sql-reference/functions/array-functions),可以优雅而简洁地对各种问题进行建模和求解。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md index 3896de9a6ec..86b82068521 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/02_migrating-to-clickhouse-cloud.md @@ -75,7 +75,7 @@ CDC(变更数据捕获)是指在两个数据库之间保持表数据同步 -## 模式设计 +## 模式设计 {#designing-schemas} Stack Overflow 数据集包含许多相关的表。我们建议优先迁移主表。这不一定是最大的那张表,而是您预计会收到最多分析查询的那张表。这样可以帮助您熟悉 ClickHouse 的核心概念。随着后续添加更多表,为了充分利用 ClickHouse 的特性并获得最佳性能,可能需要对该表进行重新建模。我们在[数据建模文档](/data-modeling/schema-design#next-data-modeling-techniques)中对这一建模过程进行了探讨。 @@ -108,7 +108,7 @@ CREATE TABLE stackoverflow.posts ( ); ``` -### 优化数据类型 +### 优化数据类型 {#optimizing-types} 按照[此处所述的流程](/data-modeling/schema-design)进行后,将得到如下模式: @@ -174,11 +174,11 @@ INSERT INTO stackoverflow.posts SELECT * FROM gcs( 'gs://clickhouse-public-datas -## 数据建模技术 +## 数据建模技术 {#data-modeling-techniques} 我们建议从 BigQuery 迁移的用户阅读[在 ClickHouse 中进行数据建模的指南](/data-modeling/schema-design)。该指南使用相同的 Stack Overflow 数据集,并结合 ClickHouse 的特性来探索多种建模方法。 -### 分区 +### 分区 {#partitions} BigQuery 用户应该已经熟悉表分区的概念:通过将表拆分为更小、更易管理的部分(称为分区),来提升大型数据库的性能和可管理性。分区可以通过在指定列(例如日期)上使用范围分区、定义列表分区,或者基于键的哈希分区来实现。这使得管理员可以根据特定条件(例如日期范围或地理位置)来组织数据。 @@ -205,7 +205,7 @@ ORDER BY (PostTypeId, toDate(CreationDate), CreationDate) PARTITION BY toYear(CreationDate) ``` -#### 应用场景 +#### 应用场景 {#applications} ClickHouse 中的分区与 BigQuery 有类似的应用场景,但存在一些细微差异。更具体地说: @@ -259,7 +259,7 @@ Ok. -## 物化视图与投影 +## 物化视图与投影 {#materialized-views-vs-projections} ClickHouse 的投影(projection)概念允许用户为同一张表指定多个 `ORDER BY` 子句。 @@ -397,7 +397,7 @@ WHERE UserId = 8592047 ``` -## 在 ClickHouse 中重写 BigQuery 查询 +## 在 ClickHouse 中重写 BigQuery 查询 {#rewriting-bigquery-queries-in-clickhouse} 下文给出了 BigQuery 与 ClickHouse 的对比查询示例。该列表旨在演示如何利用 ClickHouse 的特性来大幅简化查询。这里的示例使用完整的 Stack Overflow 数据集(截至 2024 年 4 月)。 @@ -465,7 +465,7 @@ LIMIT 5 ``` -## 聚合函数 +## 聚合函数 {#aggregate-functions} 在条件允许的情况下,用户应尽可能利用 ClickHouse 的聚合函数。下面我们展示如何使用 [`argMax` 函数](/sql-reference/aggregate-functions/reference/argmax) 来计算每一年浏览次数最多的问题。 @@ -520,7 +520,7 @@ MaxViewCount: 66975 ``` -## 条件和数组 +## 条件和数组 {#conditionals-and-arrays} 条件和数组函数可以显著简化查询。下面的查询会计算在 2022 年到 2023 年间,出现次数超过 10000 次的标签中,百分比增幅最大的那些标签。请注意,得益于条件函数、数组函数以及在 `HAVING` 和 `SELECT` 子句中重复使用别名的能力,下面的 ClickHouse 查询非常简洁。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md index 2276b4afab1..c24a5e61814 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/03_bigquery/03_loading-data.md @@ -30,7 +30,7 @@ _本指南适用于 ClickHouse Cloud 以及自托管的 ClickHouse v23.5 及以 -## 将表数据导出到 GCS +## 将表数据导出到 GCS {#1-export-table-data-to-gcs} 在此步骤中,我们使用 [BigQuery SQL workspace](https://cloud.google.com/bigquery/docs/bigquery-web-ui) 来执行 SQL 命令。下面的示例中,我们使用 [`EXPORT DATA`](https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements) 语句,将名为 `mytable` 的 BigQuery 表导出到一个 GCS 存储桶中。 @@ -67,7 +67,7 @@ END WHILE; * Parquet 作为列式格式,是更好的交换格式,因为它天然具备压缩特性,并且对 BigQuery 导出和 ClickHouse 查询都更快。 -## 将数据从 GCS 导入 ClickHouse +## 将数据从 GCS 导入 ClickHouse {#2-importing-data-into-clickhouse-from-gcs} 导出完成后,我们即可将这些数据导入到 ClickHouse 表中。可以使用 [ClickHouse SQL console](/integrations/sql-clients/sql-console) 或 [`clickhouse-client`](/interfaces/cli) 来执行以下命令。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md index 227c4659ba0..ddced0f3d36 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/01_overview.md @@ -13,7 +13,7 @@ import cloud_architecture from '@site/static/images/cloud/onboard/discover/use_c import Image from '@theme/IdealImage'; -# 从 Snowflake 迁移到 ClickHouse +# 从 Snowflake 迁移到 ClickHouse {#snowflake-to-clickhouse-migration} > 本文档介绍如何将数据从 Snowflake 迁移到 ClickHouse。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md index 6f05d894808..2fafdbe7714 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/02_migration_guide.md @@ -12,7 +12,7 @@ import migrate_snowflake_clickhouse from '@site/static/images/migrations/migrate import Image from '@theme/IdealImage'; -# 从 Snowflake 迁移到 ClickHouse +# 从 Snowflake 迁移到 ClickHouse {#migrate-from-snowflake-to-clickhouse} > 本指南介绍如何将数据从 Snowflake 迁移到 ClickHouse。 @@ -21,7 +21,7 @@ import Image from '@theme/IdealImage'; -## 从 Snowflake 导出数据 +## 从 Snowflake 导出数据 {#1-exporting-data-from-snowflake} @@ -59,7 +59,7 @@ COPY INTO @external_stage/mydataset from mydataset max_file_size=157286400 heade 对于大约 5TB 的数据集(单个文件最大 150MB),在同一 AWS `us-east-1` 区域使用 2X-Large Snowflake 仓库时,将数据复制到 S3 存储桶大约需要 30 分钟。 -## 导入 ClickHouse +## 导入 ClickHouse {#2-importing-to-clickhouse} 将数据暂存到中间对象存储后,就可以使用 ClickHouse 的函数(例如 [s3 表函数](/sql-reference/table-functions/s3))将数据插入到表中,如下所示。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md index 2218bedf103..72b7745644a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/04_snowflake/03_sql_translation_reference.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# Snowflake SQL 转换指南 +# Snowflake SQL 转换指南 {#snowflake-sql-translation-guide} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md index 9e02ee52184..33ea300a539 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/05_elastic/01_overview.md @@ -8,6 +8,6 @@ show_related_blogs: true doc_type: 'landing-page' --- -# Elasticsearch 到 ClickHouse 的迁移 +# Elasticsearch 到 ClickHouse 的迁移 {#elasticsearch-to-clickhouse-migration} 在可观测性相关的使用场景中,请参阅 [Elasticsearch 到 ClickStack 的迁移文档](/use-cases/observability/clickstack/migration/elastic)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md index 0bf5d4cae1c..f5b6d8fab56 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/01_overview.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# 从 Amazon Redshift 迁移到 ClickHouse +# 从 Amazon Redshift 迁移到 ClickHouse {#amazon-redshift-to-clickhouse-migration} > 本文档对如何将数据从 Amazon Redshift 迁移到 ClickHouse 进行简介。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md index eb6c643cb3c..60414051a8f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/02_migration_guide.md @@ -7,9 +7,8 @@ title: '从 Amazon Redshift 迁移到 ClickHouse 指南' doc_type: 'guide' --- -import MigrationGuide from '@site/docs/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +import MigrationGuide from '@site/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/redshift/_snippets/_migration_guide.md' +# 从 Amazon Redshift 迁移到 ClickHouse 指南 {#amazon-redshift-to-clickhouse-migration-guide} -# 从 Amazon Redshift 迁移到 ClickHouse 指南 - - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md index db4ff876992..68984128a4f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/06_redshift/03_sql_translation_reference.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Amazon Redshift SQL 转换指南 +# Amazon Redshift SQL 转换指南 {#amazon-redshift-sql-translation-guide} @@ -52,9 +52,9 @@ doc_type: 'reference' -## DDL 语法 +## DDL 语法 {#compression} -### 排序键 +### 排序键 {#sorting-keys} ClickHouse 和 Redshift 都有“排序键”的概念,用于定义数据在存储时的排序方式。Redshift 使用 `SORTKEY` 子句来定义排序键: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md index 29e44477964..81531876604 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/07_OSS_to_Cloud/01_clickhouse-to-cloud.md @@ -8,7 +8,7 @@ keywords: ['迁移', 'ClickHouse Cloud', 'OSS', '将自托管迁移到 Cloud'] --- import Image from '@theme/IdealImage'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import self_managed_01 from '@site/static/images/integrations/migration/self-managed-01.png'; import self_managed_02 from '@site/static/images/integrations/migration/self-managed-02.png'; import self_managed_03 from '@site/static/images/integrations/migration/self-managed-03.png'; @@ -16,16 +16,13 @@ import self_managed_04 from '@site/static/images/integrations/migration/self-man import self_managed_05 from '@site/static/images/integrations/migration/self-managed-05.png'; import self_managed_06 from '@site/static/images/integrations/migration/self-managed-06.png'; +# 在自托管 ClickHouse 与 ClickHouse Cloud 之间迁移 {#migrating-between-self-managed-clickhouse-and-clickhouse-cloud} -# 在自托管 ClickHouse 与 ClickHouse Cloud 之间迁移 - - + 本指南将说明如何将自托管 ClickHouse 服务器迁移到 ClickHouse Cloud,以及如何在不同的 ClickHouse Cloud 服务之间进行迁移。[`remoteSecure`](/sql-reference/table-functions/remote) 函数在 `SELECT` 和 `INSERT` 查询中使用,以便访问远程 ClickHouse 服务器,这使得迁移数据表变得非常简单,只需编写一个嵌套 `SELECT` 的 `INSERT INTO` 查询即可完成。 - - -## 从自托管 ClickHouse 迁移到 ClickHouse Cloud +## 从自托管 ClickHouse 迁移到 ClickHouse Cloud {#migrating-from-self-managed-clickhouse-to-clickhouse-cloud} @@ -36,7 +33,7 @@ ClickHouse Cloud 会自动处理纵向和横向扩展。无需再考虑如何对 在本示例中,自托管 ClickHouse 服务器是*源端*,ClickHouse Cloud 服务是*目标端*。 -### 概览 +### 概览 {#overview} 流程如下: @@ -46,11 +43,11 @@ ClickHouse Cloud 会自动处理纵向和横向扩展。无需再考虑如何对 4. 从目标端的 IP 访问列表中移除源服务器(如适用) 5. 从源服务中删除该只读用户 -### 在两个系统之间迁移表: +### 在两个系统之间迁移表: {#migration-of-tables-from-one-system-to-another} 本示例会将一个表从自托管 ClickHouse 服务器迁移到 ClickHouse Cloud。 -### 在源 ClickHouse 系统上(当前托管数据的系统) +### 在源 ClickHouse 系统上(当前托管数据的系统) {#on-the-source-clickhouse-system-the-system-that-currently-hosts-the-data} * 添加一个可以读取源表(本例中为 `db.table`)的只读用户 @@ -72,7 +69,7 @@ FROM system.tables WHERE database = 'db' AND table = 'table' ``` -### 在目标 ClickHouse Cloud 系统上: +### 在目标 ClickHouse Cloud 系统上: {#on-the-destination-clickhouse-cloud-system} * 创建目标数据库: @@ -119,8 +116,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS') SELECT * FROM db.table ``` - -## 在 ClickHouse Cloud 服务之间迁移 +## 在 ClickHouse Cloud 服务之间迁移 {#migrating-between-clickhouse-cloud-services} @@ -143,7 +139,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 6. 在目标服务上重新建立 IP 访问列表 7. 从源服务中移除只读用户 -#### 在源服务中添加只读用户 +#### 在源服务中添加只读用户 {#add-a-read-only-user-to-the-source-service} * 添加一个只读用户,用于读取源表(本示例中为 `db.table`): @@ -164,7 +160,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', where database = 'db' and table = 'table' ``` -#### 在目标服务上复制表结构 +#### 在目标服务上复制表结构 {#duplicate-the-table-structure-on-the-destination-service} 在目标服务上,如果数据库尚不存在,则先创建数据库: @@ -181,7 +177,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', CREATE TABLE db.table ... ``` -#### 允许对源服务的远程访问 +#### 允许对源服务的远程访问 {#allow-remote-access-to-the-source-service} 为了将数据从源服务拉取到目标服务,源服务必须允许来自外部的连接。请在源服务上临时禁用“IP Access List(IP 访问列表)”功能。 @@ -191,7 +187,7 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 修改访问列表,并临时将访问范围设置为 **Anywhere(任意地址)**。详细信息请参阅 [IP Access List](/cloud/security/setting-ip-filters) 文档。 -#### 将数据从源服务复制到目标服务 +#### 将数据从源服务复制到目标服务 {#copy-the-data-from-source-to-destination} * 使用 `remoteSecure` 函数从源 ClickHouse Cloud 服务拉取数据。 连接到目标服务,并在目标 ClickHouse Cloud 服务上运行以下命令: @@ -203,11 +199,11 @@ remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', * 在目标服务中验证数据 -#### 在源服务上重新建立 IP 访问列表 +#### 在源服务上重新建立 IP 访问列表 {#re-establish-the-ip-access-list-on-the-source} 如果之前导出了访问列表,则可以通过 **Share** 进行重新导入;否则,请重新将各条访问记录添加到访问列表中。 -#### 移除只读的 `exporter` 用户 +#### 移除只读的 `exporter` 用户 {#remove-the-read-only-exporter-user} ```sql DROP USER exporter diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md index 7b886152e93..073f00c42a7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/01_clickhouse-local-etl.md @@ -11,14 +11,14 @@ import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import AddARemoteSystem from '@site/docs/_snippets/_add_remote_ip_access_list_detail.md'; +import AddARemoteSystem from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_add_remote_ip_access_list_detail.md'; import ch_local_01 from '@site/static/images/integrations/migration/ch-local-01.png'; import ch_local_02 from '@site/static/images/integrations/migration/ch-local-02.png'; import ch_local_03 from '@site/static/images/integrations/migration/ch-local-03.png'; import ch_local_04 from '@site/static/images/integrations/migration/ch-local-04.png'; -# 使用 clickhouse-local 迁移到 ClickHouse +# 使用 clickhouse-local 迁移到 ClickHouse {#migrating-to-clickhouse-using-clickhouse-local} @@ -94,21 +94,21 @@ ClickHouse 为 [MySQL](/engines/table-engines/integrations/mysql/)、[PostgreSQL -## 示例 1:使用集成引擎从 MySQL 迁移到 ClickHouse Cloud +## 示例 1:使用集成引擎从 MySQL 迁移到 ClickHouse Cloud {#example-1-migrating-from-mysql-to-clickhouse-cloud-with-an-integration-engine} 我们将使用 [integration 表引擎](/engines/table-engines/integrations/mysql/)(由 [mysql 表函数](/sql-reference/table-functions/mysql/) 动态创建)从源 MySQL 数据库读取数据,并使用 [remoteSecure 表函数](/sql-reference/table-functions/remote/) 将数据写入您在 ClickHouse Cloud 服务上的目标表中。 -### 在目标 ClickHouse Cloud 服务上: +### 在目标 ClickHouse Cloud 服务上: {#on-the-destination-clickhouse-cloud-service} -#### 创建目标数据库: +#### 创建目标数据库: {#create-the-destination-database} ```sql CREATE DATABASE db ``` -#### 创建一个目标表,使其表结构与 MySQL 表相同: +#### 创建一个目标表,使其表结构与 MySQL 表相同: {#create-a-destination-table-that-has-a-schema-equivalent-to-the-mysql-table} ```sql CREATE TABLE db.table ... @@ -118,9 +118,9 @@ CREATE TABLE db.table ... ClickHouse Cloud 目标表的表结构必须与源 MySQL 表的表结构保持一致(列名和列顺序必须相同,且列的数据类型必须兼容)。 ::: -### 在运行 clickhouse-local 的主机上: +### 在运行 clickhouse-local 的主机上: {#on-the-clickhouse-local-host-machine} -#### 使用迁移查询语句运行 clickhouse-local: +#### 使用迁移查询语句运行 clickhouse-local: {#run-clickhouse-local-with-the-migration-query} ```sql ./clickhouse-local --query " @@ -135,16 +135,16 @@ SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');" ::: -## 示例 2:使用 JDBC bridge 将 MySQL 迁移到 ClickHouse Cloud +## 示例 2:使用 JDBC bridge 将 MySQL 迁移到 ClickHouse Cloud {#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge} 我们将使用 [JDBC 集成表引擎](/engines/table-engines/integrations/jdbc.md)(由 [jdbc 表函数](/sql-reference/table-functions/jdbc.md) 动态创建),配合 [ClickHouse JDBC Bridge](https://github.com/ClickHouse/clickhouse-jdbc-bridge) 和 MySQL JDBC 驱动,从源 MySQL 数据库读取数据,并使用 [remoteSecure 表函数](/sql-reference/table-functions/remote.md) 将数据写入 ClickHouse Cloud 服务中的目标表。 -### 在目标 ClickHouse Cloud 服务上: +### 在目标 ClickHouse Cloud 服务上: {#on-the-destination-clickhouse-cloud-service-1} -#### 创建目标数据库: +#### 创建目标数据库: {#create-the-destination-database-1} ```sql CREATE DATABASE db diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md index 0a19e1792f1..caff40358f9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/02_etl-tool-to-clickhouse.md @@ -10,15 +10,14 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import third_party_01 from '@site/static/images/integrations/migration/third-party-01.png'; +# 使用第三方 ETL 工具 {#using-a-3rd-party-etl-tool} -# 使用第三方 ETL 工具 - - + 将数据从外部数据源迁移到 ClickHouse 的一个很好的选择,是使用众多流行的 ETL/ELT 工具之一。我们提供以下相关文档: -- [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) -- [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) -- [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) +* [Airbyte](/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md) +* [dbt](/integrations/data-ingestion/etl-tools/dbt/index.md) +* [Vector](/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md) 此外,还有许多其他 ETL/ELT 工具可以与 ClickHouse 集成,请查阅所使用工具的文档以获取详细信息。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md index a4ffa3f686f..3c3ce652b33 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/02_migrate/01_migration_guides/08_other_methods/03_object-storage-to-clickhouse.md @@ -9,16 +9,15 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import object_storage_01 from '@site/static/images/integrations/migration/object-storage-01.png'; +# 将数据从云对象存储迁移到 ClickHouse Cloud {#move-data-from-cloud-object-storage-to-clickhouse-cloud} -# 将数据从云对象存储迁移到 ClickHouse Cloud - - + 如果你将云对象存储用作数据湖并希望将这些数据导入 ClickHouse Cloud,或者当前数据库系统可以直接将数据导出到云对象存储,那么可以使用以下表函数,将存储在云对象存储中的数据迁移到 ClickHouse Cloud 表中: -- [s3](/sql-reference/table-functions/s3.md) 或 [s3Cluster](/sql-reference/table-functions/s3Cluster.md) -- [gcs](/sql-reference/table-functions/gcs) -- [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) +* [s3](/sql-reference/table-functions/s3.md) 或 [s3Cluster](/sql-reference/table-functions/s3Cluster.md) +* [gcs](/sql-reference/table-functions/gcs) +* [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage) 如果当前数据库系统无法直接将数据导出到云对象存储,你可以使用[第三方 ETL/ELT 工具](/cloud/migration/etl-tool-to-clickhouse)或 [clickhouse-local](/cloud/migration/clickhouse-local),先将数据从当前数据库系统迁移到云对象存储,然后在第二步再将这些数据迁移到 ClickHouse Cloud 表中。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md index c632dbef4a4..ba8f98f5738 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/03_tune/resource_tour.md @@ -7,12 +7,12 @@ hide_title: true doc_type: 'guide' --- -import TableOfContentsBestPractices from '@site/docs/best-practices/_snippets/_table_of_contents.md'; -import TableOfContentsOptimizationAndPerformance from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; -import TableOfContentsSecurity from '@site/docs/cloud/_snippets/_security_table_of_contents.md'; +import TableOfContentsBestPractices from '@site/i18n/zh/docusaurus-plugin-content-docs/current/best-practices/_snippets/_table_of_contents.md'; +import TableOfContentsOptimizationAndPerformance from '@site/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContentsSecurity from '@site/i18n/zh/docusaurus-plugin-content-docs/current/cloud/_snippets/_security_table_of_contents.md'; -# 资源导览 +# 资源导览 {#resource-tour} 本文旨在为您概述文档中可用的资源,帮助您充分发挥 ClickHouse Cloud 部署的价值。 您可以按以下主题浏览资源: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/index.md index 21dd61d6c13..78cfbcf5194 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/onboard/index.md @@ -9,7 +9,7 @@ keywords: ['上手引导', '入门', '云端配置', '快速入门', '简介'] -# ClickHouse Cloud 入门 +# ClickHouse Cloud 入门 {#get-started-with-clickhouse-cloud} 初次使用 ClickHouse Cloud,不知从何入手?本文档部分将指导您完成快速部署和运行所需的全部步骤。我们将入门指南划分为三个子部分,帮助您在探索 ClickHouse Cloud 的过程中循序渐进地完成各项配置。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md index ebe542c9ce2..ae0334e3395 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_02.md @@ -12,7 +12,7 @@ doc_type: 'changelog' -#### 不向后兼容的变更 +#### 不向后兼容的变更 {#backward-incompatible-change} * 在嵌套类型中对可疑/实验性类型进行校验。此前我们不会在 Array/Tuple/Map 等嵌套类型中校验这类类型(JSON 除外)。[#59385](https://github.com/ClickHouse/ClickHouse/pull/59385)([Kruglov Pavel](https://github.com/Avogar))。 * 排序子句 `ORDER BY ALL`(在 v23.12 中引入)已被 `ORDER BY *` 取代。之前的语法对于包含名为 `all` 的列的表而言过于容易出错。[#59450](https://github.com/ClickHouse/ClickHouse/pull/59450)([Robert Schulze](https://github.com/rschu1ze))。 @@ -29,7 +29,7 @@ doc_type: 'changelog' -#### 新功能 +#### 新功能 {#new-feature} * 支持返回值计数及其误差的 topk/topkweighed 模式。 [#54508](https://github.com/ClickHouse/ClickHouse/pull/54508) ([UnamedRus](https://github.com/UnamedRus)). * 新增语法,允许在视图/物化视图中指定定义者用户(definer user)。这样可以在未对底层表显式授予权限的情况下,通过视图执行 SELECT/INSERT 操作。[#54901](https://github.com/ClickHouse/ClickHouse/pull/54901) ([pufit](https://github.com/pufit))。 @@ -57,7 +57,7 @@ doc_type: 'changelog' -#### 性能优化 +#### 性能优化 {#performance-improvement} * 在 `SELECT` 子句中消除了对 `GROUP BY` 键使用 `min`/`max`/`any`/`anyLast` 聚合函数的情况。[#52230](https://github.com/ClickHouse/ClickHouse/pull/52230) ([JackyWoo](https://github.com/JackyWoo))。 * 在处理多个 [nullable] 列时提升序列化聚合方法的性能。这是 [#51399](https://github.com/ClickHouse/ClickHouse/issues/51399) 的通用化版本,同时不牺牲抽象层的完整性。[#55809](https://github.com/ClickHouse/ClickHouse/pull/55809)([Amos Bird](https://github.com/amosbird))。 @@ -86,7 +86,7 @@ doc_type: 'changelog' -#### 改进 +#### 改进 {#improvement} * 在对物化视图运行 MODIFY COLUMN 查询时,检查内部表的结构以确保所有列均存在。[#47427](https://github.com/ClickHouse/ClickHouse/pull/47427) ([sunny](https://github.com/sunny19930321))。 * 新增了表 `system.keywords`,其中包含解析器中的所有关键字。主要是为了更好地支持模糊测试和语法高亮。 [#51808](https://github.com/ClickHouse/ClickHouse/pull/51808) ([Nikita Mikhaylov](https://github.com/nikitamikhaylov))。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md index f74695431ea..3460352d38c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_05.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# V24.5 Cloud 版本变更日志 +# V24.5 Cloud 版本变更日志 {#v245-changelog-for-cloud} 基于 v24.5 版本的 ClickHouse Cloud 服务相关变更。 @@ -128,7 +128,7 @@ doc_type: 'changelog' -# 改进 +# 改进 {#improvements} * 移除 `optimize_monotonous_functions_in_order_by` 设置,该设置正逐渐变成空操作(no-op)。[#63004](https://github.com/ClickHouse/ClickHouse/pull/63004) (Raúl Marín)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md index 32de2aef8ea..9a5c5929ef3 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_06.md @@ -10,7 +10,7 @@ doc_type: 'changelog' -# V24.6 版 Cloud 更新日志 +# V24.6 版 Cloud 更新日志 {#v246-changelog-for-cloud} v24.6 版本中与 ClickHouse Cloud 服务相关的更改。 @@ -110,7 +110,7 @@ v24.6 版本中与 ClickHouse Cloud 服务相关的更改。 -## 错误修复(官方稳定版本中用户可见的异常行为) +## 错误修复(官方稳定版本中用户可见的异常行为) {#bug-fix-user-visible-misbehavior-in-an-official-stable-release} * 修复了在与 IN 和 indexHint() 一起使用时 'set' 跳过索引不起作用的问题。#62083 (Michael Kolupaev)。 * 修复在表未使用自适应粒度时,带有 FINAL 关键字的查询返回错误结果的问题。#62432(Duc Canh Le)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md index c4d8c1228ce..91bad566910 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/01_changelog/02_release_notes/24_10.md @@ -22,7 +22,7 @@ doc_type: 'changelog' -## 新功能 +## 新功能 {#new-feature} * 可刷新物化视图已经可以在生产环境中使用。[#70550](https://github.com/ClickHouse/ClickHouse/pull/70550)([Michael Kolupaev](https://github.com/al13n321))。Replicated 数据库现已支持可刷新物化视图。[#60669](https://github.com/ClickHouse/ClickHouse/pull/60669)([Michael Kolupaev](https://github.com/al13n321))。 * 函数 `toStartOfInterval()` 现在新增了一个重载,可用于模拟 TimescaleDB 的 `time_bucket()` 函数以及 PostgreSQL 的 `date_bin()` 函数([#55619](https://github.com/ClickHouse/ClickHouse/issues/55619))。它允许将日期或时间戳值,对齐到从*任意*起点开始的给定时间间隔的整数倍(而不是以 0000-01-01 00:00:00.000 作为*固定*起点)。例如,`SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));` 会返回 `2023-01-01 14:44:30`,这是以起点 `2023-01-01 14:35:30` 开始的 1 分钟间隔的整数倍。[#56738](https://github.com/ClickHouse/ClickHouse/pull/56738)([Yarik Briukhovetskyi](https://github.com/yariks5s))。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md index 09c9438efdd..73f50852bd9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/02_architecture.md @@ -11,7 +11,7 @@ import Image from '@theme/IdealImage'; import Architecture from '@site/static/images/cloud/reference/architecture.png'; -# ClickHouse Cloud 架构 +# ClickHouse Cloud 架构 {#clickhouse-cloud-architecture} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md index 38b34fffde7..2510653ffdd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/01_billing_overview.md @@ -181,9 +181,9 @@ ClickHouse Cloud 会根据计算、存储、[数据传输](/cloud/manage/network -## 常见问题 +## 常见问题 {#faqs} -### 什么是 ClickHouse Credit(CHC)? +### 什么是 ClickHouse Credit(CHC)? {#what-is-chc} ClickHouse Credit 是针对客户使用 ClickHouse Cloud 的一单位额度,等同于一(1)美元,并按 ClickHouse 届时发布的有效价目表进行折算。 @@ -191,27 +191,27 @@ ClickHouse Credit 是针对客户使用 ClickHouse Cloud 的一单位额度, 如果您通过 Stripe 支付账单,那么在您的 Stripe 发票上会看到 1 CHC 等于 0.01 美元。这是为了在 Stripe 上实现精确计费,因为 Stripe 无法针对我们标准 SKU(1 CHC = 1 美元)按非整数数量进行计费。 ::: -### 在哪里可以找到旧版定价信息? +### 在哪里可以找到旧版定价信息? {#find-legacy-pricing} 旧版定价信息可以在[这里](https://clickhouse.com/pricing?legacy=true)找到。 -### 计算资源是如何计量的? +### 计算资源是如何计量的? {#how-is-compute-metered} ClickHouse Cloud 以每分钟为单位计量计算资源,粒度为每 8GB 内存。 计算费用会根据服务等级、区域和云服务提供商而变化。 -### 磁盘存储是如何计算的? +### 磁盘存储是如何计算的? {#how-is-storage-on-disk-calculated} ClickHouse Cloud 使用云对象存储,并根据存储在 ClickHouse 表中的数据压缩后大小来计量用量。 存储费用在各服务等级之间相同,但会根据区域和云服务提供商而变化。 -### 备份是否计入总存储? +### 备份是否计入总存储? {#do-backups-count-toward-total-storage} 存储和备份都会计入存储用量,并分别计费。 所有服务默认保留一个备份,保留时间为一天。 需要额外备份的用户可以在 Cloud 控制台的“设置”标签页中配置额外的[备份](/cloud/manage/backups/overview)。 -### 我该如何估算压缩比? +### 我该如何估算压缩比? {#how-do-i-estimate-compression} 压缩率会因数据集而异。 压缩率变化的程度取决于数据本身的可压缩性(高基数字段和低基数字段的数量), @@ -228,12 +228,12 @@ FROM system.tables WHERE name = <你的表名> ``` -### 如果我有自管部署,ClickHouse 提供哪些工具来预估在云端运行服务的成本? +### 如果我有自管部署,ClickHouse 提供哪些工具来预估在云端运行服务的成本? {#what-tools-does-clickhouse-offer-to-estimate-the-cost-of-running-a-service-in-the-cloud-if-i-have-a-self-managed-deployment} ClickHouse 查询日志会捕获[关键指标](/operations/system-tables/query_log),可用于估算在 ClickHouse Cloud 中运行工作负载的成本。 关于从自管环境迁移到 ClickHouse Cloud 的详细信息,请参阅[迁移文档](/cloud/migration/clickhouse-to-cloud),如有进一步问题,请联系 [ClickHouse Cloud 支持](https://console.clickhouse.cloud/support)。 -### ClickHouse Cloud 提供哪些计费选项? +### ClickHouse Cloud 提供哪些计费选项? {#what-billing-options-are-available-for-clickhouse-cloud} ClickHouse Cloud 支持以下计费选项: @@ -245,11 +245,11 @@ ClickHouse Cloud 支持以下计费选项: 用于 PAYG 的 ClickHouse Cloud credits 按 $0.01 为单位开具发票,使我们能够根据客户的实际使用量按部分 ClickHouse credits 收费。这不同于承诺支出型 ClickHouse credits,后者是以整 $1 为单位预付购买。 ::: -### 我可以删除我的信用卡吗? +### 我可以删除我的信用卡吗? {#can-i-delete-my-credit-card} 您无法在计费 UI 中移除信用卡,但可以随时更新。这有助于确保您的组织始终具有有效的付款方式。如果您需要移除信用卡,请联系 [ClickHouse Cloud 支持](https://console.clickhouse.cloud/support) 获取帮助。 -### 计费周期有多长? +### 计费周期有多长? {#how-long-is-the-billing-cycle} 计费采用月度周期,开始日期为创建 ClickHouse Cloud 组织的日期。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md index 0e247f3b8ea..1225bf6ff4a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/02_marketplace/aws-marketplace-payg.md @@ -1,7 +1,7 @@ --- slug: /cloud/billing/marketplace/aws-marketplace-payg -title: 'AWS Marketplace 按需计费(PAYG)' -description: '通过 AWS Marketplace 以按需计费(PAYG)方式订阅 ClickHouse Cloud。' +title: 'AWS Marketplace 按需付费 (PAYG)' +description: '通过 AWS Marketplace 以按需付费 (PAYG) 方式订阅 ClickHouse Cloud。' keywords: ['aws', 'marketplace', 'billing', 'PAYG'] doc_type: 'guide' --- @@ -17,68 +17,67 @@ import aws_marketplace_payg_8 from '@site/static/images/cloud/manage/billing/mar import aws_marketplace_payg_9 from '@site/static/images/cloud/manage/billing/marketplace/aws-marketplace-payg-9.png'; import Image from '@theme/IdealImage'; -通过 [AWS Marketplace](https://aws.amazon.com/marketplace) 上的按需付费(PAYG)公共报价开始使用 ClickHouse Cloud。 +在 [AWS Marketplace](https://aws.amazon.com/marketplace) 上通过 PAYG(按需付费)公共优惠开始使用 ClickHouse Cloud。 -## 先决条件 {#prerequisites} +## 前提条件 {#prerequisites} - 一个已由计费管理员开通购买权限的 AWS 账户。 - 要进行购买,您必须使用该账户登录 AWS Marketplace。 -- 若要将 ClickHouse 组织关联到您的订阅,您必须是该组织的管理员。 +- 要将 ClickHouse 组织关联到您的订阅,您必须是该组织的管理员。 :::note -一个 AWS 账户只能订阅一个 “ClickHouse Cloud - 按量付费” 订阅,并且该订阅只能关联一个 ClickHouse 组织。 +一个 AWS 账户最多只能订阅一个“ClickHouse Cloud - Pay As You Go”订阅,并且该订阅只能关联到一个 ClickHouse 组织。 ::: - - ## 注册步骤 {#steps-to-sign-up} ### 搜索 ClickHouse Cloud - Pay As You Go {#search-payg} -前往 [AWS Marketplace](https://aws.amazon.com/marketplace),搜索 “ClickHouse Cloud - Pay As You Go”。 +前往 [AWS Marketplace](https://aws.amazon.com/marketplace),搜索“ClickHouse Cloud - Pay As You Go”。 ### 查看购买选项 {#purchase-options} -点击该[产品页面](https://aws.amazon.com/marketplace/pp/prodview-p4gwofrqpkltu),然后点击 **View purchase options**。 +点击该[商品详情页](https://aws.amazon.com/marketplace/pp/prodview-p4gwofrqpkltu),然后点击 **View purchase options**。 - + ### 订阅 {#subscribe} -在下一个页面中,点击 **Subscribe**。 +在下一屏上点击 **subscribe**。 :::note -**Purchase order (PO) number(采购订单号)** 为可选项,可以忽略。 +**采购订单(PO)号** 为可选项,可以忽略。 +**此商品有两个可选报价。** 如果选择 “ClickHouse Cloud - Pay As You Go Free Trial” 报价,您将订阅一个由 AWS 管理的 30 天免费试用。需要注意的是,30 天结束后,此商品订阅将终止,您需要在该商品页面重新订阅另一个 “ClickHouse Cloud - Pay As You Go” 报价,才能继续使用 ClickHouse Pay As You Go。 ::: - + -### 设置你的账户 {#set-up-your-account} +### 设置您的账户 {#set-up-your-account} -请注意,此时设置尚未完成,你的 ClickHouse Cloud 组织尚未通过 Marketplace 计费。你现在需要在 Marketplace 订阅页面中点击 **Set up your account**,跳转到 ClickHouse Cloud 完成配置。 +请注意,此时设置尚未完成,您的 ClickHouse Cloud 组织也尚未通过 Marketplace 计费。您现在需要在 Marketplace 订阅页面中点击 **Set up your account**,跳转到 ClickHouse Cloud 完成最终设置。 - + -跳转到 ClickHouse Cloud 后,你可以使用现有账户登录,或者注册一个新账户。此步骤非常关键,以便我们将你的 ClickHouse Cloud 组织绑定到你的 AWS Marketplace 计费。 +重定向至 ClickHouse Cloud 后,您可以使用现有账户登录,或注册新账户。此步骤非常重要,以便我们将您的 ClickHouse Cloud 组织与 AWS Marketplace 计费绑定。 -:::note[新 ClickHouse Cloud 用户] -如果你是新的 ClickHouse Cloud 用户,请按照下面的步骤操作。 +:::note[ClickHouse Cloud 新用户] +如果您是 ClickHouse Cloud 新用户,请按照以下步骤操作。 :::
新用户步骤 -如果你是新的 ClickHouse Cloud 用户,请点击页面底部的 **Register**。系统会提示你创建新用户并验证邮箱。完成邮箱验证后,你可以关闭 ClickHouse Cloud 登录页面,然后在 https://console.clickhouse.cloud 使用新用户名登录。 +如果您是 ClickHouse Cloud 新用户,请点击页面底部的 **Register**。系统会提示您创建一个新用户并验证邮箱。完成邮箱验证后,您可以关闭 ClickHouse Cloud 登录页面,并在 https://console.clickhouse.cloud 使用新的用户名登录。 :::note[新用户] -你还需要提供一些关于你业务的基本信息。请参见下面的截图。 +您还需要提供一些关于您业务的基本信息。请参见下方截图。 ::: @@ -87,24 +86,22 @@ import Image from '@theme/IdealImage';
-如果你是现有的 ClickHouse Cloud 用户,只需使用你的账户凭证登录即可。 +如果您是现有的 ClickHouse Cloud 用户,只需使用您的账号凭据登录即可。 ### 将 Marketplace 订阅添加到组织 {#add-marketplace-subscription} -成功登录后,你可以选择创建一个新组织,将其计费绑定到此 Marketplace 订阅;也可以选择一个现有组织,将其计费绑定到此订阅。 +成功登录后,您可以选择创建一个新组织,将此 Marketplace 订阅的计费归到该组织;也可以选择一个现有组织,将其计费归到此订阅下。 -完成此步骤后,你的组织将连接到该 AWS 订阅,所有用量将通过你的 AWS 账户计费。 +完成此步骤后,您的组织将关联到此 AWS 订阅,所有用量都会通过您的 AWS 账户计费。 -你可以在 ClickHouse UI 中该组织的计费页面确认计费已成功关联到 AWS Marketplace。 +您可以在 ClickHouse UI 中该组织的计费页面确认,计费现在确实已关联到 AWS Marketplace。
- - ## 支持 {#support} -如果您遇到任何问题,请随时联系[我们的支持团队](https://clickhouse.com/support/program)。 +如果您遇到任何问题,请随时联系[我们的支持团队](https://clickhouse.com/support/program)。 \ No newline at end of file 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/cloud/reference/03_billing/04_network-data-transfer.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx index cb106cb441e..14206f5852b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/04_network-data-transfer.mdx @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['计费', '网络传输', '数据出站', '成本', '定价'] --- -import NetworkPricing from '@site/docs/cloud/reference/_snippets/_network_transfer_rates.md'; +import NetworkPricing from '@site/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/_snippets/_network_transfer_rates.md'; ClickHouse Cloud 会监控并计量入站和出站的数据传输量。 这包括所有进出 ClickHouse Cloud 的数据,以及区域内和跨区域的数据传输。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md index ab7ffda14a9..64d77d586de 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/05_payment-thresholds.md @@ -7,9 +7,9 @@ keywords: ['计费', '支付阈值', '自动开票', '发票'] doc_type: 'guide' --- -# 付款阈值 +# 付款阈值 {#payment-thresholds} -当你在某一 ClickHouse Cloud 计费周期内的应付金额达到 10,000 美元(USD)或等值金额时,系统将会自动从你的付款方式中扣款。扣款失败将在宽限期结束后导致你的服务被暂停或终止。 +当你在某一 ClickHouse Cloud 计费周期内的应付金额达到 10,000 美元(USD)或等值金额时,系统将会自动从你的付款方式中扣款。扣款失败将在宽限期结束后导致你的服务被暂停或终止。 :::note 此付款阈值不适用于与 ClickHouse 签订了承诺消费合同或其他协商合同协议的客户。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md index f8f3454ca5d..f05658e7511 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/03_billing/06_billing_compliance.md @@ -11,7 +11,7 @@ import billing_compliance from '@site/static/images/cloud/manage/billing_complia import Image from '@theme/IdealImage'; -# ClickHouse Cloud 计费合规 +# ClickHouse Cloud 计费合规 {#clickhouse-cloud-billing-compliance} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md index 324aebcfbea..f3b5449378d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/05_supported-regions.md @@ -10,7 +10,7 @@ doc_type: 'reference' import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge' -# 受支持的云区域 +# 受支持的云区域 {#supported-cloud-regions} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md index 801199cb76b..161cd7408f4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/08_settings.md @@ -10,8 +10,7 @@ doc_type: 'guide' import Image from '@theme/IdealImage'; import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-settings-sidebar.png'; - -# 配置设置 +# 配置设置 {#configuring-settings} 要为特定[用户](/operations/access-rights#user-account-management)或[角色](/operations/access-rights#role-management)指定 ClickHouse Cloud 服务的设置,必须使用[基于 SQL 的 Settings Profiles](/operations/access-rights#settings-profiles-management)。应用 Settings Profiles 可以确保你配置的设置在服务停止、处于空闲状态或升级时仍然保持不变。要了解有关 Settings Profiles 的更多信息,请参阅[此页面](/operations/settings/settings-profiles.md)。 @@ -19,4 +18,4 @@ import cloud_settings_sidebar from '@site/static/images/cloud/manage/cloud-setti 若要进一步了解可以为 ClickHouse Cloud 服务指定的设置,请在[我们的文档](/operations/settings)中按类别查看所有可用设置。 - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md index 6fb5b3a42bf..633855714f0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/09_security/03_compliance-overview.md @@ -10,7 +10,7 @@ import BetaBadge from '@theme/badges/BetaBadge'; import EnterprisePlanFeatureBadge from '@theme/badges/EnterprisePlanFeatureBadge'; -# 安全与合规报告 +# 安全与合规报告 {#security-and-compliance-reports} ClickHouse 会评估客户在安全与合规方面的需求,并会根据额外报告请求持续扩展相关项目。有关更多信息或下载报告,请访问我们的[信任中心(Trust Center)](https://trust.clickhouse.com)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md index 10950b45226..dd2adbaceab 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/11_account-close.md @@ -37,7 +37,7 @@ doc_type: 'guide' -## 申请关闭账户 +## 申请关闭账户 {#request-account-closure} 我们必须对关闭和删除请求进行身份验证。为确保您的请求能够尽快处理,请按照以下步骤操作。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/index.md index d336123b7e0..0e4cf8d4043 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/cloud/reference/index.md @@ -7,7 +7,7 @@ description: 'Cloud 参考部分的概览页' doc_type: 'landing-page' --- -# 云端参考 +# 云端参考 {#cloud-reference} 本节作为 ClickHouse Cloud 更多技术细节的参考指南,包含以下页面: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/glossary.md b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/glossary.md index a4e8dc8d71e..a7ffce3acd9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/glossary.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/glossary.md @@ -10,7 +10,7 @@ doc_type: 'reference' {/* no-glossary */ } -# 词汇表 +# 词汇表 {#glossary} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/olap.md b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/olap.md index d364b33754b..d3d67924e83 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/olap.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/olap.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# 什么是 OLAP? +# 什么是 OLAP? {#what-is-olap} [OLAP](https://en.wikipedia.org/wiki/Online_analytical_processing) 是 Online Analytical Processing(联机分析处理)的缩写。这个术语范围很广,可以从两个角度来理解:技术角度和业务角度。在最高层面上,你可以简单地将这个短语反向理解: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx index 98ea29515bb..9a151e45baf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/concepts/why-clickhouse-is-so-fast.mdx @@ -18,7 +18,7 @@ doc_type: 'guide' ## 存储层:并发插入彼此之间是相互隔离的 \{#storage-layer-concurrent-inserts-are-isolated-from-each-other\} - + + + + + + + \ No newline at end of file + - + -## 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} +### 在非主键列上进行过滤 {#filtering-without-using-primary-keys} -## 示例 +在这个示例中,我们将向你展示如何为表添加一个投影(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 万行记录。该数据集同样可以在我们的 +### 使用投影加速英国房价已付数据查询 {#using-projections-to-speed-up-UK-price-paid} + +为了演示如何使用投影来加速查询性能,我们 +通过一个真实数据集的示例来说明。在本示例中,我们将 +使用 [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 秒。 ``` -### 更多示例 -以下示例使用相同的英国价格数据集,对比使用和不使用投影的查询。 +### 更多示例 {#further-examples} + +以下示例继续使用相同的英国价格数据集,对比使用和不使用投影的查询。 -为了保持原始表(及其性能)不受影响,我们再次使用 `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: +#### 构建 Projection {#build-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:各年份的平均价格 {#average-price-projections} ```sql runnable SELECT @@ -410,9 +408,10 @@ ORDER BY year ASC ``` -结果应该相同,但后一个示例的性能会更好! +结果应该是相同的,但后一个示例的性能会更优! + -#### 查询 2:伦敦每年的平均价格 +#### 查询 2:伦敦历年平均价格 {#average-price-london-projections} ```sql runnable SELECT @@ -437,9 +436,10 @@ GROUP BY year ORDER BY year ASC ``` -#### 查询 3:最昂贵的社区 -需要将条件 (date >= '2020-01-01') 修改为与投影维度 (`toYear(date) >= 2020)` 一致: +#### 查询 3:最昂贵的街区 {#most-expensive-neighborhoods-projections} + +条件 (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 +### 在单个查询中组合投影 {#combining-projections} -从 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..00a2620a01e 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 @@ -12,7 +12,6 @@ import Image from '@theme/IdealImage'; 理解高效的 schema 设计是优化 ClickHouse 性能的关键,其中的诸多选择往往需要在不同方案之间进行权衡,最优方案取决于实际查询模式,以及数据更新频率、延迟要求和数据量等因素。本指南概述了用于优化 ClickHouse 性能的 schema 设计最佳实践和数据建模技术。 - ## Stack Overflow 数据集 {#stack-overflow-dataset} 在本指南的示例中,我们使用 Stack Overflow 数据集的一个子集。该数据集包含自 2008 年至 2024 年 4 月在 Stack Overflow 上产生的每一条帖子、投票、用户、评论和徽章。该数据以 Parquet 格式提供,使用下方所示的 schema,存储在 S3 bucket `s3://datasets-documentation/stackoverflow/parquet/` 中: @@ -27,9 +26,7 @@ Stack Overflow 数据集包含多张相互关联的表。在任何数据建模 上述 schema 在本指南中是刻意未进行最优设计的。 - - -## 建立初始 schema +## 建立初始 schema {#establish-initial-schema} 由于 `posts` 表将是大多数分析查询的目标,我们重点为该表建立 schema。此数据位于公共 S3 bucket `s3://datasets-documentation/stackoverflow/parquet/posts/*.parquet` 中,每年一个文件。 @@ -129,7 +126,6 @@ INSERT INTO posts SELECT * FROM s3('https://datasets-documentation.s3.eu-west-3. > 上述查询会加载 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)。 - ## 优化类型 {#optimizing-types} ClickHouse 查询性能的秘密之一是压缩。 @@ -154,8 +150,6 @@ ClickHouse 中的压缩主要受 3 个因素影响:排序键(ordering key) 通过将这些简单规则应用到我们的 posts 表,我们可以为每一列识别出一个最优类型: - - | 列 | 是否为数值 | 最小值,最大值 | 唯一值 | 空值 | 注释 | 优化类型 | | ----------------------- | ----- | ------------------------------------------------------------ | -------- | -- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `PostTypeId` | 是 | 1, 8 | 8 | 否 | | `Enum('Question' = 1, 'Answer' = 2, 'Wiki' = 3, 'TagWikiExcerpt' = 4, 'TagWiki' = 5, 'ModeratorNomination' = 6, 'WikiPlaceholder' = 7, 'PrivilegeWiki' = 8)` | @@ -227,8 +221,7 @@ INSERT INTO posts_v2 SELECT * FROM posts ClickHouse 中的主(排序)键 来自 OLTP 数据库的用户通常会在 ClickHouse 中寻找与之对应的等价概念。 - -## 选择排序键 +## 选择排序键 {#choosing-an-ordering-key} 在 ClickHouse 通常使用的规模下,内存和磁盘效率至关重要。数据以称为 part 的数据块形式写入 ClickHouse 表,并在后台根据规则对这些 part 进行合并。在 ClickHouse 中,每个 part 都有自己的主索引。当 part 被合并时,合并后 part 的主索引也会被合并。每个 part 的主索引对每一组行只包含一个索引条目——这种技术称为稀疏索引(sparse indexing)。 @@ -247,7 +240,7 @@ ClickHouse 中的主(排序)键 在确定用于排序键的列子集时,需要按特定顺序声明这些列。此顺序会显著影响查询中对排序键中后续列进行过滤的效率,以及表数据文件的压缩比。通常,最好按基数(cardinality)从低到高来排列键。这需要与以下事实进行权衡:对在排序键中位置靠后的列进行过滤,其效率会低于对位置靠前列的过滤。在这些行为之间取得平衡,并结合你的访问模式进行考虑(最重要的是要测试不同方案)。 -### 示例 +### 示例 {#example} 将上述指南应用于我们的 `posts` 表,假设用户希望执行按日期和帖子类型过滤的分析,例如: @@ -279,7 +272,6 @@ LIMIT 3 让我们选择列 `PostTypeId` 和 `CreationDate` 作为排序键。 - 在我们的场景中,我们假定用户始终会按 `PostTypeId` 进行过滤。它的基数为 8,是作为排序键首个元素的合理选择。鉴于按日期粒度进行过滤通常已经足够(同时按日期时间过滤也会受益),因此我们将 `toDate(CreationDate)` 作为键的第二个组成部分。这样也会生成更小的索引,因为日期可以用 16 位来表示,从而加快过滤速度。我们键中的最后一个条目是 `CommentCount`,用于辅助找到评论数最多的帖子(最终排序)。 ```sql @@ -335,7 +327,6 @@ LIMIT 3 对于希望通过使用特定数据类型和合理排序键来提升压缩效果的用户,请参阅 [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} 到目前为止,我们只迁移了一张表。虽然这已经让我们能够介绍一些核心的 ClickHouse 概念,但大多数 schema 往往没有这么简单。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/index.md index 33d3134dfee..1408971097d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/index.md @@ -6,7 +6,7 @@ keywords: ['部署指南', '扩展', '集群部署', '复制', '容错'] doc_type: 'landing-page' --- -# 部署与扩展 +# 部署与扩展 {#deployment-and-scaling} 本节涵盖以下主题: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx index d42ce49ccf1..324d42dbbe1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/parallel-replicas.mdx @@ -20,7 +20,6 @@ import image_9 from '@site/static/images/deployment-guides/parallel-replicas-9.p - ## 简介 \{#introduction\} ClickHouse 处理查询的速度极快,但这些查询是如何在多台服务器之间被分发并并行执行的呢? @@ -38,22 +37,25 @@ ClickHouse 处理查询的速度极快,但这些查询是如何在多台服务 上图展示了客户端查询分布式表时发生的过程:
    -
  1. - SELECT 查询被任意发送到某个节点上的分布式表 - (通过轮询策略,或在经过负载均衡器路由到特定服务器之后)。 - 该节点随后将作为协调器。 -
  2. -
  3. - 节点会根据分布式表中指定的信息,定位需要执行查询的每个分片, - 并将查询发送给各个分片。 -
  4. -
  5. - 每个分片在本地读取、过滤并聚合数据,然后将可合并的中间状态 - 返回给协调器。 -
  6. -
  7. - 协调器节点对数据进行合并,然后将响应返回给客户端。 -
  8. +
  9. + SELECT 查询被任意发送到某个节点上的分布式表 + (通过轮询策略,或在经过负载均衡器路由到特定服务器之后)。 + 该节点随后将作为协调器。 +
  10. + +
  11. + 节点会根据分布式表中指定的信息,定位需要执行查询的每个分片, + 并将查询发送给各个分片。 +
  12. + +
  13. + 每个分片在本地读取、过滤并聚合数据,然后将可合并的中间状态 + 返回给协调器。 +
  14. + +
  15. + 协调器节点对数据进行合并,然后将响应返回给客户端。 +
当我们引入副本时,流程基本相同,唯一的区别是每个分片中只有一个副本会执行查询, @@ -62,7 +64,7 @@ ClickHouse 处理查询的速度极快,但这些查询是如何在多台服务 ## 非分片架构 \{#non-sharded-architecture\} ClickHouse Cloud 的架构与上文所介绍的架构有很大差异。 -(参见 ["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) +(参见 ["ClickHouse Cloud Architecture"](https://clickhouse.com/docs/cloud/reference/architecture) 了解更多详情。)由于计算与存储的分离,以及几乎无限的存储容量,对分片的需求就不那么重要了。 下图展示了 ClickHouse Cloud 的架构: @@ -86,39 +88,46 @@ Keeper 集群确保我们拥有元数据的唯一可信来源。各个副本可 使用并行副本时:
    -
  1. - 来自客户端的查询在经过负载均衡器后被发送到某个节点。该节点成为此查询的协调节点。 -
  2. -
  3. - 该节点分析每个 part 的索引,并选择需要处理的合适 part 和粒度。 -
  4. -
  5. - 协调节点将工作负载拆分成一组可以分配给不同副本的粒度。 -
  6. -
  7. - 每组粒度由相应的副本进行处理,完成后将可合并的中间状态发送给协调节点。 -
  8. -
  9. - 最后,协调节点合并来自各副本的所有结果,然后将响应返回给客户端。 -
  10. +
  11. + 来自客户端的查询在经过负载均衡器后被发送到某个节点。该节点成为此查询的协调节点。 +
  12. + +
  13. + 该节点分析每个 part 的索引,并选择需要处理的合适 part 和粒度。 +
  14. + +
  15. + 协调节点将工作负载拆分成一组可以分配给不同副本的粒度。 +
  16. + +
  17. + 每组粒度由相应的副本进行处理,完成后将可合并的中间状态发送给协调节点。 +
  18. + +
  19. + 最后,协调节点合并来自各副本的所有结果,然后将响应返回给客户端。 +
上述步骤描述了并行副本在理论上的工作方式。 然而在实践中,存在许多因素会阻碍这套逻辑完美运行:
    -
  1. - 某些副本可能不可用。 -
  2. -
  3. - ClickHouse 中的复制是异步的,在某些时间点上,一些副本可能不具有相同的 part。 -
  4. -
  5. - 副本之间的尾延迟需要以某种方式进行处理。 -
  6. -
  7. - 文件系统缓存会根据各副本上的活动在副本之间有所差异,这意味着随机分配任务在缓存局部性方面可能导致性能不够理想。 -
  8. +
  9. + 某些副本可能不可用。 +
  10. + +
  11. + ClickHouse 中的复制是异步的,在某些时间点上,一些副本可能不具有相同的 part。 +
  12. + +
  13. + 副本之间的尾延迟需要以某种方式进行处理。 +
  14. + +
  15. + 文件系统缓存会根据各副本上的活动在副本之间有所差异,这意味着随机分配任务在缓存局部性方面可能导致性能不够理想。 +
在接下来的小节中,我们将讨论如何克服这些因素。 @@ -130,18 +139,21 @@ Keeper 集群确保我们拥有元数据的唯一可信来源。各个副本可
    -
  1. - 来自客户端的查询在经过负载均衡器后被发送到某个节点,该节点成为此查询的协调节点。 -
  2. -
  3. - 协调节点发送请求,从集群中所有副本获取公告。副本对于某个表当前分区(parts)集合的视图可能略有不同。因此,我们需要收集这些信息以避免做出错误的调度决策。 -
  4. -
  5. - 随后,协调节点使用这些公告来确定一组可分配给不同副本的粒度单元。例如,在这里我们可以看到,没有来自 part 3 的粒度被分配给副本 2,因为该副本在其公告中未声明该分区。还要注意,没有任务被分配给副本 3,因为该副本没有提供公告。 -
  6. -
  7. - 在每个副本都处理完其粒度子集上的查询,并将可合并状态发送回协调节点之后,协调节点会合并结果,并将响应返回给客户端。 -
  8. +
  9. + 来自客户端的查询在经过负载均衡器后被发送到某个节点,该节点成为此查询的协调节点。 +
  10. + +
  11. + 协调节点发送请求,从集群中所有副本获取公告。副本对于某个表当前分区(parts)集合的视图可能略有不同。因此,我们需要收集这些信息以避免做出错误的调度决策。 +
  12. + +
  13. + 随后,协调节点使用这些公告来确定一组可分配给不同副本的粒度单元。例如,在这里我们可以看到,没有来自 part 3 的粒度被分配给副本 2,因为该副本在其公告中未声明该分区。还要注意,没有任务被分配给副本 3,因为该副本没有提供公告。 +
  14. + +
  15. + 在每个副本都处理完其粒度子集上的查询,并将可合并状态发送回协调节点之后,协调节点会合并结果,并将响应返回给客户端。 +
### 动态协调 \{#dynamic-coordination\} @@ -155,37 +167,41 @@ Keeper 集群确保我们拥有元数据的唯一可信来源。各个副本可
    -
  1. - 各副本向协调节点表明它们可以处理任务,同时还可以指定各自能够处理的工作量。 -
  2. -
  3. - 协调节点将任务分配给这些副本。 -
  4. +
  5. + 各副本向协调节点表明它们可以处理任务,同时还可以指定各自能够处理的工作量。 +
  6. + +
  7. + 协调节点将任务分配给这些副本。 +
    -
  1. - 副本 1 和 2 能够非常快速地完成各自的任务,它们会向协调节点请求新的任务。 -
  2. -
  3. - 协调节点为副本 1 和 2 分配新的任务。 -
  4. +
  5. + 副本 1 和 2 能够非常快速地完成各自的任务,它们会向协调节点请求新的任务。 +
  6. + +
  7. + 协调节点为副本 1 和 2 分配新的任务。 +
    -
  1. - 所有副本现在都已完成各自任务的处理,它们会请求更多任务。 -
  2. -
  3. - 协调节点利用公告检查还有哪些任务尚未被处理,但已经没有剩余任务了。 -
  4. -
  5. - 协调节点会告知副本所有内容都已处理完成。随后它会合并所有可合并的状态,并返回查询结果。 -
  6. +
  7. + 所有副本现在都已完成各自任务的处理,它们会请求更多任务。 +
  8. + +
  9. + 协调节点利用公告检查还有哪些任务尚未被处理,但已经没有剩余任务了。 +
  10. + +
  11. + 协调节点会告知副本所有内容都已处理完成。随后它会合并所有可合并的状态,并返回查询结果。 +
### 管理缓存局部性 \{#managing-cache-locality\} @@ -193,34 +209,38 @@ Keeper 集群确保我们拥有元数据的唯一可信来源。各个副本可 最后一个潜在的问题是如何处理缓存局部性。如果多次执行同一个查询,如何确保相同的任务被路由到同一副本?在前面的示例中,我们有如下任务分配:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
副本 1副本 2副本 3
Part 1g1, g6, g7g2, g4, g5g3
Part 2g1g2, g4, g5g3
Part 3g1, g6g2, g4, g5g3
+ + 副本 1副本 2副本 3
Part 1g1, g6, g7g2, g4, g5g3
Part 2g1g2, g4, g5g3
Part 3g1, g6g2, g4, g5g3
为了确保相同的任务被分配到同一副本并能从缓存中获益,会进行两步操作:首先计算分片 + 一组 granule(即一个任务)的哈希值;然后对副本数量取模以进行任务分配。 @@ -252,13 +272,13 @@ Keeper 集群确保我们拥有元数据的唯一可信来源。各个副本可 | Setting | Description | |----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `enable_parallel_replicas` | `0`: 禁用
`1`: 启用
`2`: 强制启用并行副本,如果无法使用并行副本则抛出异常。 | +| `enable_parallel_replicas` | `0`: 禁用
`1`: 启用
`2`: 强制启用并行副本,如果无法使用并行副本则抛出异常。 | | `cluster_for_parallel_replicas` | 用于并行副本的集群名称;如果你使用的是 ClickHouse Cloud,请使用 `default`。 | | `max_parallel_replicas` | 在多个副本上执行查询时可使用的最大副本数;如果指定的值小于集群中的副本数,则会随机选择节点。此值也可以设置得高于实际副本数,以预留水平扩展空间。 | -| `parallel_replicas_min_number_of_rows_per_replica` | 用于根据需要处理的行数来限制所使用的副本数量,实际使用的副本数定义为:
`estimated rows to read` / `min_number_of_rows_per_replica`。 | -| `allow_experimental_analyzer` | `0`: 使用旧分析器
`1`: 使用新分析器。

并行副本的行为可能会因所使用的分析器不同而发生变化。 | +| `parallel_replicas_min_number_of_rows_per_replica` | 用于根据需要处理的行数来限制所使用的副本数量,实际使用的副本数定义为:
`estimated rows to read` / `min_number_of_rows_per_replica`。 | +| `allow_experimental_analyzer` | `0`: 使用旧分析器
`1`: 使用新分析器。

并行副本的行为可能会因所使用的分析器不同而发生变化。 | -## 排查并行副本相关问题 +## 排查并行副本相关问题 \{#investigating-issues-with-parallel-replicas\} 你可以在 [`system.query_log`](/docs/operations/system-tables/query_log) 表中检查每个查询实际使用的设置。你也可以查看 [`system.events`](/docs/operations/system-tables/events) 表,了解服务器上发生的所有事件,并使用 [`clusterAllReplicas`](/docs/sql-reference/table-functions/cluster) 表函数查看所有副本上的表(如果你是云用户,请将集群名设为 `default`)。 @@ -270,7 +290,6 @@ FROM clusterAllReplicas('default', system.events) WHERE event ILIKE '%ParallelReplicas%' ``` -
响应 @@ -331,7 +350,6 @@ WHERE query_id = 'ad40c712-d25d-45c4-b1a1-a28ba8d4019c' ORDER BY event_time_microseconds ASC ``` -
响应 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md index 1047dd6df64..30fd13c46bf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/01_1_shard_2_replicas.md @@ -9,19 +9,19 @@ keywords: ['复制', '高可用性', '集群搭建', '数据冗余', '容错'] --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ReplicationArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/replication.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > 在本示例中,你将学习如何搭建一个用于数据复制的简单 ClickHouse 集群。 > 一共配置了五台服务器,其中两台用于存储数据副本, @@ -33,7 +33,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前置条件 {#pre-requisites} - 您之前已设置过[本地 ClickHouse 服务器](/install) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md index 5a136d87e21..343d6a0aab8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/02_2_shards_1_replica.md @@ -9,19 +9,19 @@ keywords: ['分片', '水平扩展', '分布式数据', '集群部署', '数据 --- import Image from '@theme/IdealImage'; -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; import ShardingArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/sharding.png'; -import ConfigFileNote from '@site/docs/_snippets/_config-files.md'; -import KeeperConfigFileNote from '@site/docs/_snippets/_keeper-config-files.md'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import ServerParameterTable from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigFileNote from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_config-files.md'; +import KeeperConfigFileNote from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_keeper-config-files.md'; +import ConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import ServerParameterTable from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_server_parameter_table.mdx'; +import KeeperConfig from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > 在本示例中,你将学习如何搭建一个简单且可扩展的 ClickHouse 集群。 > 集群中共配置了五台服务器,其中两台用于对数据进行分片。 @@ -33,7 +33,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前置条件 {#pre-requisites} - 你已经在本地部署过 [ClickHouse 服务器](/install) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md index 0d09c992a3d..fbe30a70f02 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/03_2_shards_2_replicas.md @@ -10,14 +10,14 @@ keywords: ['集群部署', '复制', '分片', '高可用性', '可扩展性'] import Image from '@theme/IdealImage'; import SharedReplicatedArchitecture from '@site/static/images/deployment-guides/replication-sharding-examples/both.png'; -import ConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; -import ListenHost from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; -import KeeperConfig from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; -import KeeperConfigExplanation from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; -import VerifyKeeperStatus from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; -import DedicatedKeeperServers from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; -import ExampleFiles from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; -import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; +import ConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_config_explanation.mdx'; +import ListenHost from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_listen_host.mdx'; +import KeeperConfig from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_config.mdx'; +import KeeperConfigExplanation from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_keeper_explanation.mdx'; +import VerifyKeeperStatus from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_verify_keeper_using_mntr.mdx'; +import DedicatedKeeperServers from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_dedicated_keeper_servers.mdx'; +import ExampleFiles from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_working_example.mdx'; +import CloudTip from '@site/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/replication-sharding-examples/_snippets/_cloud_tip.mdx'; > 在本示例中,你将学习如何搭建一个既支持复制又支持横向扩展的简单 ClickHouse 集群。 > 该集群由两个分片和两个副本组成,并包含一个由 3 个节点构成的 ClickHouse Keeper 集群, @@ -29,7 +29,6 @@ import CloudTip from '@site/docs/deployment-guides/replication-sharding-examples - ## 前提条件 {#prerequisites} - 已经搭建过[本地 ClickHouse 服务器](/install) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md index 4a5778bab57..8fb89b30fd7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/deployment-guides/terminology.md @@ -8,7 +8,7 @@ doc_type: 'guide' keywords: ['部署', '架构', '复制', '分片', '集群配置'] --- -import ReplicationShardingTerminology from '@site/docs/_snippets/_replication-sharding-terminology.md'; +import ReplicationShardingTerminology from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_replication-sharding-terminology.md'; 本节中的部署示例基于 ClickHouse 支持与服务团队向 ClickHouse 用户提供的建议。这些都是可直接使用的示例,我们建议您先尝试运行,然后根据自身需求进行调整。您也许会在这里找到一个完全符合您需求的示例。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/architecture.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/architecture.md index 355f0a963f0..0edace5177f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/architecture.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/architecture.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# 架构概览 +# 架构概览 {#architecture-overview} ClickHouse 是一个真正的列式 DBMS。数据按列存储,并在执行过程中以数组(向量或列块)的形式处理。 在可能的情况下,操作会尽量在数组上执行,而不是针对单个值。 @@ -242,7 +242,7 @@ IO 线程池是一个简单的 `ThreadPool`,可通过 `IOThreadPool::get()` -## 并发控制 +## 并发控制 {#concurrency-control} 可以并行执行的查询通过 `max_threads` 设置来限制自身的并发度。该设置的默认值经过选择,使单个查询能够以最佳方式利用所有 CPU 核心。但如果存在多个并发查询且每个查询都使用默认的 `max_threads` 设置值,会怎样?此时这些查询将共享 CPU 资源。操作系统会通过不断切换线程来保证公平性,而这会引入一定的性能损耗。`ConcurrencyControl` 用来应对这种损耗,并避免分配过多线程。配置项 `concurrent_threads_soft_limit_num` 用于限制在开始施加某种形式的 CPU 压力之前,最多可以分配多少并发线程。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-arm.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-arm.md index c90c3486f0a..2c93eae4430 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-arm.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-arm.md @@ -7,7 +7,7 @@ title: '如何在 Linux 上面向 AARCH64 构建 ClickHouse' doc_type: 'guide' --- -# 如何在 Linux 上为 AArch64 构建 ClickHouse +# 如何在 Linux 上为 AArch64 构建 ClickHouse {#how-to-build-clickhouse-on-linux-for-aarch64} 在 AArch64 机器上构建面向 AArch64 的 ClickHouse 时,无需执行任何特殊步骤。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md index 74d13a4fe35..bc2a08095b5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-loongarch.md @@ -7,15 +7,11 @@ title: '在 Linux 上为 LoongArch64 构建' doc_type: 'guide' --- - - -# 在 Linux 上为 LoongArch64 构建 +# 在 Linux 上为 LoongArch64 构建 {#build-on-linux-for-loongarch64} ClickHouse 对 LoongArch64 提供了实验性支持 - - -## 构建 ClickHouse +## 构建 ClickHouse {#build-clickhouse} 用于构建的 LLVM 版本必须不低于 19.1.0。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-osx.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-osx.md index a8b12551c08..a5163aef5b3 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-osx.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-osx.md @@ -7,9 +7,7 @@ title: '在 Linux 上为 macOS 构建' doc_type: 'guide' --- - - -# 如何在 Linux 上为 macOS 构建 ClickHouse +# 如何在 Linux 上为 macOS 构建 ClickHouse {#how-to-build-clickhouse-on-linux-for-macos} 本指南适用于:当你有一台 Linux 机器,并希望使用它来构建可在 OS X 上运行的 `clickhouse` 二进制可执行文件的情况。 主要用例是运行在 Linux 机器上的持续集成(CI)检查。 @@ -21,9 +19,7 @@ doc_type: 'guide' 如果你的目标是 ARM 架构,只需将所有出现的 `x86_64` 替换为 `aarch64` 即可。 例如,在整个步骤中将 `x86_64-apple-darwin` 替换为 `aarch64-apple-darwin`。 - - -## 安装交叉编译工具链 +## 安装交叉编译工具链 {#install-cross-compilation-toolset} 记住安装 `cctools` 的路径,并将其记为 `${CCTOOLS}` @@ -53,8 +49,7 @@ cd ClickHouse/cmake/toolchain/darwin-x86_64 curl -L 'https://github.com/phracker/MacOSX-SDKs/releases/download/11.3/MacOSX11.0.sdk.tar.xz' | tar xJ --strip-components=1 ``` - -## 构建 ClickHouse +## 构建 ClickHouse {#build-clickhouse} ```bash cd ClickHouse diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md index 289c027160e..c155f71b605 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-riscv.md @@ -7,15 +7,11 @@ title: '如何在 Linux 上为 RISC-V 64 构建 ClickHouse' doc_type: 'guide' --- - - -# 如何在 RISC-V 64 架构的 Linux 上构建 ClickHouse +# 如何在 RISC-V 64 架构的 Linux 上构建 ClickHouse {#how-to-build-clickhouse-on-linux-for-risc-v-64} ClickHouse 对 RISC-V 架构提供实验性支持。目前尚无法启用全部功能。 - - -## 构建 ClickHouse +## 构建 ClickHouse {#build-clickhouse} 在非 RISC-V 机器上为 RISC-V 目标进行交叉编译: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md index 45f0c86b61a..93f7abf80ff 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-cross-s390x.md @@ -1,45 +1,30 @@ --- description: '在 s390x 架构上从源代码构建 ClickHouse 的指南' -sidebar_label: '在 Linux 上为 s390x(zLinux)构建' +sidebar_label: '在 Linux 上针对 s390x(zLinux)构建' sidebar_position: 30 slug: /development/build-cross-s390x -title: '在 Linux 上为 s390x(zLinux)构建' +title: '在 Linux 上针对 s390x(zLinux)构建' doc_type: 'guide' --- +# 在 Linux 上为 s390x(zLinux)进行构建 {#build-on-linux-for-s390x-zlinux} +ClickHouse 对 s390x 提供实验性支持。 -# 在 Linux 上构建 s390x(zLinux)版本 +## 为 s390x 构建 ClickHouse {#building-clickhouse-for-s390x} -ClickHouse 目前对 s390x 提供实验性支持。 +与其他平台一样,s390x 会将 OpenSSL 构建为静态库。如果你希望使用动态链接的 OpenSSL 进行构建,则需要向 CMake 传递 `-DENABLE_OPENSSL_DYNAMIC=1`。 +这些说明假定宿主机为 Linux x86_64/ARM,并且已经按照[构建说明](../development/build.md)安装了本机构建所需的全部工具。同时假定宿主机运行的是 Ubuntu 22.04,不过以下说明同样适用于 Ubuntu 20.04。 - -## 为 s390x 构建 ClickHouse - -s390x 有两个与 OpenSSL 相关的构建选项: - -* 默认情况下,在 s390x 上 OpenSSL 会被构建为共享库。这与其他所有平台不同,其他平台上 OpenSSL 会被构建为静态库。 -* 如果仍然希望将 OpenSSL 构建为静态库,请在 CMake 中传入 `-DENABLE_OPENSSL_DYNAMIC=0`。 - -以下说明假定宿主机为 x86_64 架构,并且已经按照[构建说明](../development/build.md)安装了本机构建所需的全部工具。同时还假定宿主机运行的是 Ubuntu 22.04,但下面的说明在 Ubuntu 20.04 上同样应当可行。 - -除了安装用于本机构建的工具外,还需要额外安装以下软件包: - -```bash -apt-get install binutils-s390x-linux-gnu libc6-dev-s390x-cross gcc-s390x-linux-gnu binfmt-support qemu-user-static -``` - -如果您希望交叉编译 Rust 代码,请安装针对 s390x 的 Rust 交叉编译目标: +除了安装用于本机构建的工具外,还需要安装以下额外软件包: ```bash +apt-get mold rustup target add s390x-unknown-linux-gnu ``` -s390x 构建使用 mold 链接器,请从 [https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz](https://github.com/rui314/mold/releases/download/v2.0.0/mold-2.0.0-x86_64-linux.tar.gz) -下载并将其放入你的 `$PATH` 中。 - -要构建 s390x: +构建 s390x 版本: ```bash cmake -DCMAKE_TOOLCHAIN_FILE=cmake/linux/toolchain-s390x.cmake .. @@ -47,30 +32,37 @@ ninja ``` -## 运行 +## 运行 {#running} + +要进行仿真,你需要适用于 s390x 的 QEMU user static 静态二进制文件。在 Ubuntu 上可以通过以下命令安装: + +```bash +apt-get install binfmt-support binutils-s390x-linux-gnu qemu-user-static +``` -构建完成后,例如可以这样运行该二进制文件: +构建完成后,例如可以通过以下命令运行该二进制文件: ```bash -qemu-s390x-static -L /usr/s390x-linux-gnu ./clickhouse +qemu-s390x-static -L /usr/s390x-linux-gnu ./programs/clickhouse local --query "Select 2" +2 ``` -## 调试 +## 调试 {#debugging} 安装 LLDB: ```bash -apt-get install lldb-15 +apt-get install lldb-21 ``` -要调试 s390x 可执行文件,请在调试模式下通过 QEMU 运行 ClickHouse: +要调试 s390x 可执行文件,请使用 QEMU 以调试模式运行 ClickHouse: ```bash qemu-s390x-static -g 31338 -L /usr/s390x-linux-gnu ./clickhouse ``` -在另一个 shell 中运行 LLDB 并附加到进程,将 `` 和 `` 替换为与你环境相对应的值。 +在另一个 shell 中运行 LLDB 并进行附加操作,将 `` 和 `` 替换为与您环境相对应的值。 ```bash lldb-15 @@ -102,16 +94,16 @@ Process 1 stopped ``` -## Visual Studio Code 集成 +## Visual Studio Code 集成 {#visual-studio-code-integration} -* 需要安装 [CodeLLDB](https://github.com/vadimcn/vscode-lldb) 扩展以进行可视化调试。 -* 如果使用 [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md),可以通过 [Command Variable](https://github.com/rioj7/command-variable) 扩展实现动态启动配置。 -* 请确保将后端指向你的 LLVM 安装,例如 `"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so"`。 -* 请确保在启动前以调试模式运行 ClickHouse 可执行文件。(也可以创建一个 `preLaunchTask` 来自动化完成此操作) +- 进行可视化调试需要安装 [CodeLLDB](https://github.com/vadimcn/vscode-lldb) 扩展。 +- 如果使用 [CMake Variants](https://github.com/microsoft/vscode-cmake-tools/blob/main/docs/variants.md),可以安装 [Command Variable](https://github.com/rioj7/command-variable) 扩展来辅助配置动态启动。 +- 请确保将后端设置为你的 LLVM 安装路径,例如:`"lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so"` +- 在启动之前,请确保以调试模式运行 ClickHouse 可执行文件。(也可以创建一个 `preLaunchTask` 来自动完成此操作) -### 示例配置 +### 示例配置 {#example-configurations} -#### cmake-variants.yaml +#### cmake-variants.yaml {#cmake-variantsyaml} ```yaml buildType: @@ -119,7 +111,7 @@ buildType: choices: debug: short: Debug - long: 生成调试信息 + long: 输出调试信息 buildType: Debug release: short: Release @@ -127,7 +119,7 @@ buildType: buildType: Release relwithdebinfo: short: RelWithDebInfo - long: 带调试信息的发布版本 + long: 发布版本(含调试信息) buildType: RelWithDebInfo tsan: short: MinSizeRel @@ -148,7 +140,8 @@ toolchain: CMAKE_TOOLCHAIN_FILE: cmake/linux/toolchain-s390x.cmake ``` -#### launch.json + +#### launch.json {#launchjson} ```json { @@ -166,18 +159,20 @@ toolchain: } ``` -#### settings.json -这也会将不同的构建产物放在 `build` 目录下的不同子目录中。 +#### settings.json {#settingsjson} + +这也会将不同的构建产物放在 `build` 文件夹下的不同子文件夹中。 ```json { "cmake.buildDirectory": "${workspaceFolder}/build/${buildKitVendor}-${buildKitVersion}-${variant:toolchain}-${variant:buildType}", - "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-15.so" + "lldb.library": "/usr/lib/x86_64-linux-gnu/liblldb-21.so" } ``` -#### run-debug.sh + +#### run-debug.sh {#run-debugsh} ```sh #! /bin/sh @@ -186,9 +181,10 @@ cd $1 qemu-s390x-static -g 2159 -L /usr/s390x-linux-gnu $2 $3 $4 ``` -#### tasks.json -定义了一个任务,用于在与二进制文件同级的 `tmp` 文件夹中,以 `server` 模式运行已编译的可执行文件,并使用 `programs/server/config.xml` 下的配置。 +#### tasks.json {#tasksjson} + +定义了一个任务,用于在与二进制文件同级的 `tmp` 目录下,以 `server` 模式运行已编译的可执行文件,并从 `programs/server/config.xml` 加载配置。 ```json { diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-e2k.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-e2k.md index 22fad59b925..8b16f5186b1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-e2k.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-e2k.md @@ -7,15 +7,11 @@ title: '在 Linux 上为 E2K 构建' doc_type: 'guide' --- - - -# 在 Linux 上为 E2K 构建 +# 在 Linux 上为 E2K 构建 {#build-on-linux-for-e2k} ClickHouse 对 E2K(Elbrus-2000)的支持仍处于高度实验阶段,目前只能在原生模式下使用最小化配置进行编译,并依赖 e2k 定制构建的库,例如 boost、croaring、libunwind、zstd。 - - -## 构建 ClickHouse +## 构建 ClickHouse {#build-clickhouse} 构建所需的 LLVM 版本必须大于或等于 20.1.8。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-osx.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-osx.md index 882fa249717..a56b4d18c6e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build-osx.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build-osx.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# 如何在 macOS 上为 macOS 构建 ClickHouse +# 如何在 macOS 上为 macOS 构建 ClickHouse {#how-to-build-clickhouse-on-macos-for-macos} :::info 你不需要自己构建 ClickHouse! 你可以按照 [Quick Start](https://clickhouse.com/#quick-start) 中的说明安装预编译的 ClickHouse。 @@ -22,7 +22,7 @@ ClickHouse 可以在 macOS 10.15(Catalina)或更高版本上编译,支持 -## 安装前提条件 +## 安装前提条件 {#install-prerequisites} 首先,请参阅通用的[前提条件文档](developer-instruction.md)。 @@ -53,7 +53,7 @@ mkdir build export PATH=$(brew --prefix llvm)/bin:$PATH cmake -S . -B build cmake --build build -# 生成的二进制文件将位于:build/programs/clickhouse +# 生成的二进制文件将位于:build/programs/clickhouse {#the-resulting-binary-will-be-created-at-buildprogramsclickhouse} ``` :::note @@ -61,7 +61,7 @@ cmake --build build ::: -## 注意事项 +## 注意事项 {#caveats} 如果您打算运行 `clickhouse-server`,请确保增大系统的 `maxfiles` 参数值。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/build.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/build.md index a0fa3fa7f48..abc32f024d3 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/build.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/build.md @@ -7,12 +7,10 @@ title: '如何在 Linux 上构建 ClickHouse' doc_type: 'guide' --- - - -# 如何在 Linux 上构建 ClickHouse +# 如何在 Linux 上构建 ClickHouse {#how-to-build-clickhouse-on-linux} :::info 无需自行构建 ClickHouse! -可以按照 [快速开始](https://clickhouse.com/#quick-start) 中的说明安装预编译的 ClickHouse。 +你可以按照[快速开始](https://clickhouse.com/#quick-start)中的说明安装预编译的 ClickHouse。 ::: ClickHouse 可以在以下平台上构建: @@ -23,24 +21,20 @@ ClickHouse 可以在以下平台上构建: - s390/x(实验性) - RISC-V 64(实验性) - - ## 前提条件 {#assumptions} -本教程以 Ubuntu Linux 为基础进行讲解,但通过适当调整,也应适用于其他任何 Linux 发行版。 -用于开发的最低推荐 Ubuntu 版本为 24.04 LTS。 - -本教程假定你已经在本地检出(或克隆)了 ClickHouse 仓库及其所有子模块。 - +本教程基于 Ubuntu Linux 编写,但通过适当调整后,也应适用于其他任意 Linux 发行版。 +用于开发的 Ubuntu 最低推荐版本为 24.04 LTS。 +本教程假设你已在本地检出 ClickHouse 仓库及其所有子模块。 -## 安装前提条件 +## 安装前置条件 {#install-prerequisites} -首先,请参阅通用的[前提条件文档](developer-instruction.md)。 +首先,请参阅通用的[前置条件文档](developer-instruction.md)。 ClickHouse 使用 CMake 和 Ninja 进行构建。 -你还可以选择安装 ccache,以便在构建时复用已编译的目标文件。 +你还可以选择安装 ccache,以便在构建时复用已编译好的目标文件。 ```bash sudo apt-get update @@ -48,34 +42,32 @@ sudo apt-get install build-essential git cmake ccache python3 ninja-build nasm y ``` -## 安装 Clang 编译器 +## 安装 Clang 编译器 {#install-the-clang-compiler} -要在 Ubuntu/Debian 上安装 Clang,请使用 [LLVM 提供的自动安装脚本](https://apt.llvm.org/)。 +要在 Ubuntu/Debian 上安装 Clang,请使用 LLVM 的自动安装脚本,详见[此页面](https://apt.llvm.org/)。 ```bash sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ``` -对于其他 Linux 发行版,请检查是否可以安装 LLVM 的任一[预构建包](https://releases.llvm.org/download.html)。 +对于其他 Linux 发行版,请查看是否提供可安装的 LLVM [预编译二进制包](https://releases.llvm.org/download.html)。 -截至 2025 年 3 月,需要 Clang 19 或更高版本。 +截至 2025 年 3 月,需要使用 Clang 19 或更高版本。 不支持 GCC 或其他编译器。 ## 安装 Rust 编译器(可选) {#install-the-rust-compiler-optional} :::note -Rust 是 ClickHouse 的一个可选依赖。 -如果未安装 Rust,ClickHouse 的某些功能将不会被编译。 +Rust 是 ClickHouse 的可选依赖。 +如果未安装 Rust,ClickHouse 的某些功能将不会被编译进二进制文件。 ::: -首先,按照官方 [Rust 文档](https://www.rust-lang.org/tools/install) 中的步骤安装 `rustup`。 - -与 C++ 依赖类似,ClickHouse 使用 vendoring 来精确控制安装内容,并避免依赖第三方服务(例如 `crates.io` 注册表)。 - -虽然在发布模式下,任何较新的 rustup 工具链版本通常都可以与这些依赖配合使用,但如果你计划启用 sanitizers,则必须使用与 CI 中所用工具链在 `std` 版本上完全一致的 rustup 工具链版本(我们为该版本预先 vendoring 了相关 crates): +首先,按照官方 [Rust 文档](https://www.rust-lang.org/tools/install)中的步骤安装 `rustup`。 +与 C++ 依赖类似,ClickHouse 使用 vendoring 来精确控制安装内容,并避免依赖第三方服务(例如 `crates.io` registry)。 +虽然在 release 模式下,任意较新的 Rust toolchain 版本通常都可以与这些依赖一起工作,但如果你计划启用 sanitizers,则必须使用与 CI 中所用版本拥有完全相同 `std` 的 toolchain(我们为此对相关 crates 做了 vendoring): ```bash rustup toolchain install nightly-2025-07-07 @@ -83,34 +75,35 @@ rustup default nightly-2025-07-07 rustup component add rust-src ``` -## 构建 ClickHouse -我们建议在 `ClickHouse` 内创建一个单独的 `build` 目录,用于存放所有构建产物: +## 构建 ClickHouse {#build-clickhouse} + +我们建议在 ClickHouse 项目中创建一个单独的 `build` 目录,用于存放所有构建产物: ```sh mkdir build cd build ``` -你可以为不同的构建类型使用多个不同的目录(例如 `build_release`、`build_debug` 等)。 +你可以为不同的构建类型使用多个目录(例如 `build_release`、`build_debug` 等)。 -可选:如果你安装了多个编译器版本,可以选择性地指定要使用的具体编译器。 +可选:如果你安装了多个编译器版本,可以指定要使用的具体编译器。 ```sh export CC=clang-19 export CXX=clang++-19 ``` -在开发阶段,建议使用调试构建。 -与发布构建相比,它们使用较低级别的编译器优化(`-O`),从而带来更好的调试体验。 -此外,类型为 `LOGICAL_ERROR` 的内部异常会立即导致崩溃,而不会被优雅地处理。 +出于开发环境的需求,建议使用调试构建(debug builds)。 +与发布构建(release builds)相比,它们使用更低级别的编译器优化级别(`-O`),从而提供更好的调试体验。 +此外,类型为 `LOGICAL_ERROR` 的内部异常会立即导致崩溃,而不会被优雅地捕获和处理。 ```sh cmake -D CMAKE_BUILD_TYPE=Debug .. ``` :::note -如果你希望使用 gdb 等调试器,请在上述命令中添加 `-D DEBUG_O_LEVEL="0"`,以禁用所有编译器优化,因为这些优化可能会影响 gdb 查看或访问变量的能力。 +如果你希望使用例如 gdb 这样的调试器,请在上述命令中添加 `-D DEBUG_O_LEVEL="0"`,以禁用所有编译器优化,因为这些优化可能会影响 gdb 查看或访问变量的能力。 ::: 运行 ninja 进行构建: @@ -125,14 +118,14 @@ ninja clickhouse ninja ``` -可以通过参数 `-j` 控制并行构建作业的数量: +你可以使用参数 `-j` 来控制并行构建作业的数量: ```sh ninja -j 1 clickhouse-server clickhouse-client ``` :::tip -CMake 为执行上述命令提供了快捷方式: +CMake 为这些命令提供了快捷方式: ```sh cmake -S . -B build # 配置构建,从代码仓库顶层目录运行 @@ -142,44 +135,45 @@ cmake --build build # 编译 ::: -## 运行 ClickHouse 可执行文件 +## 运行 ClickHouse 可执行文件 {#running-the-clickhouse-executable} -在构建成功完成后,可以在 `ClickHouse//programs/` 中找到可执行文件: +构建成功后,你可以在 `ClickHouse//programs/` 中找到可执行文件: -ClickHouse 服务器会尝试在当前目录中查找配置文件 `config.xml`。 -也可以在命令行中通过 `-C` 指定配置文件。 +ClickHouse 服务器会尝试在当前目录查找配置文件 `config.xml`。 +你也可以在命令行中通过 `-C` 选项指定配置文件。 -要使用 `clickhouse-client` 连接到 ClickHouse 服务器,打开另一个终端,进入 `ClickHouse/build/programs/`,然后运行 `./clickhouse client`。 +要使用 `clickhouse-client` 连接到 ClickHouse 服务器,打开另一个终端,进入 `ClickHouse/build/programs/` 并运行 `./clickhouse client`。 -如果在 macOS 或 FreeBSD 上收到 `Connection refused` 提示,请尝试将主机地址指定为 127.0.0.1: +如果在 macOS 或 FreeBSD 上收到 `Connection refused` 消息,请尝试指定主机地址 127.0.0.1: ```bash clickhouse client --host 127.0.0.1 ``` -## 高级选项 +## 高级选项 {#advanced-options} -### 最小构建 +### 最小构建 {#minimal-build} -如果不需要使用第三方库提供的功能,可以进一步加快构建速度: +如果不需要第三方库提供的功能,可以进一步提升构建速度: ```sh cmake -DENABLE_LIBRARIES=OFF ``` -如果出现问题,就只能靠你自己了…… +如果出现问题,则需自行解决…… -Rust 需要网络连接。要禁用 Rust 支持: +Rust 需要网络连接。若要禁用 Rust 支持: ```sh cmake -DENABLE_RUST=OFF ``` -### 运行 ClickHouse 可执行文件 -你可以将系统中安装的生产版本 ClickHouse 二进制文件替换为自己编译的 ClickHouse 二进制文件。 -为此,请按照官方网站上的说明在本机安装 ClickHouse。 +### 运行 ClickHouse 可执行文件 {#running-the-clickhouse-executable-1} + +你可以将系统中安装的生产环境版本 ClickHouse 二进制文件替换为自己编译的 ClickHouse 二进制文件。 +为此,请按照官方文档网站上的说明在你的机器上安装 ClickHouse。 然后运行: ```bash @@ -188,18 +182,19 @@ sudo cp ClickHouse/build/programs/clickhouse /usr/bin/ sudo service clickhouse-server start ``` -请注意,`clickhouse-client`、`clickhouse-server` 等是指向通用共享的 `clickhouse` 二进制文件的符号链接。 +请注意,`clickhouse-client`、`clickhouse-server` 等都是指向公共共享的 `clickhouse` 二进制文件的符号链接。 -也可以使用系统中已安装的 ClickHouse 软件包中的配置文件来运行自定义构建的 ClickHouse 二进制文件: +你也可以使用系统上已安装的 ClickHouse 软件包中的配置文件来运行你自定义构建的 ClickHouse 二进制文件。 ```bash sudo service clickhouse-server stop sudo -u clickhouse ClickHouse/build/programs/clickhouse server --config-file /etc/clickhouse-server/config.xml ``` -### 在任何 Linux 系统上构建 -在 OpenSUSE Tumbleweed 上安装先决条件: +### 在任何 Linux 上构建 {#building-on-any-linux} + +在 OpenSUSE Tumbleweed 上安装依赖项: ```bash sudo zypper install git cmake ninja clang-c++ python lld nasm yasm gawk @@ -209,7 +204,7 @@ cmake -S . -B build cmake --build build ``` -在 Fedora Rawhide 上安装前提条件: +在 Fedora Rawhide 上安装先决条件: ```bash sudo yum update @@ -220,19 +215,20 @@ cmake -S . -B build cmake --build build ``` -### 在 Docker 中构建 -你可以使用以下命令,在本地的、与 CI 类似的环境中运行任意构建: +### 在 Docker 中构建 {#building-in-docker} + +你可以使用以下命令,在与 CI 类似的环境中本地运行任何构建: ```bash -python -m ci.praktika "BUILD_JOB_NAME" +python -m ci.praktika run "BUILD_JOB_NAME" ``` 其中 BUILD_JOB_NAME 是 CI 报告中显示的作业名称,例如 “Build (arm_release)”、“Build (amd_debug)”。 -此命令会拉取包含所有所需依赖项的相应 Docker 镜像 `clickhouse/binary-builder`, -并在其中运行构建脚本:`./ci/jobs/build_clickhouse.py`。 +此命令会拉取包含所有必需依赖项的对应 Docker 镜像 `clickhouse/binary-builder`, +并在该镜像内运行构建脚本:`./ci/jobs/build_clickhouse.py`。 -构建产物将输出到 `./ci/tmp/` 目录中。 +构建产物将生成在 `./ci/tmp/` 中。 -它同时适用于 AMD 和 ARM 架构,除了 Docker 之外不需要任何其他依赖。 +该方式同时适用于 AMD 和 ARM 架构,除已安装 `requests` 模块的 Python 和 Docker 外,无需其他额外依赖。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md index 5b3499cbdd8..77786e515f0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/building_and_benchmarking_deflate_qpl.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# 使用 DEFLATE_QPL 构建 ClickHouse +# 使用 DEFLATE_QPL 构建 ClickHouse {#build-clickhouse-with-deflate_qpl} - 请确保你的主机符合 QPL 所需的[先决条件](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#prerequisites) - 在使用 CMake 构建时,`deflate_qpl` 默认是启用的。如果你不小心修改了该设置,请再次确认构建标志:`ENABLE_QPL=1` @@ -18,7 +18,7 @@ doc_type: 'guide' -# 使用 DEFLATE_QPL 运行基准测试 +# 使用 DEFLATE_QPL 运行基准测试 {#run-benchmark-with-deflate_qpl} @@ -35,7 +35,7 @@ doc_type: 'guide' -## 自动运行星型模式基准测试: +## 自动运行星型模式基准测试: {#run-benchmark-automatically-for-star-schema} ```bash $ cd ./benchmark_sample/client_scripts @@ -53,7 +53,7 @@ $ sh run_ssb.sh -## 环境 +## 环境 {#environment} * CPU:Sapphire Rapids * 操作系统要求请参阅 [System Requirements for QPL](https://intel.github.io/qpl/documentation/get_started_docs/installation.html#system-requirements) @@ -81,7 +81,7 @@ $ accel-config list | grep -P 'iax|state' 如果没有任何输出,说明 IAA 尚未就绪。请重新检查 IAA 的配置。 -## 生成原始数据 +## 生成原始数据 {#generate-raw-data} ```bash $ cd ./benchmark_sample @@ -94,7 +94,7 @@ $ mkdir rawdata_dir && cd rawdata_dir 预计会在 `./benchmark_sample/rawdata_dir/ssb-dbgen` 目录下生成类似 `*.tbl` 的文件: -## 数据库配置 +## 数据库配置 {#database-setup} 将数据库配置为使用 LZ4 编解码器 @@ -164,7 +164,7 @@ SELECT count() FROM lineorder_flat 这表示 IAA 设备尚未准备就绪,你需要重新检查 IAA 的配置。 -## 使用单实例进行基准测试 +## 使用单实例进行基准测试 {#benchmark-with-single-instance} * 在开始基准测试之前,请禁用 C6,并将 CPU 频率调节策略设置为 `performance` @@ -218,7 +218,7 @@ zstd.log 我们主要关注 QPS,请搜索关键字 `QPS_Final` 并收集统计数据。 -## 使用多实例进行基准测试 +## 使用多实例进行基准测试 {#benchmark-with-multi-instances} * 为了减小过多线程导致的内存瓶颈影响,建议使用多实例来运行基准测试。 * 多实例是指在多台(2 或 4 台)服务器上分别连接各自的客户端。 @@ -350,7 +350,7 @@ zstd_2insts.log 我们建议使用 2 个实例的基准测试数据作为最终报告的评审依据。 -## 提示 +## 提示 {#tips} 每次启动新的 ClickHouse 服务器之前,请确保没有 ClickHouse 后台进程在运行。请检查并终止旧进程: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/continuous-integration.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/continuous-integration.md index e07639bfa0a..5a22be94ff1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/continuous-integration.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/continuous-integration.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# 持续集成(CI) +# 持续集成(CI) {#continuous-integration-ci} 当你提交一个 pull request 时,ClickHouse 的[持续集成(CI)系统](tests.md#test-automation)会对你的代码运行一些自动检查。 这会在代码仓库维护者(ClickHouse 团队成员)审查了你的代码并在 pull request 上添加 `can be tested` 标签之后进行。 @@ -75,26 +75,26 @@ git push -## 样式检查 +## 样式检查 {#style-check} 对代码库执行各种样式检查。 *Style Check* 作业中包含的基础检查: -##### cpp +##### cpp {#cpp} 使用 [`ci/jobs/scripts/check_style/check_cpp.sh`](https://github.com/ClickHouse/ClickHouse/blob/master/ci/jobs/scripts/check_style/check_cpp.sh) 脚本执行基于正则表达式的简单代码样式检查(也可以在本地运行)。\ 如果检查失败,请根据[代码样式指南](style.md)修复样式问题。 -##### codespell, aspell +##### codespell, aspell {#codespell} 检查语法错误和拼写错误。 -##### mypy +##### mypy {#mypy} 对 Python 代码执行静态类型检查。 -### 在本地运行样式检查作业 +### 在本地运行样式检查作业 {#running-style-check-locally} 可以在 Docker 容器中本地运行完整的 *Style Check* 作业,命令如下: @@ -112,14 +112,14 @@ python -m ci.praktika run "Style check" --test cpp 除 Python 3 和 Docker 外,无需其他任何依赖。 -## 快速测试 +## 快速测试 {#fast-test} 通常这是在 PR 上运行的第一个检查。 它会构建 ClickHouse 并运行大部分[无状态功能测试](tests.md#functional-tests),但会省略部分测试。 如果该步骤失败,在修复之前不会启动后续检查。 查看报告以确定哪些测试失败,然后按照[这里](/development/tests#running-a-test-locally)的说明在本地重现失败。 -#### 在本地运行快速测试: +#### 在本地运行快速测试: {#running-fast-test-locally} ```sh python -m ci.praktika run "Fast test" [--test 测试名称] @@ -129,11 +129,11 @@ python -m ci.praktika run "Fast test" [--test 测试名称] 只需 Python 3 和 Docker,无需其他依赖。 -## 构建检查 +## 构建检查 {#build-check} 以多种配置构建 ClickHouse,以便在后续步骤中使用。 -### 在本地运行构建 +### 在本地运行构建 {#running-builds-locally} 可以在类似 CI 的本地环境中运行构建,使用: @@ -143,7 +143,7 @@ python -m ci.praktika run "" 除了 Python 3 和 Docker 外不需要其他依赖。 -#### 可用构建任务 +#### 可用构建任务 {#available-build-jobs} 构建任务名称与 CI 报告中的名称完全一致: @@ -181,7 +181,7 @@ python -m ci.praktika run "" **注意:** 对于不属于 “Other Architectures” 类别(该类别使用交叉编译)的构建,你本地机器的架构必须与构建类型一致,才能按照 `BUILD_JOB_NAME` 要求生成构建产物。 -#### 示例 +#### 示例 {#example-run-local} 要在本地运行调试构建: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/contrib.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/contrib.md index 99a4ea29cef..d27dd569045 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/contrib.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/contrib.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# 第三方库 +# 第三方库 {#third-party-libraries} ClickHouse 出于不同目的会使用第三方库,例如连接到其他数据库、在从磁盘加载/保存到磁盘时对数据进行解码/编码,或实现某些专用 SQL 函数。 为避免依赖目标系统中可用的库,每个第三方库都会作为 Git 子模块导入到 ClickHouse 的源代码树中,并与 ClickHouse 一起编译和链接。 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..7e7528e0bd6 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' --- +# 前提条件 {#prerequisites} +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 上创建仓库 {#create-a-repository-on-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)。 -## 将代码仓库克隆到你的开发机器上 +## 将仓库克隆到你的开发环境中 {#clone-the-repository-to-your-development-machine} -首先,将源文件下载到你的本地开发环境,即克隆该代码仓库: +首先,将源文件下载到你的工作环境中,也就是克隆该仓库: ```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” 标签后,测试将开始执行。 -部分初始检查结果(例如代码风格)会在几分钟内完成。 -构建检查结果通常会在半小时内返回。 -主测试集的结果通常会在一小时内完成。 +界面上会有一个名为 “Pull request” 的按钮。 +本质上,这意味着“创建一个请求,将我的更改合并到主仓库中”。 -系统会为你的拉取请求单独准备 ClickHouse 二进制构建。 -要获取这些构建,请点击检查列表中 “Builds” 条目旁边的 “Details” 链接。 -在那里你会找到已构建的 ClickHouse .deb 软件包的直接链接,你甚至可以将其部署到生产服务器上(如果你不惧风险的话)。 +即使工作尚未完成,也可以创建 Pull Request。 +在这种情况下,请在标题开头加上 “WIP”(work in progress,进行中),之后可以再修改。 +这对于协同审阅和讨论更改,以及运行所有可用测试都非常有用。 +请务必对你的更改内容做一个简要说明,之后会用它来生成发布版本的变更日志。 +当 ClickHouse 员工给你的 PR 加上 “can be tested” 标签后,测试就会开始。 +部分初始检查结果(例如代码风格)会在几分钟内给出。 +构建检查结果会在半小时内完成。 +主要测试集的结果通常会在一小时内返回。 +系统会为你的 Pull Request 单独准备 ClickHouse 二进制构建。 +要获取这些构建,点击检查列表中 “Builds” 条目旁边的 “Details” 链接。 +在那里你会找到已构建的 ClickHouse `.deb` 包的直接链接,你甚至可以将它们部署到生产环境服务器上(如果你不担心的话)。 ## 编写文档 {#write-documentation} -每个添加新功能的 pull request 都必须附带相应文档。 -如果你希望预览文档修改内容,本地构建文档页面的步骤说明可在 README.md 文件中找到,链接在[这里](https://github.com/ClickHouse/clickhouse-docs)。 -在向 ClickHouse 添加新函数时,你可以参考以下模板来编写文档: - - +每个添加新功能的 pull request 都必须附带相应的文档。 +如果你想预览文档修改内容,如何在本地构建文档页面的说明请参见 README.md 文件:[链接](https://github.com/ClickHouse/clickhouse-docs)。 +在向 ClickHouse 添加新函数时,你可以参考下面的模板: ````markdown -# newFunctionName +# newFunctionName {#newfunctionname} -此处为该函数的简要说明,应简要描述其功能以及一个典型的使用场景。 +此处简要描述该函数。应简要说明其功能及典型使用场景。 **语法** @@ -165,42 +155,42 @@ 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 │ └───────────────────────────────────┘ \``` ```` -## 使用测试数据 +## 使用测试数据 {#using-test-data} -在开发 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..0b7003dc064 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/index.md @@ -7,8 +7,8 @@ doc_type: 'landing-page' 在本节文档中,您将找到以下页面: -{/* 下面的目录是由如下脚本根据 YAML - front matter 字段:title、description、slug 自动生成的: +{/* 下方的目录由 YAML front matter 中的以下字段自动生成: + title、description、slug。生成脚本位于: https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh @@ -19,21 +19,21 @@ doc_type: 'landing-page' | Page | Description | | ------------------------------------------------------------------------------------------- | ----------------------------------------------- | -| [Developer Prerequisites](/development/developer-instruction) | ClickHouse 开发的前提条件和环境配置说明 | +| [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 的指南 | +| [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 的指南 | +| [Build on Linux for E2K](/development/build-e2k) | 在 Linux 上为 E2K 架构从源码构建 ClickHouse 的指南 | | [Testing ClickHouse](/development/tests) | 关于测试 ClickHouse 并运行测试套件的指南 | | [Architecture Overview](/development/architecture) | 对 ClickHouse 架构及其列式设计的全面概述 | -| [Continuous Integration (CI)](/development/continuous-integration) | ClickHouse 持续集成系统概览 | -| [Third-Party Libraries](/development/contrib) | 介绍 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 的指南 | +| [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*/ } +{/*AUTOGENERATED_START*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md index 3567871bd97..8455712f00b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/integrating_rust_libraries.md @@ -6,7 +6,7 @@ title: '集成 Rust 库' doc_type: 'guide' --- -# Rust 库 +# Rust 库 {#rust-libraries} Rust 库的集成将以集成 BLAKE3 哈希函数为例进行说明。 @@ -80,7 +80,6 @@ pub unsafe extern "C" fn blake3_apply_shim( 此外,对于每个与 C 兼容的项,你都应使用属性 #[no_mangle] 和 `extern "C"`。否则库可能会被错误地编译,并且 cbindgen 将无法进行头文件的自动生成。 - 在完成以上所有步骤之后,可以在一个小型项目中测试该库,以发现所有与兼容性或头文件生成相关的问题。若在头文件生成过程中出现任何问题,可以尝试通过 `cbindgen.toml` 文件进行配置(可以在此处找到一个模板:[https://github.com/eqrion/cbindgen/blob/master/template.toml](https://github.com/eqrion/cbindgen/blob/master/template.toml))。 值得一提的是在集成 BLAKE3 时出现的一个问题: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/style.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/style.md index f14095ad23b..a1bb7a6f8dd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/style.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/style.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# C++ 编码风格指南 +# C++ 编码风格指南 {#c-style-guide} @@ -22,7 +22,7 @@ doc_type: 'guide' -## 格式 +## 格式 {#formatting} **1.** 大部分格式由 `clang-format` 自动完成。 @@ -214,7 +214,7 @@ for (Names::const_iterator it = column_names.begin(); it != column_names.end(); ``` -## 注释 +## 注释 {#comments} **1.** 一定要为所有非一目了然的代码部分添加注释。 @@ -312,7 +312,7 @@ void executeQuery( ``` -## 命名 +## 命名 {#names} **1.** 变量名和类成员名应使用小写字母并以下划线分隔。 @@ -431,7 +431,7 @@ enum class CompressionMethod **17.** 包含 C++ 源代码的文件必须使用 `.cpp` 扩展名。头文件必须使用 `.h` 扩展名。 -## 如何编写代码 +## 如何编写代码 {#how-to-write-code} **1.** 内存管理。 @@ -700,7 +700,7 @@ auto s = std::string{"Hello"}; **26.** 对于虚函数,在基类中使用 `virtual` 关键字,而在派生类中不要再写 `virtual`,改为写 `override`。 -## 未使用的 C++ 特性 +## 未使用的 C++ 特性 {#unused-features-of-c} **1.** 不使用虚继承。 @@ -830,7 +830,7 @@ CPU 指令集为我们服务器中支持的最小公共子集,目前为 SSE 4. -## 其他补充建议 +## 其他补充建议 {#additional-recommendations} **1.** 对来自 `stddef.h` 的类型显式添加 `std::` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/development/tests.md b/i18n/zh/docusaurus-plugin-content-docs/current/development/tests.md index 8c2ee07ad81..52055a1ef01 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/development/tests.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/development/tests.md @@ -9,11 +9,11 @@ doc_type: 'guide' -# 测试 ClickHouse +# 测试 ClickHouse {#testing-clickhouse} -## 功能测试 +## 功能测试 {#functional-tests} 功能测试是最简单、最易使用的一类测试。 ClickHouse 的大部分特性都可以通过功能测试来验证,并且对于每一个可以用这种方式测试的 ClickHouse 代码变更,功能测试都是必需的。 @@ -34,7 +34,7 @@ ClickHouse 的大部分特性都可以通过功能测试来验证,并且对于 在测试 `DateTime` 和 `DateTime64` 数据类型时,一个常见错误是误以为服务器会使用某个特定时区(例如 “UTC”)。实际情况并非如此,在 CI 测试运行中,时区是被刻意随机化的。最简单的解决办法是为测试值显式指定时区,例如 `toDateTime64(val, 3, 'Europe/Amsterdam')`。 ::: -### 在本地运行测试 +### 在本地运行测试 {#running-a-test-locally} 在本地启动 ClickHouse 服务器,并监听默认端口(9000)。 例如,要运行测试 `01428_hash_set_nan_key`,切换到代码仓库目录并执行以下命令: @@ -49,7 +49,7 @@ PATH=:$PATH tests/clickhouse-test 01428_hash_set_nan_ 可以运行全部测试,或者通过为测试名称提供过滤字符串来运行部分测试:`./clickhouse-test substring`。 也可以选择并行运行测试,或以随机顺序运行测试。 -### 添加新测试 +### 添加新测试 {#adding-a-new-test} 要添加新测试,首先在 `queries/0_stateless` 目录中创建一个 `.sql` 或 `.sh` 文件。 然后使用 `clickhouse-client < 12345_test.sql > 12345_test.reference` 或 `./12345_test.sh > ./12345_test.reference` 生成对应的 `.reference` 文件。 @@ -76,7 +76,7 @@ sudo ./install.sh * 确保其他测试不会测试相同内容(即先用 grep 检查)。 ::: -### 限制测试运行 +### 限制测试运行 {#restricting-test-runs} 一个测试可以具有零个或多个*标签*,用于指定该测试在 CI 中在哪些上下文中运行。 @@ -95,9 +95,9 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Tags: no-fasttest, no-replicated-database -# - no-fasttest: <请在此处说明使用该标签的原因> -# - no-replicated-database: <请在此处说明原因> +# Tags: no-fasttest, no-replicated-database {#tags-no-fasttest-no-replicated-database} +# - no-fasttest: <请在此处说明使用该标签的原因> {#no-fasttest-provide_a_reason_for_the_tag_here} +# - no-replicated-database: <请在此处说明原因> {#no-replicated-database-provide_a_reason_here} ``` 可用标签列表: @@ -134,7 +134,7 @@ SELECT 1 除上述设置外,你还可以使用 `system.build_options` 中的 `USE_*` 标志来定义是否使用特定的 ClickHouse 特性。 例如,如果你的测试使用了 MySQL 表,则应添加标签 `use-mysql`。 -### 为随机设置指定限制 +### 为随机设置指定限制 {#specifying-limits-for-random-settings} 测试可以为在测试运行期间被随机化的设置指定允许的最小值和最大值。 @@ -143,8 +143,8 @@ SELECT 1 ```bash #!/usr/bin/env bash -# Tags: no-fasttest -# 随机设置限制:max_block_size=(1000, 10000); index_granularity=(100, None) +# Tags: no-fasttest {#tags-no-fasttest} +# 随机设置限制:max_block_size=(1000, 10000); index_granularity=(100, None) {#random-settings-limits-max_block_size1000-10000-index_granularity100-none} ``` 对于 `.sql` 测试,标签以 SQL 注释的形式写在相邻的一行,或写在第一行: @@ -157,7 +157,7 @@ SELECT 1 如果你只需要指定其中一个限制值,可以将另一个设置为 `None`。 -### 选择测试名称 +### 选择测试名称 {#choosing-the-test-name} 测试名称以五位数字前缀开头,后面跟一个描述性名称,例如 `00422_hash_function_constexpr.sql`。 要选择前缀,先在目录中找到已经存在的最大前缀,然后将其加一。 @@ -168,7 +168,7 @@ ls tests/queries/0_stateless/[0-9]*.reference | tail -n 1 与此同时,可能会添加一些具有相同数字前缀的其他测试,但这没问题,不会导致任何问题,你之后也不需要对其进行修改。 -### 检查必须出现的错误 +### 检查必须出现的错误 {#checking-for-an-error-that-must-occur} 有时你希望测试,当查询不正确时会出现服务器错误。我们在 SQL 测试中为此提供了特殊注解,形式如下: @@ -184,12 +184,12 @@ SELECT x; -- { serverError 49 } 只检查错误码。 如果现有的错误码对你的需求不够精确,可以考虑新增一个错误码。 -### 测试分布式查询 +### 测试分布式查询 {#testing-a-distributed-query} 如果你想在功能测试中使用分布式查询,可以使用 `remote` 表函数,并使用 `127.0.0.{1..2}` 这些地址让服务器查询自身;或者你也可以在服务器配置文件中使用预定义的测试集群,例如 `test_shard_localhost`。 记得在测试名称中加入 `shard` 或 `distributed` 这样的关键词,以便在 CI 中在正确的配置下运行该测试,即服务器已配置为支持分布式查询。 -### 使用临时文件 +### 使用临时文件 {#working-with-temporary-files} 有时在 shell 测试中,你可能需要临时创建一个文件用于操作。 请注意,某些 CI 检查会并行运行测试,因此如果你在脚本中创建或删除的临时文件没有唯一名称,就可能导致某些 CI 检查(例如 “Flaky”)失败。 @@ -217,7 +217,7 @@ SELECT x; -- { serverError 49 } -## 单元测试 +## 单元测试 {#unit-tests} 当你希望测试的不是整个 ClickHouse,而是某个独立的库或类时,单元测试会非常有用。 你可以通过 `ENABLE_TESTS` CMake 选项来启用或禁用测试的构建。 @@ -272,7 +272,7 @@ Quorum 测试是在 ClickHouse 开源之前由一个独立团队编写的。 -## 手动测试 +## 手动测试 {#manual-testing} 在开发新功能时,对其进行手动测试也是合理的。 你可以按照以下步骤进行: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/dictionary/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/dictionary/index.md index 1b6bdf69811..03d717ad336 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/dictionary/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/dictionary/index.md @@ -1,8 +1,8 @@ --- slug: /dictionary -title: '数据字典' -keywords: ['数据字典', '字典'] -description: '数据字典以键值对形式组织数据,便于快速查找。' +title: '字典' +keywords: ['dictionary', 'dictionaries'] +description: '字典以键值对形式表示数据,以支持快速查找。' doc_type: 'reference' --- @@ -11,36 +11,35 @@ import dictionaryLeftAnyJoin from '@site/static/images/dictionary/dictionary-lef import Image from '@theme/IdealImage'; -# Dictionary +# 字典 {#dictionary} -ClickHouse 中的 Dictionary 提供了一种在内存中以[键值](https://en.wikipedia.org/wiki/Key%E2%80%93value_database)形式表示来自多种[内部和外部数据源](/sql-reference/dictionaries#dictionary-sources)的数据的机制,并针对超低延迟的查找查询进行了优化。 +ClickHouse 中的字典以内存中的 [key-value](https://en.wikipedia.org/wiki/Key%E2%80%93value_database) 形式表示来自各种[内部和外部数据源](/sql-reference/dictionaries#dictionary-sources)的数据,并针对超低延迟的查找查询进行了优化。 -Dictionary 适用于: -- 提升查询性能,特别是在与 `JOIN` 配合使用时 -- 在不减慢摄取过程的情况下,对摄取数据进行实时丰富 +字典可用于: -ClickHouse 中 Dictionary 的使用场景 +- 提高查询性能,尤其是在与 `JOIN` 一起使用时 +- 在不减慢摄取过程的情况下,实时丰富已摄取的数据 +ClickHouse 中字典的使用场景 +## 使用字典加速 JOIN {#speeding-up-joins-using-a-dictionary} -## 使用 Dictionary 加速 JOIN +字典(Dictionary)可以用于加速特定类型的 `JOIN`:即 [`LEFT ANY` 类型](/sql-reference/statements/select/join#supported-types-of-join),其中 JOIN 键需要与底层键值存储的键属性匹配。 -Dictionaries 可用于加速特定类型的 `JOIN`:即 [`LEFT ANY` 类型](/sql-reference/statements/select/join#supported-types-of-join),其中 JOIN 键需要与底层键值存储的键属性匹配。 +Using Dictionary with LEFT ANY JOIN -在 LEFT ANY JOIN 中使用 Dictionary +在这种情况下,ClickHouse 可以利用字典来执行 [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join)。这是 ClickHouse 中最快的 JOIN 算法,适用于右表的底层[表引擎](/engines/table-engines)支持低延迟键值请求的场景。ClickHouse 为此提供了三种表引擎:[Join](/engines/table-engines/special/join)(本质上是预计算的哈希表)、[EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb) 和 [Dictionary](/engines/table-engines/special/dictionary)。我们将介绍基于字典的方案,但三种引擎的机制是相同的。 -在这种情况下,ClickHouse 可以利用 Dictionary 执行 [Direct Join](https://clickhouse.com/blog/clickhouse-fully-supports-joins-direct-join-part4#direct-join)。这是 ClickHouse 速度最快的 JOIN 算法,适用于右表的底层 [table engine](/engines/table-engines) 支持低延迟键值请求的场景。ClickHouse 提供了三种满足该条件的表引擎:[Join](/engines/table-engines/special/join)(本质上是一个预计算哈希表)、[EmbeddedRocksDB](/engines/table-engines/integrations/embedded-rocksdb) 和 [Dictionary](/engines/table-engines/special/dictionary)。我们将重点介绍基于 Dictionary 的方法,但这三种引擎的机制是相同的。 +Direct Join 算法要求右表由字典驱动,这样来自该表、需要参与 JOIN 的数据就已经以内存中的低延迟键值数据结构形式存在。 -Direct Join 算法要求右表由 Dictionary 提供支持,即该表中需要参与 JOIN 的数据已以内存中的低延迟键值数据结构形式存在。 +### 示例 {#example} -### 示例 +使用 [Stack Overflow 数据集](/getting-started/example-datasets/stackoverflow),来回答这样一个问题: +*在 Hacker News 上,关于 SQL 的帖子中,哪一条是最具争议性的?* -使用 Stack Overflow 数据集,让我们来回答这个问题: -*关于 SQL 的哪条 Hacker News 帖子最具争议性?* +我们将“有争议性”定义为:帖子获得的赞成票和反对票数量相近。我们会计算这两者的绝对差值,数值越接近 0,代表争议越大。我们还假设帖子必须至少有 10 个赞成票和 10 个反对票——几乎没人投票的帖子并不算很有争议。 -我们将“具争议性”定义为:帖子获得的赞成票和反对票数量相近。我们计算两者的绝对差值,值越接近 0 表示争议越大。我们假定帖子至少要有 10 个赞成票和 10 个反对票——没人投票的帖子并不算很有争议。 - -在数据已规范化的前提下,这个查询目前需要在 `posts` 和 `votes` 表之间执行一次 `JOIN`: +在对数据进行规范化之后,这个查询目前需要对 `posts` 表和 `votes` 表执行一次 `JOIN` 操作: ```sql WITH PostIds AS @@ -79,38 +78,38 @@ UpVotes: 13 DownVotes: 13 Controversial_ratio: 0 -返回 1 行。用时:1.283 秒。已处理 4.1844 亿行,7.23 GB(3.2607 亿行/秒,5.63 GB/秒)。 -内存峰值:3.18 GiB。 +结果集包含 1 行。耗时: 1.283 秒。处理了 4.1844 亿行,7.23 GB (每秒 3.2607 亿行,5.63 GB/秒)。 +峰值内存使用: 3.18 GiB。 ``` -> **在 `JOIN` 的右侧使用较小的数据集**:这个查询看起来比必要的更冗长,因为对 `PostId` 的过滤同时发生在外层查询和子查询中。这是一种性能优化,用于确保查询响应时间足够快。为了获得最佳性能,请始终确保 `JOIN` 右侧的数据集较小,并尽可能小。关于如何优化 JOIN 性能以及了解可用算法的更多提示,我们推荐阅读[这一系列博客文章](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1)。 +> **在 `JOIN` 的右侧使用较小的数据集**:这个查询看起来比实际需要的更啰嗦一些,因为对 `PostId` 的过滤同时出现在外层查询和子查询中。这是一种性能优化,用于确保查询响应时间足够快。为了获得最佳性能,应始终确保 `JOIN` 右侧的数据集更小,并且尽可能小。关于优化 JOIN 性能以及理解可用算法的建议,我们推荐阅读[这系列博客文章](https://clickhouse.com/blog/clickhouse-fully-supports-joins-part1)。 -虽然这个查询很快,但它依赖我们谨慎地编写 `JOIN` 才能获得良好的性能。理想情况下,我们只需先将帖子过滤为那些包含 “SQL” 的内容,然后再查看这一子集博客的 `UpVote` 和 `DownVote` 计数来计算我们的指标。 +虽然这个查询很快,但它要求我们在编写 `JOIN` 时格外小心,才能获得良好的性能。理想情况下,我们只需先过滤出包含“SQL”的帖子,然后再查看这部分帖子对应的 `UpVote` 和 `DownVote` 计数来计算我们的指标。 -#### 使用字典 -为了演示这些概念,我们为投票数据使用字典。由于字典通常存放在内存中([ssd_cache](/sql-reference/dictionaries#ssd_cache) 是个例外),用户应当注意数据的大小。先确认一下我们的 `votes` 表的大小: +#### 应用字典 {#applying-a-dictionary} +为了演示这些概念,我们为投票数据使用一个字典。由于字典通常存放在内存中([ssd_cache](/sql-reference/dictionaries#ssd_cache) 是一个例外),用户应当注意数据的大小。先确认一下我们的 `votes` 表的大小: ```sql -SELECT 表, - formatReadableSize(sum(data_compressed_bytes)) AS 压缩后大小, - formatReadableSize(sum(data_uncompressed_bytes)) AS 未压缩大小, - round(sum(data_uncompressed_bytes) / sum(data_compressed_bytes), 2) AS 压缩比 +SELECT table, + formatReadableSize(sum(data_compressed_bytes)) AS compressed_size, + formatReadableSize(sum(data_uncompressed_bytes)) AS uncompressed_size, + round(sum(data_uncompressed_bytes) / sum(data_compressed_bytes), 2) AS ratio FROM system.columns -WHERE 表 IN ('votes') -GROUP BY 表 +WHERE table IN ('votes') +GROUP BY table -┌─表───────────┬─压缩后大小─┬─未压缩大小─┬─压缩比─┐ +┌─table───────────┬─compressed_size─┬─uncompressed_size─┬─ratio─┐ │ votes │ 1.25 GiB │ 3.79 GiB │ 3.04 │ └─────────────────┴─────────────────┴───────────────────┴───────┘ ``` -数据将在我们的字典中以未压缩形式存储,因此如果要在字典中存储所有列(实际我们不会这么做),则至少需要 4GB 内存。字典会在集群中的各个节点间进行复制,因此这部分内存需要为*每个节点*预留。 +数据将在我们的字典中以未压缩形式存储,因此如果要将所有列(实际上我们不会这样做)都存入字典,至少需要 4GB 内存。字典会在集群中进行复制,因此这部分内存需要 *按节点* 预留。 -> 在下面的示例中,我们字典的数据来源于一张 ClickHouse 表。虽然这是最常见的字典数据源,但还支持[多种数据源](/sql-reference/dictionaries#dictionary-sources),包括文件、HTTP,以及包含 [Postgres](/sql-reference/dictionaries#postgresql) 在内的各类数据库。正如下文所示,字典可以自动刷新,是确保那些经常变动的小型数据集始终可以用于直接 JOIN 的理想方式。 +> 在下面的示例中,我们字典的数据来源于一个 ClickHouse 表。虽然这是字典最常见的数据源,但还支持[多种数据源](/sql-reference/dictionaries#dictionary-sources),包括文件、HTTP 以及包括 [Postgres](/sql-reference/dictionaries#postgresql) 在内的各类数据库。正如我们将展示的那样,字典可以自动刷新,为小型且经常变更的数据集提供了一种理想方式,使其可用于直接进行 join 操作。 -我们的字典需要一个用于执行查找的主键。在概念上,它与事务型数据库中的主键相同,并且应当是唯一的。上面的查询需要在关联键 `PostId` 上进行查找。字典本身则应填充为来自 `votes` 表的每个 `PostId` 的赞成票和反对票的总数。下面是获取该字典数据的查询: +我们的字典需要一个用于执行查找的主键。这在概念上与事务型数据库中的主键相同,并且必须唯一。上面的查询需要在 join 键 `PostId` 上执行查找。字典应相应地填充为来自 `votes` 表的每个 `PostId` 的赞成票和反对票总数。下面是获取该字典数据的查询: ```sql SELECT PostId, @@ -120,7 +119,7 @@ FROM votes GROUP BY PostId ``` -要创建我们的字典,我们需要执行以下 DDL——请注意其中使用了上面的查询: +要创建我们的字典,需要使用以下 DDL——请注意其中使用了上面的查询: ```sql CREATE DICTIONARY votes_dict @@ -137,9 +136,9 @@ LAYOUT(HASHED()) 0 rows in set. Elapsed: 36.063 sec. ``` -> 在自管理的开源部署中,需要在所有节点上执行上述命令。在 ClickHouse Cloud 中,字典会自动复制到所有节点。上述命令是在一台具有 64GB 内存的 ClickHouse Cloud 节点上执行的,加载耗时 36 秒。 +> 在自管理 OSS 中,需要在所有节点上执行上述命令。在 ClickHouse Cloud 中,字典会自动复制到所有节点。上述操作是在一台具有 64GB 内存的 ClickHouse Cloud 节点上执行的,加载耗时 36 秒。 -要确认我们的字典占用的内存: +要确认我们的字典内存占用情况: ```sql SELECT formatReadableSize(bytes_allocated) AS size @@ -151,7 +150,8 @@ WHERE name = 'votes_dict' └──────────┘ ``` -现在,你可以通过一个简单的 `dictGet` 函数来获取特定 `PostId` 的赞成票和反对票数。下面我们检索帖子 `11227902` 的这些值: +现在,可以通过一个简单的 `dictGet` FUNCTION 来获取特定 `PostId` 的赞成票和反对票。下面我们检索 `PostId` 为 `11227902` 的帖子对应的这些值: + ```sql SELECT dictGet('votes_dict', ('UpVotes', 'DownVotes'), '11227902') AS votes @@ -177,16 +177,16 @@ WHERE (Id IN (PostIds)) AND (UpVotes > 10) AND (DownVotes > 10) ORDER BY Controversial_ratio ASC LIMIT 3 -返回 3 行。耗时:0.551 秒。处理了 1.1964 亿行,3.29 GB(2.1696 亿行/秒,5.97 GB/秒)。 +返回 3 行。耗时:0.551 秒。处理了 1.1964 亿行,3.29 GB(每秒 2.1696 亿行,5.97 GB/秒)。 峰值内存使用量:552.26 MiB。 ``` -这个查询不仅更加简单,而且执行速度也快了两倍多!还可以进一步优化,只将赞成票和反对票合计超过 10 的帖子加载到字典中,并只存储预先计算好的“争议度”数值。 +这个查询不仅简单得多,而且速度也提升了两倍多!还可以通过只将赞成票和反对票之和超过 10 的帖子加载到字典中,并仅存储预先计算好的争议度值来进一步优化。 -## 查询时富化 +## 查询时富化 {#query-time-enrichment} -可以在查询时使用字典来查找值。这些值可以直接在结果中返回,或用于聚合操作。假设我们创建一个字典,用于将用户 ID 映射到其位置: +字典可以用于在查询时查找值。这些值可以在查询结果中返回,或用于聚合运算。假设我们创建一个字典,将用户 ID 映射到其所在地: ```sql CREATE DICTIONARY users_dict @@ -200,7 +200,7 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -我们可以使用此字典来丰富查询结果: +我们可以使用该字典来丰富 POST 请求的结果: ```sql SELECT @@ -213,18 +213,18 @@ LIMIT 5 FORMAT PrettyCompactMonoBlock ┌───────Id─┬─Title─────────────────────────────────────────────────────────┬─Location──────────────┐ -│ 52296928 │ ClickHouse 中两个字符串的比较 │ Spain │ -│ 52345137 │ 如何使用文件将数据从 MySQL 迁移到 ClickHouse? │ 中国江苏省Nanjing Shi │ -│ 61452077 │ 如何在 ClickHouse 中更改 PARTITION │ Guangzhou, 广东省中国 │ -│ 55608325 │ ClickHouse 在不使用 max() 的情况下选择表中最后一条记录 │ Moscow, Russia │ -│ 55758594 │ ClickHouse 创建临时表 │ Perm', Russia │ +│ 52296928 │ Comparison between two Strings in ClickHouse │ Spain │ +│ 52345137 │ How to use a file to migrate data from mysql to a clickhouse? │ 中国江苏省Nanjing Shi │ +│ 61452077 │ How to change PARTITION in clickhouse │ Guangzhou, 广东省中国 │ +│ 55608325 │ Clickhouse select last record without max() on all table │ Moscow, Russia │ +│ 55758594 │ ClickHouse create temporary table │ Perm', Russia │ └──────────┴───────────────────────────────────────────────────────────────┴───────────────────────┘ -返回 5 行。耗时:0.033 秒。处理了 425 万行,82.84 MB(每秒 1.3062 亿行,2.55 GB/秒)。 -峰值内存使用量:249.32 MiB。 +返回 5 行。用时:0.033 秒。处理了 425 万行,82.84 MB(每秒 1.3062 亿行,2.55 GB/秒)。 +内存峰值:249.32 MiB。 ``` -与上面的 JOIN 示例类似,我们可以使用同一个字典高效地确定大多数帖子来自哪里: +与上面的 join 示例类似,我们可以使用同一个字典,高效判断大部分帖子是从哪里发出的: ```sql SELECT @@ -249,13 +249,13 @@ LIMIT 5 ``` -## 索引时富化 +## 索引时富化 {#index-time-enrichment} -在上面的示例中,我们在查询时使用了字典来去掉一次 JOIN。字典也可以在插入时用于对行进行富化。通常当富化值不会变化,并且存在于可用于填充字典的外部数据源中时,这种方式是合适的。在这种情况下,在插入时对行进行富化可以避免在查询时再去查找字典。 +在上面的示例中,我们在查询时使用字典来避免一次 join 操作。字典也可以用于在插入时对行进行富化。如果富化值不会变化,并且存在于可用于填充字典的外部数据源中,这通常是一个合适的做法。在这种情况下,在插入时对行进行富化可以避免在查询时对字典进行查找。 -假设 Stack Overflow 中用户的 `Location` 从不改变(实际上是会变的)——更具体地说是 `users` 表的 `Location` 列。假设我们希望在 `posts` 表上按位置进行分析查询。`posts` 表中包含一个 `UserId`。 +假设 Stack Overflow 中某个用户的 `Location` 永远不变(实际上会变)——具体来说,是 `users` 表中的 `Location` 列。假设我们希望对 `posts` 表按地点进行分析查询。该表包含一个 `UserId`。 -字典提供了一个从用户 id 到位置的映射,并以 `users` 表为后端: +字典提供了从用户 ID 到位置信息的映射,并以 `users` 表为数据源: ```sql CREATE DICTIONARY users_dict @@ -269,9 +269,9 @@ LIFETIME(MIN 600 MAX 900) LAYOUT(HASHED()) ``` -> 我们忽略 `Id < 0` 的用户,以便可以使用 `Hashed` 字典类型。`Id < 0` 的用户是系统用户。 +> 我们排除 `Id < 0` 的用户,这样就可以使用 `Hashed` 字典类型。`Id < 0` 的用户是系统用户。 -要在向 `posts` 表插入数据时利用这个字典,我们需要修改该表的 schema: +为了在向 posts 表插入数据时利用这个字典,我们需要修改表结构(schema): ```sql CREATE TABLE posts_with_location @@ -285,11 +285,11 @@ ENGINE = MergeTree ORDER BY (PostTypeId, toDate(CreationDate), CommentCount) ``` -在上面的示例中,`Location` 被声明为一个 `MATERIALIZED` 列。这意味着该值可以作为 `INSERT` 查询的一部分提供,并且始终会被计算。 +在上面的示例中,`Location` 被声明为 `MATERIALIZED` 列。这意味着其值可以作为 `INSERT` 查询的一部分提供,并且始终会被计算。 -> ClickHouse 也支持 [`DEFAULT` 列](/sql-reference/statements/create/table#default_values)(在这种情况下,值既可以被显式插入,也可以在未提供时自动计算)。 +> ClickHouse 还支持 [`DEFAULT` columns](/sql-reference/statements/create/table#default_values)(在这种情况下,如果未提供值,则可以插入该值或由系统计算)。 -为了向该表填充数据,我们可以像往常一样从 S3 使用 `INSERT INTO SELECT`: +为了填充该表,我们可以像往常一样使用来自 S3 的 `INSERT INTO SELECT`: ```sql INSERT INTO posts_with_location SELECT Id, PostTypeId::UInt8, AcceptedAnswerId, CreationDate, Score, ViewCount, Body, OwnerUserId, OwnerDisplayName, LastEditorUserId, LastEditorDisplayName, LastEditDate, LastActivityDate, Title, Tags, AnswerCount, CommentCount, FavoriteCount, ContentLicense, ParentId, CommunityOwnedDate, ClosedDate FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/*.parquet') @@ -297,7 +297,7 @@ INSERT INTO posts_with_location SELECT Id, PostTypeId::UInt8, AcceptedAnswerId, 返回 0 行。耗时:36.830 秒。处理了 2.3898 亿行,2.64 GB(649 万行/秒,71.79 MB/秒) ``` -现在我们可以找出大多数帖子发布地点的名称: +现在我们可以获取大多数帖子发布地的名称: ```sql SELECT Location, count() AS c @@ -314,29 +314,29 @@ LIMIT 4 │ London, United Kingdom │ 538738 │ └────────────────────────┴────────┘ -4 行结果。耗时:0.142 秒。处理了 59.82 百万行,1.08 GB(420.73 百万行/秒,7.60 GB/秒)。 -峰值内存使用:666.82 MiB。 +返回 4 行。用时:0.142 秒。已处理 5982 万行,1.08 GB(420.73 百万行/秒,7.60 GB/秒)。 +内存峰值:666.82 MiB。 ``` -## 字典进阶主题 {#advanced-dictionary-topics} +## 字典高级主题 {#advanced-dictionary-topics} ### 选择字典 `LAYOUT` {#choosing-the-dictionary-layout} -`LAYOUT` 子句控制字典的内部数据结构。可用的布局类型有多种,其说明文档见[此处](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory)。关于如何选择合适布局的一些建议可以在[这里](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout)找到。 +`LAYOUT` 子句控制字典的内部数据结构。有多种可用选项,其文档见[此处](/sql-reference/dictionaries#ways-to-store-dictionaries-in-memory)。关于如何选择合适布局的一些建议见[这里](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse#choosing-a-layout)。 ### 刷新字典 {#refreshing-dictionaries} -我们为该字典指定的 `LIFETIME` 为 `MIN 600 MAX 900`。LIFETIME 表示字典的更新间隔,上述配置会使字典在 600 到 900 秒之间的随机时间点进行周期性重新加载。这个随机间隔是必要的,用于在大量服务器更新时分散对字典源的负载。在更新期间,旧版本的字典仍然可以被查询,只有初次加载会阻塞查询。请注意,设置 `(LIFETIME(0))` 将禁止字典更新。 +我们为字典指定了 `LIFETIME MIN 600 MAX 900`。`LIFETIME` 用于控制字典的更新间隔,上述取值会使字典在 600 到 900 秒之间的随机时间间隔内周期性地重新加载。这个随机间隔是必要的,以便在大量服务器进行更新时分散对字典数据源的负载。在更新过程中,旧版本的字典仍然可以被查询,只有初始加载时才会阻塞查询。注意,将 `LIFETIME(0)` 进行设置会禁止字典更新。 可以使用 `SYSTEM RELOAD DICTIONARY` 命令强制重新加载字典。 -对于 ClickHouse 和 Postgres 等数据库源,可以配置查询,让字典仅在数据确实发生变化时才更新(由该查询的响应决定),而不是按固定周期更新。更多细节请参见[此处](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime)。 +对于 ClickHouse 和 Postgres 等数据库数据源,你可以设置一个查询,仅在字典数据确实发生变化时才更新字典(由该查询的响应来决定),而不是按固定周期更新。更多详细信息请参见[此处](/sql-reference/dictionaries#refreshing-dictionary-data-using-lifetime)。 ### 其他字典类型 {#other-dictionary-types} -ClickHouse 还支持[层次字典](/sql-reference/dictionaries#hierarchical-dictionaries)、[多边形字典](/sql-reference/dictionaries#polygon-dictionaries)和[正则表达式字典](/sql-reference/dictionaries#regexp-tree-dictionary)。 +ClickHouse 还支持[层次结构字典](/sql-reference/dictionaries#hierarchical-dictionaries)、[多边形字典](/sql-reference/dictionaries#polygon-dictionaries)和[正则表达式字典](/sql-reference/dictionaries#regexp-tree-dictionary)。 ### 延伸阅读 {#more-reading} - [使用字典加速查询](https://clickhouse.com/blog/faster-queries-dictionaries-clickhouse) -- [字典的高级配置](/sql-reference/dictionaries) +- [字典的高级配置](/sql-reference/dictionaries) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md index 094aee6160d..9ae853009db 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/atomic.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Atomic +# Atomic {#atomic} `Atomic` 引擎支持非阻塞的 [`DROP TABLE`](#drop-detach-table) 和 [`RENAME TABLE`](#rename-table) 查询,以及原子性的 [`EXCHANGE TABLES`](#exchange-tables) 查询。在开源 ClickHouse 中,默认使用 `Atomic` 数据库引擎。 @@ -19,16 +19,16 @@ doc_type: 'reference' -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE test [ENGINE = Atomic] [SETTINGS disk=...]; ``` -## 具体说明和建议 +## 具体说明和建议 {#specifics-and-recommendations} -### 表 UUID +### 表 UUID {#table-uuid} `Atomic` 数据库中的每个表都有一个持久的 [UUID](../../sql-reference/data-types/uuid.md),其数据存储在以下目录中: @@ -50,16 +50,16 @@ CREATE TABLE name UUID '28f1c61c-2970-457a-bffe-454156ddcfef' (n UInt64) ENGINE 您可以使用 [show_table_uuid_in_table_create_query_if_not_nil](../../operations/settings/settings.md#show_table_uuid_in_table_create_query_if_not_nil) 设置,在 `SHOW CREATE` 查询中显示 UUID。 ::: -### RENAME TABLE +### RENAME TABLE {#rename-table} [`RENAME`](../../sql-reference/statements/rename.md) 查询不会修改 UUID,也不会移动表数据。此类查询会立即执行,并且不会等待正在使用该表的其他查询完成。 -### DROP/DETACH TABLE +### DROP/DETACH TABLE {#drop-detach-table} 使用 `DROP TABLE` 时,不会立即删除任何数据。`Atomic` 引擎只是通过将表的元数据移动到 `/clickhouse_path/metadata_dropped/` 并通知后台线程,将该表标记为已删除。最终删除表数据前的延迟由 [`database_atomic_delay_before_drop_table_sec`](../../operations/server-configuration-parameters/settings.md#database_atomic_delay_before_drop_table_sec) 设置指定。 您可以使用 `SYNC` 修饰符指定同步模式,可以通过 [`database_atomic_wait_for_drop_and_detach_synchronously`](../../operations/settings/settings.md#database_atomic_wait_for_drop_and_detach_synchronously) 设置来实现。在这种情况下,`DROP` 会等待正在运行且使用该表的 `SELECT`、`INSERT` 以及其他查询完成。当表不再被使用时,它将被删除。 -### EXCHANGE TABLES/DICTIONARIES +### EXCHANGE TABLES/DICTIONARIES {#exchange-tables} [`EXCHANGE`](../../sql-reference/statements/exchange.md) 查询会以原子方式交换表或字典。例如,您可以用它替代如下非原子操作: @@ -73,11 +73,11 @@ RENAME TABLE new_table TO tmp, old_table TO new_table, tmp TO old_table; EXCHANGE TABLES new_table AND old_table; ``` -### 原子数据库中的 ReplicatedMergeTree +### 原子数据库中的 ReplicatedMergeTree {#replicatedmergetree-in-atomic-database} 对于 [`ReplicatedMergeTree`](/engines/table-engines/mergetree-family/replication) 表,建议不要在引擎参数中显式指定 ZooKeeper 路径和副本名称。在这种情况下,将使用配置参数 [`default_replica_path`](../../operations/server-configuration-parameters/settings.md#default_replica_path) 和 [`default_replica_name`](../../operations/server-configuration-parameters/settings.md#default_replica_name)。如果需要显式指定引擎参数,建议使用 `{uuid}` 宏。这样可以确保为 ZooKeeper 中的每个表自动生成唯一路径。 -### 元数据磁盘 +### 元数据磁盘 {#metadata-disk} 当在 `SETTINGS` 中指定了 `disk` 时,将使用该磁盘来存储表的元数据文件。 例如: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md index 046bbd77c8c..6a885cf3b7b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/backup.md @@ -7,17 +7,13 @@ title: '备份' doc_type: '参考' --- - - -# 备份 +# 备份 {#backup} 数据库备份允许从[备份](../../operations/backup)中即时附加表或数据库,并以只读模式访问。 数据库备份同时支持增量和非增量备份。 - - -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE backup_database @@ -38,8 +34,7 @@ ENGINE = Backup('database_name_inside_backup', Disk('disk_name', 'backup_name')) * `database_name_inside_backup` — 备份中数据库的名称。 * `backup_destination` — 备份存储位置。 - -## 使用示例 +## 使用示例 {#usage-example} 以 `Disk` 作为备份目标为例。首先在 `storage.xml` 中配置备份磁盘: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md index 2b60244dd3d..6c9d8e6c8f4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' -# DataLakeCatalog +# DataLakeCatalog {#datalakecatalog} `DataLakeCatalog` 数据库引擎使您能够将 ClickHouse 连接到外部数据目录,并在无需复制数据的情况下查询开放表格式数据。 这使 ClickHouse 成为一个功能强大的查询引擎,能够与您现有的数据湖基础设施无缝协同工作。 @@ -26,7 +26,7 @@ doc_type: 'reference' -## 创建数据库 +## 创建数据库 {#creating-a-database} 要使用 `DataLakeCatalog` 引擎,需要启用下列相关设置: @@ -64,7 +64,7 @@ catalog_type, | `region` | 服务所在的 AWS 区域(例如 `us-east-1`) | -## 示例 +## 示例 {#examples} 请参阅以下部分,了解如何使用 `DataLakeCatalog` 引擎的示例: 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..8ca86a91738 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 @@ -8,34 +8,32 @@ title: '数据库引擎' doc_type: 'landing-page' --- +# 数据库引擎 {#database-engines} - -# 数据库引擎 - -数据库引擎用于操作表。默认情况下,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。 + 根据 YAML front matter 中的 slug、description、title 字段生成。 如果发现错误,请直接编辑页面本身的 YAML front matter。 */ } {/*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*/ } +| Page | Description | +| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| [Atomic](/engines/database-engines/atomic) | `Atomic` 引擎支持非阻塞的 `DROP TABLE` 和 `RENAME TABLE` 查询,以及原子的 `EXCHANGE TABLES` 查询。`Atomic` 是默认的数据库引擎。 | +| [Shared](/engines/database-engines/shared) | 描述 `Shared` 数据库引擎的页面,该引擎可在 ClickHouse Cloud 中使用。 | +| [Lazy](/engines/database-engines/lazy) | 在最后一次访问之后,仅在 RAM 中保留表 `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 之间交换数据。 | +| [Backup](/engines/database-engines/backup) | 用于以只读模式即时挂载来自备份的表/数据库。 | +| [MaterializedPostgreSQL](/engines/database-engines/materialized-postgresql) | 使用 PostgreSQL 数据库中的表创建一个 ClickHouse 数据库。 | +| [DataLakeCatalog](/engines/database-engines/datalakecatalog) | DataLakeCatalog 数据库引擎用于将 ClickHouse 连接到外部数据目录,并查询开放表格式数据。 | + +{/*AUTOGENERATED_START*/ } diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md index bede945ee4c..10e7f441684 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/lazy.md @@ -7,17 +7,13 @@ title: 'Lazy' doc_type: 'reference' --- +# Lazy {#lazy} +只会在上次访问后的 `expiration_time_in_seconds` 秒内将表保留在 RAM 中。只能用于 *Log 表。 -# Lazy +它针对存储大量小型 *Log 表进行了优化,这些表的访问之间存在较长的时间间隔。 -只会在上次访问后的 `expiration_time_in_seconds` 秒内将表保留在 RAM 中。只能用于 \*Log 表。 - -它针对存储大量小型 \*Log 表进行了优化,这些表的访问之间存在较长的时间间隔。 - - - -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE testlazy diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md index f2892726e69..80764db4cd7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MaterializedPostgreSQL +# MaterializedPostgreSQL {#materializedpostgresql} @@ -35,7 +35,7 @@ SET allow_experimental_database_materialized_postgresql=1 ::: -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -50,7 +50,7 @@ ENGINE = MaterializedPostgreSQL('host:port', 'database', 'user', 'password') [SE * `password` — 用户密码。 -## 使用示例 +## 使用示例 {#example-of-use} ```sql CREATE DATABASE postgres_db @@ -66,7 +66,7 @@ SELECT * FROM postgresql_db.postgres_table; ``` -## 动态向复制中添加新表 +## 动态向复制中添加新表 {#dynamically-adding-table-to-replication} 创建 `MaterializedPostgreSQL` 数据库后,它不会自动检测对应 PostgreSQL 数据库中的新表。可以手动添加这类表: @@ -79,7 +79,7 @@ ATTACH TABLE postgres_database.new_table; ::: -## 动态移除复制中的表 +## 动态移除复制中的表 {#dynamically-removing-table-from-replication} 可以将特定的表从复制中移除: @@ -88,7 +88,7 @@ DETACH TABLE postgres_database.table_to_remove PERMANENTLY; ``` -## PostgreSQL 模式 +## PostgreSQL 模式 {#schema} 从 21.12 版本开始,PostgreSQL 的[模式(schema)](https://www.postgresql.org/docs/9.1/ddl-schemas.html)可以通过 3 种方式进行配置。 @@ -136,7 +136,7 @@ SELECT * FROM database1.`schema2.table2`; 警告:在这种情况下,表名中不允许包含点号。 -## 要求 +## 要求 {#requirements} 1. 在 PostgreSQL 配置文件中,必须将 [wal_level](https://www.postgresql.org/docs/current/runtime-config-wal.html) 参数设置为 `logical`,并且将 `max_replication_slots` 参数设置为至少 `2`。 @@ -172,9 +172,9 @@ WHERE oid = 'postgres_table'::regclass; ::: -## 设置 +## 设置 {#settings} -### `materialized_postgresql_tables_list` +### `materialized_postgresql_tables_list` {#materialized-postgresql-tables-list} 设置一个以逗号分隔的 PostgreSQL 数据库表列表,这些表将通过 [MaterializedPostgreSQL](../../engines/database-engines/materialized-postgresql.md) 数据库引擎进行复制。 @@ -186,15 +186,15 @@ materialized_postgresql_tables_list = 'table1(co1, col2),table2,table3(co3, col5 默认值:空列表 —— 表示将复制整个 PostgreSQL 数据库。 -### `materialized_postgresql_schema` +### `materialized_postgresql_schema` {#materialized-postgresql-schema} 默认值:空字符串。(使用默认 schema) -### `materialized_postgresql_schema_list` +### `materialized_postgresql_schema_list` {#materialized-postgresql-schema-list} 默认值:空列表。(使用默认 schema) -### `materialized_postgresql_max_block_size` +### `materialized_postgresql_max_block_size` {#materialized-postgresql-max-block-size} 设置在将数据刷新到 PostgreSQL 数据库表之前,先在内存中累积的行数。 @@ -204,11 +204,11 @@ materialized_postgresql_tables_list = 'table1(co1, col2),table2,table3(co3, col5 默认值:`65536`。 -### `materialized_postgresql_replication_slot` +### `materialized_postgresql_replication_slot` {#materialized-postgresql-replication-slot} 由用户创建的 replication slot。必须与 `materialized_postgresql_snapshot` 一起使用。 -### `materialized_postgresql_snapshot` +### `materialized_postgresql_snapshot` {#materialized-postgresql-snapshot} 用于标识快照的文本字符串,将基于该快照执行 [PostgreSQL 表的初始导出](../../engines/database-engines/materialized-postgresql.md)。必须与 `materialized_postgresql_replication_slot` 一起使用。 @@ -226,7 +226,7 @@ SELECT * FROM database1.table1; ALTER DATABASE postgres_database MODIFY SETTING materialized_postgresql_max_block_size = <新大小>; ``` -### `materialized_postgresql_use_unique_replication_consumer_identifier` +### `materialized_postgresql_use_unique_replication_consumer_identifier` {#materialized_postgresql_use_unique_replication_consumer_identifier} 使用唯一的复制消费者标识符进行复制。默认值:`0`。 如果设置为 `1`,则允许创建多个指向同一 `PostgreSQL` 表的 `MaterializedPostgreSQL` 表。 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..4cec39a282f 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 @@ -10,8 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - -# MySQL 数据库引擎 +# MySQL 数据库引擎 {#mysql-database-engine} @@ -25,9 +24,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - `CREATE TABLE` - `ALTER` - - -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] @@ -41,7 +38,6 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') * `user` — MySQL 用户。 * `password` — 用户密码。 - ## 数据类型支持 {#data_types-support} | MySQL | ClickHouse | @@ -64,9 +60,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') 支持 [Nullable](../../sql-reference/data-types/nullable.md)。 - - -## 全局变量支持 +## 全局变量支持 {#global-variables-support} 为提高兼容性,可以使用 MySQL 风格来引用全局变量,即 `@@identifier`。 @@ -85,8 +79,7 @@ ENGINE = MySQL('host:port', ['database' | database], 'user', 'password') SELECT @@version; ``` - -## 使用示例 +## 使用示例 {#examples-of-use} 在 MySQL 中的表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md index 84bec7a06d7..03510b2731b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/postgresql.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# PostgreSQL +# PostgreSQL {#postgresql} 允许连接到远程 [PostgreSQL](https://www.postgresql.org) 服务器上的数据库。支持读写操作(`SELECT` 和 `INSERT` 查询),用于在 ClickHouse 和 PostgreSQL 之间交换数据。 @@ -19,7 +19,7 @@ doc_type: 'guide' -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE test_database @@ -56,7 +56,7 @@ ENGINE = PostgreSQL('host:port', 'database', 'user', 'password'[, `schema`, `use -## 使用示例 +## 使用示例 {#examples-of-use} 与 PostgreSQL 服务器进行数据交换的 ClickHouse 数据库: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md index 1b15c22a0ce..8bbb1b024d7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/replicated.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Replicated +# Replicated {#replicated} 该引擎基于 [Atomic](../../engines/database-engines/atomic.md) 引擎。它通过将 DDL 日志写入 ZooKeeper,并在给定数据库的所有副本上执行该日志,从而实现元数据复制。 @@ -17,7 +17,7 @@ doc_type: 'reference' -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE testdb [UUID '...'] ENGINE = Replicated('zoo_path', 'shard_name', 'replica_name') [SETTINGS ...] @@ -54,7 +54,7 @@ CREATE DATABASE testdb [UUID '...'] ENGINE = Replicated('zoo_path', 'shard_name' -## 使用示例 +## 使用示例 {#usage-example} 创建一个由三台主机组成的集群: @@ -153,7 +153,7 @@ node2 :) SELECT materialize(hostName()) AS host, groupArray(n) FROM r.d GROUP BY ``` -## 设置 +## 设置 {#settings} 支持以下设置: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md index 1c4f99a7156..b3b6ffa5c1d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/shared.md @@ -12,7 +12,7 @@ import CloudOnlyBadge from '@theme/badges/CloudOnlyBadge'; -# Shared 数据库引擎 +# Shared 数据库引擎 {#shared-database-engine} `Shared` 数据库引擎与 Shared Catalog 配合使用,用于管理其表使用无状态表引擎(例如 [`SharedMergeTree`](/cloud/reference/shared-merge-tree))的数据库。 这些表引擎不会将任何持久化状态写入磁盘,并且与动态计算环境兼容。 @@ -30,7 +30,7 @@ Cloud 中的 `Shared` 数据库引擎消除了对本地磁盘的依赖。 -## 语法 +## 语法 {#syntax} 对于最终用户而言,使用 Shared Catalog 和 Shared 数据库引擎无需任何额外配置。数据库的创建方式与以往完全相同: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md index dd89b2699b2..48ce642fb7b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/database-engines/sqlite.md @@ -10,13 +10,13 @@ doc_type: 'reference' -# SQLite +# SQLite {#sqlite} 用于连接 [SQLite](https://www.sqlite.org/index.html) 数据库,并执行 `INSERT` 和 `SELECT` 查询,以在 ClickHouse 与 SQLite 之间交换数据。 -## 创建数据库 +## 创建数据库 {#creating-a-database} ```sql CREATE DATABASE sqlite_database @@ -46,7 +46,7 @@ SQLite 不需要服务管理(例如启动脚本)或基于 `GRANT` 和密码 -## 使用示例 +## 使用示例 {#usage-example} ClickHouse 中连接到 SQLite 的数据库: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/index.md index e2970821e1e..944574609ca 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/index.md @@ -10,7 +10,7 @@ doc_type: 'reference' -# 表引擎 +# 表引擎 {#table-engines} 表引擎(表的类型)决定: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md index fd8517fa7c3..69a50e92a68 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ExternalDistributed.md @@ -7,15 +7,11 @@ title: 'ExternalDistributed 表引擎' doc_type: 'reference' --- - - -# ExternalDistributed 表引擎 +# ExternalDistributed 表引擎 {#externaldistributed-table-engine} `ExternalDistributed` 引擎允许对存储在远程服务器上 MySQL 或 PostgreSQL 实例中的数据执行 `SELECT` 查询。它接受 [MySQL](../../../engines/table-engines/integrations/mysql.md) 或 [PostgreSQL](../../../engines/table-engines/integrations/postgresql.md) 引擎作为参数,从而支持分片。 - - -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -42,8 +38,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `user` — 用户名。 * `password` — 用户密码。 - -## 实现细节 +## 实现细节 {#implementation-details} 支持多个副本,多个副本之间必须使用 `|` 分隔,多个分片之间必须使用 `,` 分隔。例如: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md index 3ee86b61dae..437133a9bad 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/arrowflight.md @@ -9,14 +9,14 @@ doc_type: 'reference' -# ArrowFlight 表引擎 +# ArrowFlight 表引擎 {#arrowflight-table-engine} ArrowFlight 表引擎使 ClickHouse 能够通过 [Apache Arrow Flight](https://arrow.apache.org/docs/format/Flight.html) 协议查询远程数据集。 此集成允许 ClickHouse 高效地从支持 Flight 的外部服务器获取列式 Arrow 格式的数据。 -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name (name1 [type1], name2 [type2], ...) (仅当 Arrow Flight 服务器允许无认证访问时才可用)。 -## 使用示例 +## 使用示例 {#usage-example} 本示例演示如何创建一个从远程 Arrow Flight 服务器读取数据的表: 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..74f731a576c 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,13 +7,9 @@ title: 'AzureQueue 表引擎' doc_type: 'reference' --- +# AzureQueue 表引擎 {#azurequeue-table-engine} - -# 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} @@ -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)。 **示例** @@ -45,24 +41,60 @@ ENGINE = AzureQueue('DefaultEndpointsProtocol=http;AccountName=devstoreaccount1; SETTINGS mode = 'unordered' ``` +## 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} -## 设置 {#settings} +当目标是另一个 Azure 容器时,用于将已成功处理的文件移动到该容器的 Azure Blob Storage 连接字符串。 -支持的设置集与 `S3Queue` 表引擎相同,但不带 `s3queue_` 前缀。请参阅[完整设置列表](../../../engines/table-engines/integrations/s3queue.md#settings)。 -要获取表的配置设置列表,请使用 `system.azure_queue_settings` 表。此功能从 `24.10` 版本开始提供。 +可能的取值: +* 字符串。 -## Description {#description} +默认值:空字符串。 -`SELECT` 对于流式导入并不特别有用(除了调试场景),因为每个文件只能导入一次。更实用的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)创建实时处理流程。操作步骤如下: +### `after_processing_move_container` {#after_processing_move_container} -1. 使用该引擎创建一个表,用于从 S3 指定路径消费数据,并将其视为数据流。 -2. 创建一个具有所需结构的目标表。 -3. 创建一个物化视图,将引擎中的数据进行转换并写入之前创建的表中。 +当目标是另一个 Azure 容器时,用于指定成功处理后文件要移动到的容器名称。 -当 `MATERIALIZED VIEW` 关联到引擎后,它会在后台开始收集数据。 +可能的取值: -示例: +* 字符串。 + +默认值:空字符串。 + +示例: + +```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} + +`SELECT` 对于流式导入并不是特别有用(除非用于调试),因为每个文件只能被导入一次。更实际的做法是使用[物化视图](../../../sql-reference/statements/create/view.md)来创建实时管道。为此: + +1. 使用该引擎创建一个从 S3 中指定路径消费数据的表,并将其视为数据流。 +2. 创建一个具有所需结构的表。 +3. 创建一个物化视图,将数据从该引擎转换后写入先前创建的表中。 + +当 `MATERIALIZED VIEW` 与该引擎关联后,它会开始在后台收集数据。 + +示例: ```sql CREATE TABLE azure_queue_engine_table (key UInt64, data String) @@ -79,34 +111,32 @@ CREATE MATERIALIZED VIEW consumer TO stats SELECT * FROM stats ORDER BY key; ``` - ## 虚拟列 {#virtual-columns} -- `_path` — 文件的路径。 -- `_file` — 文件的名称。 +* `_path` — 文件路径。 +* `_file` — 文件名。 有关虚拟列的更多信息,请参阅[此处](../../../engines/table-engines/index.md#table_engines-virtual_columns)。 +## 自省 {#introspection} -## 内省 {#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 +153,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 +163,7 @@ COMMENT '包含 S3Queue 引擎处理文件信息的日志条目。' ``` -示例: +示例: ```sql SELECT * @@ -141,7 +171,7 @@ FROM system.azure_queue_log LIMIT 1 FORMAT Vertical -Row 1: +第 1 行: ────── hostname: clickhouse event_date: 2024-12-16 @@ -156,6 +186,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/azureBlobStorage.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md index 9c926ad8c47..921c6d5d753 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/azureBlobStorage.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# AzureBlobStorage 表引擎 +# AzureBlobStorage 表引擎 {#azureblobstorage-table-engine} 该引擎用于与 [Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs) 生态系统集成。 -## 创建表 +## 创建表 {#create-table} ```sql CREATE TABLE azure_blob_storage_table (name String, value UInt32) @@ -24,7 +24,7 @@ CREATE TABLE azure_blob_storage_table (name String, value UInt32) [SETTINGS ...] ``` -### 引擎参数 +### 引擎参数 {#engine-parameters} * `endpoint` — 带有容器和前缀的 Azure Blob Storage 端点 URL。如所用的认证方式需要,还可以选择在其中包含 account_name。(`http://azurite1:{port}/[account_name]{container_name}/{data_prefix}`)或者也可以通过 `storage_account_url`、`account_name` 和 `container` 单独提供这些参数。要指定前缀时,应使用 `endpoint`。 * `endpoint_contains_account_name` - 此标志用于指定 `endpoint` 是否包含 `account_name`,因为只有某些认证方式才需要它。(默认值:true) @@ -70,7 +70,7 @@ SELECT * FROM test_table; -## 身份验证 +## 身份验证 {#authentication} 当前有 3 种身份验证方式: @@ -78,7 +78,7 @@ SELECT * FROM test_table; * `SAS Token` - 可以通过提供 `endpoint`、`connection_string` 或 `storage_account_url` 进行身份验证。通过 URL 中是否包含 `?` 来识别。示例参见 [azureBlobStorage](/sql-reference/table-functions/azureBlobStorage#using-shared-access-signatures-sas-sas-tokens)。 * `Workload Identity` - 可以通过提供 `endpoint` 或 `storage_account_url` 进行身份验证。如果在配置中设置了 `use_workload_identity` 参数,则会使用 [workload identity](https://github.com/Azure/azure-sdk-for-cpp/tree/main/sdk/identity/azure-identity#authenticate-azure-hosted-applications) 进行身份验证。 -### 数据缓存 +### 数据缓存 {#data-cache} `Azure` 表引擎支持在本地磁盘上进行数据缓存。 有关文件系统缓存配置选项及用法,请参见本[节](/operations/storing-data.md/#using-local-cache)。 @@ -107,13 +107,13 @@ SETTINGS filesystem_cache_name = 'cache_for_azure', enable_filesystem_cache = 1; 2. 复用 ClickHouse `storage_configuration` 部分中的缓存配置(以及相应的缓存存储),[见此处](/operations/storing-data.md/#using-local-cache) -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` —— 可选。在大多数情况下不需要分区键;即便需要,一般也不需要比按月更细的分区键。分区不会加速查询(与 ORDER BY 表达式相反)。切勿使用粒度过细的分区。不要按客户端标识符或名称对数据进行分区(相反,应将客户端标识符或名称作为 ORDER BY 表达式中的第一列)。 对于按月分区,使用 `toYYYYMM(date_column)` 表达式,其中 `date_column` 是类型为 [Date](/sql-reference/data-types/date.md) 的日期列。这里的分区名称采用 `"YYYYMM"` 格式。 -#### 分区策略 +#### 分区策略 {#partition-strategy} `WILDCARD`(默认):将文件路径中的 `{_partition_id}` 通配符替换为实际的分区键。不支持读取。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md index 6161fc4d8e3..905c5c82966 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/deltalake.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Delta Lake 表引擎 +# Delta Lake 表引擎 {#deltalake-table-engine} 此引擎与 Amazon S3 中现有的 [Delta Lake](https://github.com/delta-io/delta) 表进行只读集成。 -## 创建表 +## 创建表 {#create-table} 请注意,Delta Lake 表必须已存在于 S3 中,并且该命令不支持通过 DDL 参数创建新表。 @@ -55,7 +55,7 @@ CREATE TABLE deltalake ENGINE=DeltaLake('http://mars-doc-test.s3.amazonaws.com/c CREATE TABLE deltalake ENGINE=DeltaLake(deltalake_conf, filename = 'test_table') ``` -### 数据缓存 +### 数据缓存 {#data-cache} `Iceberg` 表引擎和表函数支持与 `S3`、`AzureBlobStorage`、`HDFS` 存储相同的数据缓存机制。请参阅[此处](../../../engines/table-engines/integrations/s3.md#data-cache)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md index 70404eb6bd6..ee75edbaaeb 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/embedded-rocksdb.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; - -# EmbeddedRocksDB 表引擎 +# EmbeddedRocksDB 表引擎 {#embeddedrocksdb-table-engine} 该引擎用于将 ClickHouse 与 [RocksDB](http://rocksdb.org/) 集成。 - - -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,8 +56,7 @@ ENGINE = EmbeddedRocksDB PRIMARY KEY key ``` - -## 指标 +## 指标 {#metrics} 还有一个 `system.rocksdb` 表,用于公开 RocksDB 的统计信息: @@ -76,8 +72,7 @@ FROM system.rocksdb └───────────────────────────┴───────┘ ``` - -## 配置 +## 配置 {#configuration} 你也可以通过配置更改任何 [RocksDB 选项](https://github.com/facebook/rocksdb/wiki/Option-String-and-Option-Map): @@ -105,10 +100,9 @@ FROM system.rocksdb 默认情况下,“trivial approximate count” 优化是关闭的,这可能会影响 `count()` 查询的性能。要启用此优化,请将 `optimize_trivial_approximate_count_query` 设置为 `1`。此外,该设置还会影响 EmbeddedRocksDB 引擎的 `system.tables`,启用后可以看到 `total_rows` 和 `total_bytes` 的近似值。 +## 支持的操作 {#supported-operations} -## 支持的操作 - -### 插入 +### 插入 {#inserts} 当向 `EmbeddedRocksDB` 插入新行时,如果键已存在,则会更新对应的值;否则会创建一个新的键。 @@ -118,7 +112,7 @@ FROM system.rocksdb INSERT INTO test VALUES ('some key', 1, 'value', 3.2); ``` -### 删除 +### 删除 {#deletes} 可以使用 `DELETE` 查询或 `TRUNCATE` 语句删除行。 @@ -134,7 +128,7 @@ ALTER TABLE test DELETE WHERE key LIKE 'some%' AND v1 > 1; TRUNCATE TABLE test; ``` -### 更新 +### 更新 {#updates} 可以使用 `ALTER TABLE` 语句来更新值。主键不允许更新。 @@ -142,7 +136,7 @@ TRUNCATE TABLE test; ALTER TABLE test UPDATE v1 = v1 * 10 + 2 WHERE key LIKE 'some%' AND v3 > 3.1; ``` -### 联接 +### 联接 {#joins} 在 EmbeddedRocksDB 表上支持一种特殊的 `direct` 联接。 这种 `direct` 联接避免在内存中构建哈希表,而是直接从 EmbeddedRocksDB 访问数据。 @@ -159,9 +153,9 @@ SET join_algorithm = 'direct, hash' 当 `join_algorithm` 设置为 `direct, hash` 时,将在可行时优先使用 direct 联接,否则使用 hash 联接。 ::: -#### 示例 +#### 示例 {#example} -##### 创建并填充 EmbeddedRocksDB 表 +##### 创建并填充 EmbeddedRocksDB 表 {#create-and-populate-an-embeddedrocksdb-table} ```sql CREATE TABLE rdb @@ -183,7 +177,7 @@ INSERT INTO rdb FROM numbers_mt(10); ``` -##### 创建并填充一个表,以便与 `rdb` 表进行 JOIN +##### 创建并填充一个表,以便与 `rdb` 表进行 JOIN {#create-and-populate-a-table-to-join-with-table-rdb} ```sql CREATE TABLE t2 @@ -198,13 +192,13 @@ INSERT INTO t2 SELECT number AS k FROM numbers_mt(10) ``` -##### 将 join 算法设为 `direct` +##### 将 join 算法设为 `direct` {#set-the-join-algorithm-to-direct} ```sql SET join_algorithm = 'direct' ``` -##### INNER JOIN(内连接) +##### INNER JOIN(内连接) {#an-inner-join} ```sql SELECT * @@ -229,7 +223,7 @@ ORDER BY key ASC └─────┴─────────┴────────┴────────┘ ``` -### 关于 JOIN 的更多信息 +### 关于 JOIN 的更多信息 {#more-information-on-joins} * [`join_algorithm` 设置](/operations/settings/settings.md#join_algorithm) * [JOIN 子句](/sql-reference/statements/select/join.md) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md index 62515dbbc71..8b9c5bf2fbc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hdfs.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# HDFS 表引擎 +# HDFS 表引擎 {#hdfs-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 用法 +## 用法 {#usage} ```sql ENGINE = HDFS(URI, format) @@ -35,7 +35,7 @@ ENGINE = HDFS(URI, format) [Formats](/sql-reference/formats#formats-overview) 部分。 * [PARTITION BY expr] -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — 可选。在大多数情况下不需要分区键,即使需要,一般也不需要比“按月”更细的分区键。分区并不会加速查询(与 ORDER BY 表达式不同)。切勿使用过于细粒度的分区。不要按客户标识符或名称对数据进行分区(相反,应将客户标识符或名称设为 ORDER BY 表达式中的第一列)。 @@ -69,7 +69,7 @@ SELECT * FROM hdfs_engine_table LIMIT 2 ``` -## 实现细节 +## 实现细节 {#implementation-details} * 读写操作可以并行进行。 * 不支持: @@ -137,7 +137,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV') ``` -## 配置 +## 配置 {#configuration} 与 GraphiteMergeTree 类似,HDFS 引擎支持通过 ClickHouse 配置文件进行扩展配置。可以使用两个配置项:全局级(`hdfs`)和用户级(`hdfs_*`)。系统会先应用全局配置,然后再应用用户级配置(如果存在)。 @@ -155,9 +155,9 @@ CREATE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9 ``` -### 配置选项 +### 配置选项 {#configuration-options} -#### libhdfs3 支持的选项 +#### libhdfs3 支持的选项 {#supported-by-libhdfs3} | **参数** | **默认值** | @@ -230,7 +230,7 @@ datanode 通信不会通过 SASL 进行安全保护(`HADOOP_SECURE_DN_USER` 如果指定了 `hadoop_kerberos_keytab`、`hadoop_kerberos_principal` 或 `hadoop_security_kerberos_ticket_cache_path`,则会使用 Kerberos 身份验证。在这种情况下,`hadoop_kerberos_keytab` 和 `hadoop_kerberos_principal` 是必需的。 -## HDFS Namenode HA 支持 +## HDFS Namenode HA 支持 {#namenode-ha} libhdfs3 支持 HDFS Namenode 高可用(HA)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md index 16f4c300237..8ae1ceb588b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hive.md @@ -9,22 +9,19 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# Hive 表引擎 {#hive-table-engine} -# Hive 表引擎 - - + Hive 引擎允许对 HDFS 中的 Hive 表执行 `SELECT` 查询。目前支持的输入格式如下: -- Text:仅支持除 `binary` 外的简单标量列类型 - -- ORC:支持除 `char` 外的简单标量列类型;复杂类型仅支持 `array` 等 - -- Parquet:支持所有简单标量列类型;复杂类型仅支持 `array` 等 +* Text:仅支持除 `binary` 外的简单标量列类型 +* ORC:支持除 `char` 外的简单标量列类型;复杂类型仅支持 `array` 等 +* Parquet:支持所有简单标量列类型;复杂类型仅支持 `array` 等 -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -52,10 +49,9 @@ PARTITION BY expr * `table` — 远程表名称。 +## 使用示例 {#usage-example} -## 使用示例 - -### 如何在 HDFS 文件系统中使用本地缓存 +### 如何在 HDFS 文件系统中使用本地缓存 {#how-to-use-local-cache-for-hdfs-filesystem} 我们强烈建议为远程文件系统启用本地缓存。基准测试结果表明,启用缓存后速度几乎提升 2 倍。 @@ -75,9 +71,9 @@ PARTITION BY expr * limit_size: 必需。本地缓存文件的最大大小(以字节为单位)。 * bytes_read_before_flush: 控制从远程文件系统下载文件时,在刷新到本地文件系统之前读取的字节数。默认值为 1MB。 -### 使用 ORC 输入格式查询 Hive 表 +### 使用 ORC 输入格式查询 Hive 表 {#query-hive-table-with-orc-input-format} -#### 在 Hive 中创建表 +#### 在 Hive 中创建表 {#create-table-in-hive} ```text hive > CREATE TABLE `test`.`test_orc`( @@ -125,8 +121,7 @@ OK Time taken: 0.295 seconds, Fetched: 1 row(s) ``` -#### 在 ClickHouse 中创建表 - +#### 在 ClickHouse 中创建表 {#create-table-in-clickhouse} ClickHouse 中的一个表,用于从上面创建的 Hive 表中读取数据: @@ -199,9 +194,9 @@ day: 2021-09-18 1 rows in set. Elapsed: 0.078 sec. ``` -### 使用 Parquet 输入格式查询 Hive 表 +### 使用 Parquet 输入格式查询 Hive 表 {#query-hive-table-with-parquet-input-format} -#### 在 Hive 中创建表 +#### 在 Hive 中创建表 {#create-table-in-hive-1} ```text hive > @@ -241,7 +236,6 @@ OK Time taken: 0.51 seconds ``` - hive > insert into test.test_parquet partition(day='2021-09-18') select 1, 2, 3, 4, 5, 6.11, 7.22, 8.333, current_timestamp(), current_date(), 'hello world', 'hello world', 'hello world', true, 'hello world', array(1, 2, 3), array('hello world', 'hello world'), array(float(1.1), float(1.2)), array(array(1, 2), array(3, 4)), array(array('a', 'b'), array('c', 'd')), array(array(float(1.11), float(2.22)), array(float(3.33), float(4.44))); OK 耗时:36.025 秒 @@ -329,7 +323,6 @@ day: 2021-09-18 #### 在 Hive 中创建表 - ```text hive > CREATE TABLE `test`.`test_text`( @@ -377,7 +370,7 @@ OK Time taken: 0.624 seconds, Fetched: 1 row(s) ``` -#### 在 ClickHouse 中创建表 +#### 在 ClickHouse 中创建表 {#create-table-in-hive-2} 在 ClickHouse 中创建一个表,用于从上述创建的 Hive 表中读取数据: @@ -416,7 +409,6 @@ SETTINGS input_format_skip_unknown_fields = 1, input_format_with_names_use_heade 查询 ID: 55b79d35-56de-45b9-8be6-57282fbf1f44 ``` - 第 1 行: ────── f_tinyint: 1 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md index db538335be8..83946c9813f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/hudi.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# Hudi 表引擎 +# Hudi 表引擎 {#hudi-table-engine} 该引擎提供与 Amazon S3 中现有 Apache [Hudi](https://hudi.apache.org/) 表的只读方式集成。 -## 创建表 +## 创建表 {#create-table} 请注意,S3 中必须已经存在该 Hudi 表,此命令不支持通过 DDL 参数创建新表。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md index 4be8b5b86c9..7fa51955ff2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/iceberg.md @@ -23,7 +23,7 @@ Iceberg 表引擎是可用的,但可能存在一些限制。ClickHouse 最初 -## 创建表 +## 创建表 {#create-table} 请注意,Iceberg 表必须已经存在于存储中,此命令不接受用于创建新表的 DDL 参数。 @@ -42,14 +42,14 @@ CREATE TABLE iceberg_table_local ``` -## 引擎参数 +## 引擎参数 {#engine-arguments} 参数说明与引擎 `S3`、`AzureBlobStorage`、`HDFS` 和 `File` 中参数的说明相同。\ `format` 表示 Iceberg 表中数据文件的格式。 可以使用 [Named Collections](../../../operations/named-collections.md) 来指定引擎参数。 -### 示例 +### 示例 {#example} ```sql CREATE TABLE iceberg_table ENGINE=IcebergS3('http://test.s3.amazonaws.com/clickhouse-bucket/test_table', 'test', 'test') @@ -105,7 +105,7 @@ ClickHouse 支持 Iceberg 表的时间旅行功能,允许您在指定的时间 -## 处理包含已删除行的表 +## 处理包含已删除行的表 {#deleted-rows} 目前,仅支持带有 [position deletes](https://iceberg.apache.org/spec/#position-delete-files) 的 Iceberg 表。 @@ -114,7 +114,7 @@ ClickHouse 支持 Iceberg 表的时间旅行功能,允许您在指定的时间 * [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files)(等值删除) * [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors)(在 v3 中引入的删除向量) -### 基本用法 +### 基本用法 {#basic-usage} ```sql SELECT * FROM example_table ORDER BY 1 @@ -128,7 +128,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 注意:你不能在同一个查询中同时指定 `iceberg_timestamp_ms` 和 `iceberg_snapshot_id` 参数。 -### 重要注意事项 +### 重要注意事项 {#important-considerations} * **快照** 通常在以下情况下创建: * 向表写入新数据时 @@ -136,11 +136,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * **模式变更通常不会创建快照** —— 这会在对经过模式演进的表使用 time travel(时间穿梭查询)时产生一些需要注意的重要行为。 -### 示例场景 +### 示例场景 {#example-scenarios} 所有场景都使用 Spark 编写,因为 ClickHouse(CH)目前尚不支持向 Iceberg 表写入数据。 -#### 场景 1:仅发生模式变更但没有新的快照 +#### 场景 1:仅发生模式变更但没有新的快照 {#scenario-1} 考虑以下一系列操作: @@ -200,7 +200,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * 在 ts1 和 ts2:只显示原来的两列 * 在 ts3:显示全部三列,且第一行的 price 为 NULL -#### 场景 2:历史表结构与当前表结构的差异 +#### 场景 2:历史表结构与当前表结构的差异 {#scenario-2} 在当前时刻执行的时间旅行查询,可能会显示与当前表不同的表结构: @@ -243,7 +243,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 这是因为 `ALTER TABLE` 不会创建新的快照;对于当前表,Spark 会从最新的元数据文件中读取 `schema_id` 的值,而不是从快照中读取。 -#### 场景 3:历史与当前表结构差异 +#### 场景 3:历史与当前表结构差异 {#scenario-3} 第二点是在进行时间旅行时,你无法获取表在尚未写入任何数据之前的状态: @@ -265,11 +265,11 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 在 ClickHouse 中,其行为与 Spark 保持一致。你可以在概念上将 Spark 的 Select 查询替换为 ClickHouse 的 Select 查询,它们的工作方式是相同的。 -## 元数据文件解析 +## 元数据文件解析 {#metadata-file-resolution} 在 ClickHouse 中使用 `Iceberg` 表引擎时,系统需要定位描述 Iceberg 表结构的正确 metadata.json 文件。下面是该解析过程的具体流程: -### 候选文件搜索 +### 候选文件搜索 {#candidate-search} 1. **直接路径指定**: @@ -286,7 +286,7 @@ SETTINGS iceberg_snapshot_id = 3547395809148285433 * 如果上述设置都未提供,则 `metadata` 目录中的所有 `.metadata.json` 文件都将作为候选。 -### 选择最新的文件 +### 选择最新的文件 {#most-recent-file} 根据上述规则确定候选文件后,系统会判断其中哪个是最新的文件: 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..dde5a751dc6 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 @@ -7,48 +7,45 @@ title: '用于集成的表引擎' doc_type: 'reference' --- +# 用于集成的表引擎 {#table-engines-for-integrations} +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。 + 它会根据 YAML front matter 中的 slug、description、title 字段生成。 - 如发现错误,请直接编辑相应页面的 YAML front matter。 + 如果你发现错误,请直接编辑各页面本身的 YML front matter。 */ } - {/*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 对远程数据集进行查询。 | +| 页面 | 说明 | +| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| [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 特有的功能。 | +| [AzureQueue 表引擎](/engines/table-engines/integrations/azure-queue) | 此引擎实现了与 Azure Blob Storage 生态系统的集成,支持数据流式导入。 | +| [S3Queue 表引擎](/engines/table-engines/integrations/s3queue) | 此引擎可与 Amazon S3 生态系统集成,并支持流式导入。类似于 Kafka 和 RabbitMQ 引擎,但提供 S3 特有的功能。 | +| [SQLite 表引擎](/engines/table-engines/integrations/sqlite) | 该引擎支持向 SQLite 导入数据并从 SQLite 导出数据,并支持在 ClickHouse 中直接查询 SQLite 表。 | +| [YTsaurus 表引擎](/engines/table-engines/integrations/ytsaurus) | 一种支持从 YTsaurus 集群导入数据的表引擎。 | +| [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/jdbc.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md index 2cd604d8d9d..060465f47f1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/jdbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# JDBC 表引擎 +# JDBC 表引擎 {#jdbc-table-engine} @@ -27,7 +27,7 @@ ClickHouse 推荐使用 ClickHouse 内置的表函数,作为临时(即席) -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -51,7 +51,7 @@ ENGINE = JDBC(数据源名称, 外部数据库, 外部表) * 这些参数也可以通过 [命名集合](operations/named-collections.md) 传递。 -## 使用示例 +## 使用示例 {#usage-example} 使用 MySQL 的控制台客户端直接连接到服务器来创建一张表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md index 48a538a1114..9b39adedf9f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/kafka.md @@ -11,7 +11,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# Kafka 表引擎 +# Kafka 表引擎 {#kafka-table-engine} :::tip 如果您在使用 ClickHouse Cloud,我们推荐改用 [ClickPipes](/integrations/clickpipes)。ClickPipes 原生支持私有网络连接,可分别扩展摄取层和集群资源,并为将 Kafka 流式数据摄取到 ClickHouse 提供完善的监控能力。 @@ -21,7 +21,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; - 构建具备容错能力的存储。 - 在数据流到达时进行处理。 -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -135,7 +135,7 @@ Kafka 表引擎不支持包含[默认值](/sql-reference/statements/create/table ::: -## 描述 +## 描述 {#description} 已投递的消息会被自动跟踪,因此每个组中的每条消息只会被计数一次。如果你希望获取同一批数据两次,请创建一个使用不同 group 名称的表副本。 @@ -186,7 +186,7 @@ Group 十分灵活,并且会在集群中同步。例如,如果你在一个 如果你想通过 `ALTER` 语句更改目标表,建议先禁用该物化视图,以避免目标表与视图产出的数据之间出现不一致。 -## 配置 +## 配置 {#configuration} 与 GraphiteMergeTree 类似,Kafka 引擎支持通过 ClickHouse 配置文件进行扩展配置。可以使用两个配置键:全局配置(位于 `` 下)和主题级配置(位于 `` 下)。会先应用全局配置,然后再应用主题级配置(如果存在)。 @@ -233,7 +233,7 @@ Group 十分灵活,并且会在集群中同步。例如,如果你在一个 有关可用配置选项的列表,请参阅 [librdkafka 配置参考](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md)。在 ClickHouse 配置中,应使用下划线(`_`)而不是点号。例如,`check.crcs=true` 将写作 `true`。 -### Kerberos 支持 +### Kerberos 支持 {#kafka-kerberos-support} 要与支持 Kerberos 的 Kafka 配合使用,请添加值为 `sasl_plaintext` 的 `security_protocol` 子元素。如果操作系统已经获取并缓存了 Kerberos 票据授予票(TGT,ticket-granting ticket),这就足够了。 ClickHouse 可以使用 keytab 文件维护 Kerberos 凭证。请考虑配置 `sasl_kerberos_service_name`、`sasl_kerberos_keytab` 和 `sasl_kerberos_principal` 子元素。 @@ -276,7 +276,7 @@ Kafka 引擎支持 ClickHouse 所支持的所有[格式](../../../interfaces/for - 对于行级格式,可以通过设置 `kafka_max_rows_per_message` 来控制单个 Kafka 消息中的行数。 - 对于块级格式,我们无法将一个块再拆分为更小的部分,但可以通过通用设置 [max_block_size](/operations/settings/settings#max_block_size) 来控制单个块中的行数。 -## 在 ClickHouse Keeper 中存储已提交 offset 的引擎 +## 在 ClickHouse Keeper 中存储已提交 offset 的引擎 {#engine-to-store-committed-offsets-in-clickhouse-keeper} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md index b99233a0d7b..b0411bd02ce 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/materialized-postgresql.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# MaterializedPostgreSQL 表引擎 +# MaterializedPostgreSQL 表引擎 {#materializedpostgresql-table-engine} @@ -35,7 +35,7 @@ SET allow_experimental_materialized_postgresql_table=1 如果需要使用多个表,强烈建议使用 [MaterializedPostgreSQL](../../../engines/database-engines/materialized-postgresql.md) 数据库引擎而不是表引擎,并通过 `materialized_postgresql_tables_list` 设置来指定要复制的表(后续也可以添加数据库 `schema`)。在 CPU 占用、连接数以及远程 PostgreSQL 数据库中所占用的复制槽数量方面,这种方式都会更优。 -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE postgresql_db.postgresql_replica (key UInt64, value UInt64) @@ -64,7 +64,7 @@ PRIMARY KEY key; -## 虚拟列 +## 虚拟列 {#virtual-columns} * `_version` — 事务计数器。类型:[UInt64](../../../sql-reference/data-types/int-uint.md)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md index 8615cab3803..246359f7d81 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mongodb.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# MongoDB 表引擎 +# MongoDB 表引擎 {#mongodb-table-engine} MongoDB 引擎是一种只读表引擎,用于从远程 [MongoDB](https://www.mongodb.com/) 集合中读取数据。 @@ -18,7 +18,7 @@ MongoDB 引擎是一种只读表引擎,用于从远程 [MongoDB](https://www.m -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -61,7 +61,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); | `oid_columns` | 以逗号分隔的列名列表,这些列在 WHERE 子句中将被视为 `oid` 类型。默认值为 `_id`。 | -## 类型映射 +## 类型映射 {#types-mappings} | MongoDB | ClickHouse | | ----------------------- | ---------------------------------------- | @@ -78,7 +78,7 @@ ENGINE = MongoDB(uri, collection[, oid_columns]); 如果在 MongoDB 文档中未找到键(例如列名不匹配),将插入默认值,或者在列可为 `NULL` 的情况下插入 `NULL`。 -### OID +### OID {#oid} 如果希望在 WHERE 子句中将某个 `String` 视为 `oid`,只需将该列名作为表引擎的最后一个参数传入。 在按 `_id` 列查询记录时可能需要这样做,因为在 MongoDB 中 `_id` 列默认具有 `oid` 类型。 @@ -132,7 +132,7 @@ SELECT count() FROM sample_oid WHERE another_oid_column = '67bf6cc40000000000ea4 ``` -## 支持的子句 +## 支持的子句 {#supported-clauses} 仅支持包含简单表达式的查询(例如,`WHERE field = ORDER BY field2 LIMIT `)。 此类表达式会被转换为 MongoDB 查询语言并在服务器端执行。 @@ -156,7 +156,7 @@ SELECT * FROM mongo_table WHERE date = '2024-01-01'::Date OR date = toDate('2024 这适用于 `Date`、`Date32`、`DateTime`、`Bool` 和 `UUID` 类型。 -## 使用示例 +## 使用示例 {#usage-example} 假设 MongoDB 中已经加载了 [sample_mflix](https://www.mongodb.com/docs/atlas/sample-data/sample-mflix) 数据集 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md index 5cc47e8d14f..b5a880dccb4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/mysql.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# MySQL 表引擎 +# MySQL 表引擎 {#mysql-table-engine} MySQL 引擎允许对存储在远程 MySQL 服务器上的数据执行 `SELECT` 和 `INSERT` 查询。 -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -67,7 +67,7 @@ CREATE TABLE test_replicas (id UInt32, name String, age UInt32, money UInt32) EN ``` -## 使用示例 +## 使用示例 {#usage-example} 在 MySQL 中创建表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md index f76f3426384..e2695a21f05 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/nats.md @@ -20,7 +20,7 @@ doc_type: 'guide' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -133,7 +133,7 @@ SSL 连接: ``` -## 描述 +## 描述 {#description} `SELECT` 对于读取消息(除调试用途外)并不是特别有用,因为每条消息只能被读取一次。更实用的方式是使用[物化视图](../../../sql-reference/statements/create/view.md)来创建实时处理流水线。为此,您需要: @@ -198,7 +198,7 @@ NATS 引擎支持 ClickHouse 所支持的所有[格式](../../../interfaces/form -## 使用 JetStream +## 使用 JetStream {#using-jetstream} 在将 NATS 引擎与 NATS JetStream 配合使用之前,必须先创建一个 NATS 流(stream)和一个持久拉取型消费者(durable pull consumer)。为此,可以使用 [NATS CLI](https://github.com/nats-io/natscli) 包中的 `nats` 工具,例如: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md index 385aa2c0f6b..9451ffbd470 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/odbc.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# ODBC 表引擎 +# ODBC 表引擎 {#odbc-table-engine} @@ -22,7 +22,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -51,7 +51,7 @@ ENGINE = ODBC(数据源, external_database, external_table) 这些参数也可以通过[命名集合](operations/named-collections.md)传递。 -## 使用示例 +## 使用示例 {#usage-example} **通过 ODBC 从本地 MySQL 实例中检索数据** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md index 4db7dc6ad92..316e8de067e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/postgresql.md @@ -9,7 +9,7 @@ doc_type: '指南' -# PostgreSQL 表引擎 +# PostgreSQL 表引擎 {#postgresql-table-engine} PostgreSQL 引擎允许对存储在远程 PostgreSQL 服务器上的数据执行 `SELECT` 和 `INSERT` 查询。 @@ -23,7 +23,7 @@ PostgreSQL 引擎允许对存储在远程 PostgreSQL 服务器上的数据执行 -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -73,7 +73,7 @@ SELECT * FROM postgresql(postgres_creds, table='table1'); ``` -## 实现细节 +## 实现细节 {#implementation-details} PostgreSQL 端的 `SELECT` 查询在只读 PostgreSQL 事务中以 `COPY (SELECT ...) TO STDOUT` 的形式运行,每个 `SELECT` 查询结束后都会提交事务。 @@ -121,9 +121,9 @@ PostgreSQL 字典源支持副本优先级。映射中的数字越大,优先级 ``` -## 使用示例 +## 使用示例 {#usage-example} -### PostgreSQL 中的表 +### PostgreSQL 中的表 {#table-in-postgresql} ```text postgres=# CREATE TABLE "public"."test" ( @@ -146,7 +146,7 @@ postgresql> SELECT * FROM test; (1 row) ``` -### 在 ClickHouse 中创建表并连接到上文创建的 PostgreSQL 表 +### 在 ClickHouse 中创建表并连接到上文创建的 PostgreSQL 表 {#creating-table-in-clickhouse-and-connecting-to--postgresql-table-created-above} 此示例使用 [PostgreSQL 表引擎](/engines/table-engines/integrations/postgresql.md),将 ClickHouse 表连接到 PostgreSQL 表,并在 PostgreSQL 数据库上同时执行 SELECT 和 INSERT 查询: @@ -160,7 +160,7 @@ CREATE TABLE default.postgresql_table ENGINE = PostgreSQL('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### 使用 SELECT 查询将 PostgreSQL 表中的初始数据插入到 ClickHouse 表中 +### 使用 SELECT 查询将 PostgreSQL 表中的初始数据插入到 ClickHouse 表中 {#inserting-initial-data-from-postgresql-table-into-clickhouse-table-using-a-select-query} [postgresql table function](/sql-reference/table-functions/postgresql.md) 会将数据从 PostgreSQL 复制到 ClickHouse,通常用于在 ClickHouse 而非 PostgreSQL 中执行查询或分析,从而提升数据的查询性能,也可用于将数据从 PostgreSQL 迁移到 ClickHouse。由于我们将数据从 PostgreSQL 复制到 ClickHouse,因此会在 ClickHouse 中使用 MergeTree 表引擎,并将其命名为 postgresql_copy: @@ -180,7 +180,7 @@ INSERT INTO default.postgresql_copy SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postgres_user', 'postgres_password'); ``` -### 将 PostgreSQL 表中的增量数据插入到 ClickHouse 表中 +### 将 PostgreSQL 表中的增量数据插入到 ClickHouse 表中 {#inserting-incremental-data-from-postgresql-table-into-clickhouse-table} 如果在初始插入之后,随后需要在 PostgreSQL 表和 ClickHouse 表之间执行持续同步,可以在 ClickHouse 中使用 WHERE 子句,根据时间戳或唯一序列 ID,仅插入新增到 PostgreSQL 的数据。 @@ -198,7 +198,7 @@ SELECT * FROM postgresql('localhost:5432', 'public', 'test', 'postges_user', 'po WHERE int_id > maxIntID; ``` -### 从生成的 ClickHouse 表中查询数据 +### 从生成的 ClickHouse 表中查询数据 {#selecting-data-from-the-resulting-clickhouse-table} ```sql SELECT * FROM postgresql_copy WHERE str IN ('test'); @@ -210,7 +210,7 @@ SELECT * FROM postgresql_copy WHERE str IN ('test'); └────────────────┴──────┴────────┘ ``` -### 使用非默认模式 +### 使用非默认模式 {#using-non-default-schema} ```text postgres=# CREATE SCHEMA "nice.schema"; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md index e122b83eb69..73185624a42 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/rabbitmq.md @@ -9,7 +9,7 @@ doc_type: 'guide' -# RabbitMQ 表引擎 +# RabbitMQ 表引擎 {#rabbitmq-table-engine} 该引擎用于将 ClickHouse 与 [RabbitMQ](https://www.rabbitmq.com) 集成。 @@ -20,7 +20,7 @@ doc_type: 'guide' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -131,7 +131,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ``` -## 描述 +## 描述 {#description} `SELECT` 对于读取消息并不是特别有用(除非用于调试),因为每条消息只能被读取一次。更实用的方式是使用[物化视图](../../../sql-reference/statements/create/view.md)创建实时处理流程。为此: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md index 2aa1b175082..63105254d6a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/redis.md @@ -9,13 +9,13 @@ doc_type: 'guide' -# Redis 表引擎 +# Redis 表引擎 {#redis-table-engine} 该引擎允许将 ClickHouse 与 [Redis](https://redis.io/) 集成。由于 Redis 采用键值(KV)模型,我们强烈建议仅执行点查询,例如使用 `where k = xx` 或 `where k in (xx, xx)`。 -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -47,7 +47,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ::: -## 使用示例 +## 使用示例 {#usage-example} 在 ClickHouse 中使用 `Redis` 引擎和基本参数创建一张表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md index 18f17438425..a9452e685d0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/s3.md @@ -9,13 +9,13 @@ doc_type: 'reference' -# S3 表引擎 +# S3 表引擎 {#s3-table-engine} 该引擎提供与 [Amazon S3](https://aws.amazon.com/s3/) 生态系统的集成能力。此引擎类似于 [HDFS](/engines/table-engines/integrations/hdfs) 引擎,但提供了 S3 专用功能。 -## 示例 +## 示例 {#example} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -35,7 +35,7 @@ SELECT * FROM s3_engine_table LIMIT 2; ``` -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE s3_engine_table (name String, value UInt32) @@ -44,7 +44,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) [SETTINGS ...] ``` -### 引擎参数 +### 引擎参数 {#parameters} * `path` — 带有文件路径的存储桶 URL。在只读模式下支持以下通配符:`*`、`**`、`?`、`{abc,def}` 和 `{N..M}`,其中 `N`、`M` 为数字,`'abc'`、`'def'` 为字符串。更多信息参见[下文](#wildcards-in-path)。 * `NOSIGN` - 如果在凭证位置提供此关键字,所有请求都不会被签名。 @@ -55,7 +55,7 @@ CREATE TABLE s3_engine_table (name String, value UInt32) * `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/) 存储类别。 -### 数据缓存 +### 数据缓存 {#data-cache} `S3` 表引擎支持在本地磁盘上进行数据缓存。 有关文件系统缓存配置选项和使用方法,请参见本[节](/operations/storing-data.md/#using-local-cache)。 @@ -86,13 +86,13 @@ SETTINGS filesystem_cache_name = 'cache_for_s3', enable_filesystem_cache = 1; 2. 复用 ClickHouse 中 `storage_configuration` 部分的缓存配置(以及相应的缓存存储),[如本节所述](/operations/storing-data.md/#using-local-cache) -### PARTITION BY +### PARTITION BY {#partition-by} `PARTITION BY` — 可选。大多数情况下您不需要分区键,即便需要,一般也不需要比“按月”更细粒度的分区键。分区并不会加快查询速度(与 ORDER BY 表达式相反)。绝不要使用粒度过细的分区。不要按客户端标识符或名称对数据进行分区(而应将客户端标识符或名称设置为 ORDER BY 表达式中的第一列)。 对于按月分区,使用 `toYYYYMM(date_column)` 表达式,其中 `date_column` 是类型为 [Date](/sql-reference/data-types/date.md) 的日期列。此时的分区名称采用 `"YYYYMM"` 格式。 -#### 分区策略 +#### 分区策略 {#partition-strategy} `WILDCARD`(默认):将文件路径中的 `{_partition_id}` 通配符替换为实际的分区键。不支持读取操作。 @@ -139,7 +139,7 @@ arthur :) select _path, * from t_03363_parquet; └────────────────────────────────────────────────────────────────────────────┴──────┴─────────┴─────────┘ ``` -### 查询分区数据 +### 查询分区数据 {#querying-partitioned-data} 本示例使用了集成 ClickHouse 和 MinIO 的 [docker compose 配置示例](https://github.com/ClickHouse/examples/tree/5fdc6ff72f4e5137e23ea075c88d3f44b0202490/docker-compose-recipes/recipes/ch-and-minio-S3)。你只需替换 endpoint 和认证参数即可在 S3 上复现相同的查询。 @@ -156,7 +156,7 @@ Cloud)。由于 ClickHouse 数据集通常非常庞大,且网络可靠性有 因此将数据集拆分为多个子集进行传输是合理的做法,这也正是进行分区写入的原因。 ::: -#### 创建表 +#### 创建表 {#create-the-table} ```sql CREATE TABLE p @@ -174,13 +174,13 @@ ENGINE = S3( PARTITION BY column3 ``` -#### 插入数据 +#### 插入数据 {#insert-data} ```sql INSERT INTO p VALUES (1, 2, 3), (3, 2, 1), (78, 43, 45) ``` -#### 查询分区 3 +#### 查询分区 3 {#select-from-partition-3} :::tip 此查询使用 S3 表函数。 @@ -197,7 +197,7 @@ FROM s3('http://minio:10000/clickhouse//test_3.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### 从分区 1 查询数据 +#### 从分区 1 查询数据 {#select-from-partition-1} ```sql SELECT * @@ -210,7 +210,7 @@ FROM s3('http://minio:10000/clickhouse//test_1.csv', 'minioadmin', 'minioadminpa └────┴────┴────┘ ``` -#### 从分区 45 中查询数据 +#### 从分区 45 中查询数据 {#select-from-partition-45} ```sql SELECT * @@ -223,7 +223,7 @@ FROM s3('http://minio:10000/clickhouse//test_45.csv', 'minioadmin', 'minioadminp └────┴────┴────┘ ``` -#### 限制 +#### 限制 {#limitation} 你可能很自然地会尝试执行 `Select * from p`,但如上所述,此查询会失败;请改用前面的查询。 @@ -270,7 +270,7 @@ SELECT * FROM p -## 路径中的通配符 +## 路径中的通配符 {#wildcards-in-path} `path` 参数可以使用类似 bash 的通配符来指定多个文件。要参与处理,文件必须实际存在,并且与整个路径模式完全匹配。文件列表在执行 `SELECT` 时确定(而不是在 `CREATE` 时)。 @@ -358,7 +358,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) -## 基于 endpoint 的设置 +## 基于 endpoint 的设置 {#endpoint-settings} 可以在配置文件中为指定的 endpoint 设置以下配置(通过 URL 的精确前缀进行匹配): @@ -402,7 +402,7 @@ CREATE TABLE table_with_asterisk (name String, value UInt32) ``` -## 使用归档文件 +## 使用归档文件 {#working-with-archives} 假设我们在 S3 上有若干归档文件,其 URI 如下: @@ -428,7 +428,7 @@ TAR ::: -## 访问公共 bucket +## 访问公共 bucket {#accessing-public-buckets} ClickHouse 会尝试从多种不同类型的来源自动获取凭证。 有时,在访问某些公共 bucket 时,这可能会导致问题,从而导致客户端返回 `403` 错误码。 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..690d01860c6 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 @@ -9,14 +9,11 @@ doc_type: 'reference' import ScalePlanFeatureBadge from '@theme/badges/ScalePlanFeatureBadge' +# S3Queue 表引擎 {#s3queue-table-engine} -# S3Queue 表引擎 - -该引擎提供与 [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 表引擎会在后台开始收集数据。 - +该引擎提供与 [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 表引擎会在后台开始收集数据。 ## 创建表 {#creating-a-table} @@ -49,12 +46,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 +62,7 @@ SETTINGS mode = 'unordered'; ``` -使用命名集合: +使用命名集合: ```xml @@ -86,164 +83,256 @@ SETTINGS mode = 'ordered'; ``` - ## 设置 {#settings} -要获取表的配置设置列表,请使用 `system.s3_queue_settings` 表。从 `24.10` 版本开始可用。 +要获取为该表配置的设置列表,请查询 `system.s3_queue_settings` 系统表。自 `24.10` 版本起可用。 + +### Mode {#mode} + +可能的取值: + +* unordered — 在 `unordered` 模式下,所有已处理文件的集合会通过 ZooKeeper 中的持久节点进行跟踪和持久化。 +* ordered — 在 `ordered` 模式下,文件按照字典序进行处理。这意味着如果名为 `BBB` 的文件在某个时间点被处理了,之后又向 bucket 中添加了名为 `AA` 的文件,那么该文件将被忽略。ZooKeeper 中只会存储已成功消费文件中的最大文件名(按字典序),以及那些在加载失败后需要重试的文件名。 + +默认值:在 24.6 之前的版本中默认为 `ordered`。从 24.6 开始不再提供默认值,该设置必须手动指定。对于在更早版本中创建的表,为了兼容性其默认值仍为 `Ordered`。 -### 模式 {#mode} +### `after_processing` {#after_processing} -可能的值: +如何在文件成功处理后进行后续操作。 -- unordered — 在无序模式下,所有已处理文件的集合通过 ZooKeeper 中的持久节点进行跟踪。 -- ordered — 在有序模式下,文件按字典序处理。这意味着如果名为 'BBB' 的文件在某个时刻被处理,之后又向存储桶添加了名为 'AA' 的文件,该文件将被忽略。ZooKeeper 中仅存储成功消费文件的最大名称(按字典序)以及加载失败后将重试的文件名称。 +可能的取值: -默认值:在 24.6 之前的版本中为 `ordered`。从 24.6 开始没有默认值,该设置需要手动指定。对于在早期版本上创建的表,为保持兼容性,默认值将保持为 `Ordered`。 +* keep。 +* delete。 +* move。 +* tag。 -### `after_processing` {#after_processing} +默认值:`keep`。 -成功处理后删除或保留文件。 -可能的值: +`move` 需要额外配置。若在同一 bucket 内移动,必须通过 `after_processing_move_prefix` 提供新的路径前缀。 -- keep。 -- delete。 +移动到另一个 S3 bucket 时,需要通过 `after_processing_move_uri` 提供目标 bucket 的 URI,并通过 `after_processing_move_access_key_id` 和 `after_processing_move_secret_access_key` 提供 S3 凭证。 -默认值:`keep`。 +示例: -### `keeper_path` {#keeper_path} +```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'; +``` -ZooKeeper 中的路径可以指定为表引擎设置,或者可以从全局配置提供的路径和表 UUID 组成默认路径。 -可能的值: +从一个 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} -### `s3queue_loading_retries` {#loading_retries} +在放弃之前,对所请求的后处理操作进行重试的次数。 -重试文件加载最多指定次数。默认情况下不进行重试。 -可能的值: +可能的取值: -- 正整数。 +* 非负整数。 -默认值:`0`。 +默认值:`10`。 -### `s3queue_processing_threads_num` {#processing_threads_num} +### `after_processing_move_access_key_id` {#after_processing_move_access_key_id} -执行处理的线程数。仅适用于 `Unordered` 模式。 +如果目标是另一个 S3 bucket,则该选项为将成功处理的文件移动到目标 S3 bucket 所使用的 Access Key ID。 -默认值:CPU 数量或 16。 +可能的取值: -### `s3queue_parallel_inserts` {#parallel_inserts} +* 字符串。 -默认情况下,`processing_threads_num` 将产生一个 `INSERT`,因此它只会在多个线程中下载文件和解析。 -但这限制了并行性,因此为了获得更好的吞吐量,请使用 `parallel_inserts=true`,这将允许并行插入数据(但请注意,这将导致 MergeTree 系列生成更多的数据部分)。 +默认值:空字符串。 -:::note -`INSERT` 将根据 `max_process*_before_commit` 设置生成。 -::: +### `after_processing_move_prefix` {#after_processing_move_prefix} -默认值:`false`。 +成功处理后用于存放文件的路径前缀。适用于两种情况:在同一 bucket 内移动文件,或移动到另一个 bucket。 -### `s3queue_enable_logging_to_s3queue_log` {#enable_logging_to_s3queue_log} +可能的值: -启用记录到 `system.s3queue_log`。 +* 字符串。 -默认值:`0`。 +默认值:空字符串。 -### `s3queue_polling_min_timeout_ms` {#polling_min_timeout_ms} +### `after_processing_move_secret_access_key` {#after_processing_move_secret_access_key} -指定 ClickHouse 在进行下一次轮询尝试之前等待的最短时间(以毫秒为单位)。 +当目标是另一个 S3 bucket 时,用于将成功处理的文件移动到该目标 bucket 的 Secret Access Key。 -可能的值: +可能的取值: -- 正整数。 +* 字符串。 -默认值:`1000`。 +默认值:空字符串。 -### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} +### `after_processing_move_uri` {#after_processing_move_uri} -定义 ClickHouse 在启动下一次轮询尝试之前等待的最长时间(以毫秒为单位)。 +当目标是另一个 S3 bucket 时,用于存放已成功处理文件的 S3 bucket 的 URI。 -可能的值: +可能的取值: -- 正整数。 +* 字符串。 -默认值:`10000`。 +默认值:空字符串。 -### `s3queue_polling_backoff_ms` {#polling_backoff_ms} +### `after_processing_tag_key` {#after_processing_tag_key} -确定当未找到新文件时添加到上一次轮询间隔的额外等待时间。下一次轮询在上一次间隔与此退避值之和或最大间隔(以较小者为准)之后发生。 +当 `after_processing='tag'` 时,用于给成功处理的文件打标签的标签键。 -可能的值: +可能的取值: -- 正整数。 +* 字符串。 -默认值:`0`。 +默认值:空字符串。 -### `s3queue_tracked_files_limit` {#tracked_files_limit} +### `after_processing_tag_value` {#after_processing_tag_value} -如果使用 'unordered' 模式,允许限制 Zookeeper 节点的数量,对 'ordered' 模式不起作用。 -如果达到限制,最旧的已处理文件将从 ZooKeeper 节点中删除并再次处理。 +当 `after_processing='tag'` 时,为成功处理的文件设置标签时使用的标签值。 -可能的值: +可能的取值: -- 正整数。 +* 字符串。 -默认值:`1000`。 +默认值:空字符串。 -### `s3queue_tracked_file_ttl_sec` {#tracked_file_ttl_sec} +### `keeper_path` {#keeper_path} -在 ZooKeeper 节点中存储已处理文件的最大秒数(默认永久存储),适用于 'unordered' 模式,对 'ordered' 模式不起作用。 -在指定的秒数后,文件将被重新导入。 +ZooKeeper 中的路径可以通过表引擎设置单独指定;如果未指定,则默认路径由全局配置中提供的路径和表的 UUID 组成。 +可能的取值: -可能的值: +* 字符串。 -- 正整数。 +默认值:`/`。 -默认值:`0`。 +### `s3queue_loading_retries` {#loading_retries} -### `s3queue_cleanup_interval_min_ms` {#cleanup_interval_min_ms} +文件加载最多重试指定的次数。默认情况下,不进行重试。 +可能的取值: -适用于 'Ordered' 模式。定义后台任务重新调度间隔的最小边界,该任务负责维护跟踪文件的 TTL 和最大跟踪文件集。 +* 正整数。 -默认值:`10000`。 +默认值:`0`。 -### `s3queue_cleanup_interval_max_ms` {#cleanup_interval_max_ms} +### `s3queue_processing_threads_num` {#processing_threads_num} +用于执行处理的线程数。仅适用于 `Unordered` 模式。 -用于 'Ordered' 模式。定义后台任务重新调度间隔的最大边界值,该任务负责维护已跟踪文件的 TTL 和最大跟踪文件集合。 +默认值:CPU 数量或 16。 -默认值:`30000`。 +### `s3queue_parallel_inserts` {#parallel_inserts} -### `s3queue_buckets` {#buckets} +默认情况下,`processing_threads_num` 只会产生一个 `INSERT`,因此只是以多线程方式下载文件并进行解析。 +但这会限制并行度,因此为获得更高吞吐量,应使用 `parallel_inserts=true`,这将允许并行插入数据(但请注意,这会导致为 MergeTree 系列表引擎生成更多数据片段)。 + +:::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 在进行下一次轮询尝试之前等待的最短时间(以毫秒为单位)。 + +可能的取值: + +* 正整数。 + +默认值:`1000`。 + +### `s3queue_polling_max_timeout_ms` {#polling_max_timeout_ms} + +定义 ClickHouse 在发起下一次轮询尝试之前的最大等待时间(以毫秒为单位)。 + +可能的取值: -用于 'Ordered' 模式。自 `24.6` 版本起可用。如果存在多个 S3Queue 表副本,且每个副本都使用 keeper 中的同一元数据目录,则 `s3queue_buckets` 的值至少需要等于副本数量。如果同时使用了 `s3queue_processing_threads` 设置,则进一步增加 `s3queue_buckets` 设置的值是合理的,因为它定义了 `S3Queue` 处理的实际并行度。 +* 正整数。 -### `use_persistent_processing_nodes` {#use_persistent_processing_nodes} +默认值:`10000`。 -默认情况下,S3Queue 表始终使用临时处理节点,这可能导致数据重复,即当 zookeeper 会话在 S3Queue 开始处理之后但在 zookeeper 中提交已处理文件之前过期时。此设置强制服务器在 keeper 会话过期的情况下消除数据重复的可能性。 +### `s3queue_polling_backoff_ms` {#polling_backoff_ms} -### `persistent_processing_nodes_ttl_seconds` {#persistent_processing_nodes_ttl_seconds} +确定在未发现新文件时,需要加到上一次轮询间隔上的额外等待时间。下一次轮询会在上一次间隔与该退避值之和或最大间隔(取二者中较小值)之后触发。 -在服务器非正常终止的情况下,如果启用了 `use_persistent_processing_nodes`,可能会存在未删除的处理节点。此设置定义了可以安全清理这些处理节点的时间周期。 +可能的取值: -默认值:`3600`(1 小时)。 +* 正整数。 +默认值:`0`。 -## S3 相关设置 {#s3-settings} +### `s3queue_tracked_files_limit` {#tracked_files_limit} -引擎支持所有 S3 相关设置。有关 S3 设置的更多信息,请参阅[此处](../../../engines/table-engines/integrations/s3.md)。 +在使用 `unordered` 模式时,用于限制 ZooKeeper 节点的数量,对 `ordered` 模式不起作用。 +一旦达到该限制,最早已处理的文件会从 ZooKeeper 节点中删除,并再次被处理。 +可能的取值: -## S3 基于角色的访问 {#s3-role-based-access} +* 正整数。 - +默认值:`1000`。 -s3Queue 表引擎支持基于角色的访问。 -有关配置角色以访问存储桶的步骤,请参阅[此处](/cloud/data-sources/secure-s3)的文档。 +### `s3queue_tracked_file_ttl_sec` {#tracked_file_ttl_sec} -配置角色后,可以通过 `extra_credentials` 参数传递 `roleARN`,如下所示: +在“unordered”模式下,在 ZooKeeper 节点中保留已处理文件的最长时间(以秒为单位,默认永久保存)。对“ordered”模式无效。 +在经过指定秒数后,该文件会被重新导入。 + +可能的取值: + +* 正整数。 + +默认值:`0`。 + +### `s3queue_cleanup_interval_min_ms` {#cleanup_interval_min_ms} + +用于 `Ordered` 模式。定义负责维护已跟踪文件 TTL 和最大已跟踪文件集合的后台任务在重新调度间隔上的最小值。 + +默认值:`10000`。 + +### `s3queue_cleanup_interval_max_ms` {#cleanup_interval_max_ms} + +用于 “Ordered” 模式。定义重新调度后台任务的时间间隔的最大上限,该后台任务负责维护已跟踪文件的 TTL,以及已跟踪文件集合的最大大小。 + +默认值:`30000`。 + +### `s3queue_buckets` {#buckets} + +用于 Ordered 模式。从 `24.6` 版本开始可用。如果存在多个 S3Queue 表副本,并且它们都使用 Keeper 中相同的元数据目录,那么 `s3queue_buckets` 的值至少要等于副本数量。如果同时使用了 `s3queue_processing_threads` 设置,那么进一步增大 `s3queue_buckets` 的值是合理的,因为它决定了 `S3Queue` 处理的实际并行度。 + +### `use_persistent_processing_nodes` {#use_persistent_processing_nodes} + +默认情况下,S3Queue 表始终使用临时处理节点。如果在 S3Queue 将已处理文件提交到 ZooKeeper 之前、但在其开始处理之后,ZooKeeper 会话过期,就可能导致数据重复。此设置会强制服务器在 Keeper 会话过期的情况下消除产生重复数据的可能性。 + +### `persistent_processing_nodes_ttl_seconds` {#persistent_processing_nodes_ttl_seconds} + +在服务器异常终止的情况下,如果启用了 `use_persistent_processing_nodes`,就有可能出现尚未被移除的处理节点(processing nodes)。此设置用于定义一个时间段,在该时间段内,这些处理节点可以被安全清理。 + +默认值:`3600`(1 小时)。 + +## 与 S3 相关的设置 {#s3-settings} + +该引擎支持所有 S3 相关设置。有关 S3 设置的更多信息,请参阅[此处](../../../engines/table-engines/integrations/s3.md)。 + +## 基于角色的 S3 访问 {#s3-role-based-access} + + + +`s3Queue` 表引擎支持基于角色的访问控制。 +请参阅[此处](/cloud/data-sources/secure-s3)的文档,了解如何配置用于访问您的 bucket 的角色。 + +角色配置完成后,可以通过 `extra_credentials` 参数传递一个 `roleARN`,如下所示: ```sql CREATE TABLE s3_table @@ -259,28 +348,27 @@ SETTINGS ... ``` - ## 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} +## 描述 {#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) @@ -297,48 +385,44 @@ SETTINGS SELECT * FROM stats ORDER BY name; ``` - ## 虚拟列 {#virtual-columns} -- `_path` — 文件的路径。 -- `_file` — 文件的名称。 -- `_size` — 文件的大小。 -- `_time` — 文件的创建时间。 - -有关虚拟列的更多信息,请参阅[此处](../../../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} -`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`。 +`path` 参数可以使用类似 bash 的通配符来指定多个文件。要参与处理,文件必须存在并且与整个路径模式完全匹配。文件列表在执行 `SELECT` 时确定(而不是在 `CREATE` 时)。 -使用 `{}` 的语法与 [remote](../../../sql-reference/table-functions/remote.md) 表函数类似。 +* `*` — 匹配除 `/` 之外的任意数量任意字符,包括空字符串。 +* `**` — 匹配包括 `/` 在内的任意数量任意字符,包括空字符串。 +* `?` — 匹配任意单个字符。 +* `{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} -1. 重复行可能由以下原因导致: - -- 在文件处理过程中解析时发生异常,且通过 `s3queue_loading_retries` 启用了重试; +1. 出现重复行可能是由于以下原因导致: -- `S3Queue` 在多个服务器上配置并指向 ZooKeeper 中的同一路径,且在某个服务器成功提交已处理文件之前 Keeper 会话过期,这可能导致另一个服务器接管该文件的处理,而该文件可能已被第一个服务器部分或完全处理;但是,从 25.8 版本开始,如果设置 `use_persistent_processing_nodes = 1`,则不会出现此情况。 +* 在文件处理中途解析时发生异常,并且通过 `s3queue_loading_retries` 启用了重试; -- 服务器异常终止。 +* 在多个服务器上配置了 `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} +## 自省 {#introspection} -用于内省可使用 `system.s3queue` 无状态表和 `system.s3queue_log` 持久化表。 +要进行自省,请使用无状态表 `system.s3queue` 和持久化表 `system.s3queue_log`。 -1. `system.s3queue`。此表非持久化,显示 `S3Queue` 的内存状态:当前正在处理的文件、已处理或失败的文件。 +1. `system.s3queue`。此表为非持久化表,用于显示 `S3Queue` 的内存中状态:当前正在处理哪些文件、哪些文件已处理完成或处理失败。 ```sql ┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ @@ -359,7 +443,7 @@ COMMENT '包含 S3Queue 元数据的内存状态以及每个文件当前处理 └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -示例: +示例: ```sql @@ -378,9 +462,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 +492,7 @@ SETTINGS index_granularity = 8192 │ └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ ``` -要使用 `system.s3queue_log`,需在服务器配置文件中定义其配置: +要使用 `system.s3queue_log`,需要在服务器配置文件中为其添加相应配置: ```xml @@ -417,7 +501,7 @@ SETTINGS index_granularity = 8192 │ ``` -示例: +示例: ```sql SELECT * diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md index b1ae9767817..545e272e4d1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/sqlite.md @@ -9,16 +9,13 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; +# SQLite 表引擎 {#sqlite-table-engine} -# SQLite 表引擎 - - + 该引擎用于向 SQLite 导入数据或从 SQLite 导出数据,并支持在 ClickHouse 中直接查询 SQLite 表。 - - -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -33,8 +30,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; * `db_path` — SQLite 数据库文件的路径。 * `table` — SQLite 数据库中表的名称。 - -## 使用示例 +## 使用示例 {#usage-example} 示例查询,用于创建 SQLite 表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md index 4d215ee4c3e..0670c1d5549 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/time-series.md @@ -11,7 +11,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# TimeSeries 表引擎 +# TimeSeries 表引擎 {#timeseries-table-engine} @@ -31,7 +31,7 @@ metric_name2[...] = ... ::: -## 语法 +## 语法 {#syntax} ```sql CREATE TABLE name [(columns)] ENGINE=TimeSeries @@ -42,7 +42,7 @@ CREATE TABLE name [(columns)] ENGINE=TimeSeries ``` -## 用法 +## 用法 {#usage} 使用全部默认设置开始会更简单(允许在不指定列列表的情况下创建 `TimeSeries` 表): @@ -116,7 +116,7 @@ _metrics_ 表必须包含以下列: -## 创建 +## 创建 {#creation} 使用 `TimeSeries` 表引擎创建表有多种方式。 最简单的语句如下: @@ -201,7 +201,7 @@ ORDER BY metric_family_name ``` -## 调整列类型 +## 调整列类型 {#adjusting-column-types} 在定义主表时,通过显式指定列类型,可以调整内部目标表中几乎任意列的类型。例如, @@ -226,7 +226,7 @@ ORDER BY (id, timestamp) ``` -## `id` 列 +## `id` 列 {#id-column} `id` 列包含标识符,每个标识符是根据指标名称与标签的组合计算得到的。 `id` 列的 DEFAULT 表达式是用于计算这些标识符的表达式。 @@ -241,7 +241,7 @@ ENGINE=TimeSeries ``` -## `tags` 与 `all_tags` 列 +## `tags` 与 `all_tags` 列 {#tags-and-all-tags} 有两列包含标签映射——`tags` 和 `all_tags`。在本例中它们含义相同,但在使用 `tags_to_columns` 设置项时,它们可能会不同。该设置项允许指定某个特定标签应存储在单独的列中,而不是作为映射存储在 `tags` 列中: @@ -273,7 +273,7 @@ SETTINGS tags_to_columns = {'instance': 'instance', 'job': 'job'} ``` -## 内部目标表的表引擎 +## 内部目标表的表引擎 {#inner-table-engines} 默认情况下,内部目标表使用以下表引擎: @@ -293,7 +293,7 @@ METRICS ENGINE=ReplicatedReplacingMergeTree ``` -## 外部目标表 +## 外部目标表 {#external-target-tables} 可以让 `TimeSeries` 表使用一个手动创建的表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md index d0be599a80a..3f595ddb64f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/integrations/ytsaurus.md @@ -12,7 +12,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# YTsaurus 表引擎 +# YTsaurus 表引擎 {#ytsaurus-table-engine} @@ -21,7 +21,7 @@ YTsaurus 表引擎用于从 YTsaurus 集群导入数据。 -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name @@ -48,7 +48,7 @@ YTsaurus 表引擎用于从 YTsaurus 集群导入数据。 * `oauth_token` — OAuth 令牌。 -## 使用示例 +## 使用示例 {#usage-example} 以下是一个用于创建 YTsaurus 表的查询: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md index a4f3eb8a9b9..de8baa9ad0b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/index.md @@ -10,7 +10,7 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Log 表引擎系列 +# Log 表引擎系列 {#log-table-engine-family} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md index f074b96cc1f..5a6805e08d9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/log.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# Log 表引擎 +# Log 表引擎 {#log-table-engine} @@ -22,7 +22,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 创建表 +## 创建表 {#table_engines-log-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -59,7 +59,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用示例 +## 使用示例 {#table_engines-log-example-of-use} 创建表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md index e7c6892c914..cb34e5762ae 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/stripelog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# StripeLog 表引擎 +# StripeLog 表引擎 {#stripelog-table-engine} @@ -20,7 +20,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 创建数据表 +## 创建数据表 {#table_engines-stripelog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -53,7 +53,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用示例 +## 使用示例 {#table_engines-stripelog-example-of-use} 创建表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md index 4f992397be9..5ed29f3ca43 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/log-family/tinylog.md @@ -10,7 +10,7 @@ doc_type: 'reference' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -# TinyLog 表引擎 +# TinyLog 表引擎 {#tinylog-table-engine} @@ -32,7 +32,7 @@ import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; -## 创建表 +## 创建表 {#table_engines-tinylog-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -58,7 +58,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 示例用法 +## 示例用法 {#table_engines-tinylog-example-of-use} 创建表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md index 2474458e7cb..285eb6e0cab 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/aggregatingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# AggregatingMergeTree 表引擎 +# AggregatingMergeTree 表引擎 {#aggregatingmergetree-table-engine} 该引擎继承自 [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree),并对数据部分的合并逻辑进行了调整。ClickHouse 会将所有具有相同主键(更准确地说,是具有相同[排序键](../../../engines/table-engines/mergetree-family/mergetree.md))的行在单个数据部分内合并为一行,该行存储了聚合函数状态的组合。 @@ -29,7 +29,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -80,7 +80,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 聚合物化视图示例 +## 聚合物化视图示例 {#example-of-an-aggregated-materialized-view} 以下示例假设已存在名为 `test` 的数据库。如尚不存在,请使用以下命令创建: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md index cb2c3e1082e..188027b0fa0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/annindexes.md @@ -10,7 +10,7 @@ doc_type: 'guide' import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; -# 精确与近似向量搜索 +# 精确与近似向量搜索 {#exact-and-approximate-vector-search} 在给定多维(向量)空间中的一个点时,寻找与其距离最近的 N 个点的问题,被称为[最近邻搜索](https://en.wikipedia.org/wiki/Nearest_neighbor_search),简称向量搜索。 解决向量搜索通常有两种通用方法: @@ -36,13 +36,13 @@ LIMIT `<N>` 指定应返回多少个近邻。 -## 精确向量搜索 +## 精确向量搜索 {#exact-nearest-neighbor-search} 可以直接使用上面的 SELECT 查询执行精确向量搜索。 此类查询的运行时间通常与已存储向量的数量及其维度成正比,即数组元素的数量。 此外,由于 ClickHouse 会对所有向量进行暴力扫描(brute-force scan),运行时间还取决于查询使用的线程数(参见设置 [max_threads](../../../operations/settings/settings.md#max_threads))。 -### 示例 +### 示例 {#exact-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32)) ENGINE = MergeTree ORDER BY id; @@ -67,9 +67,9 @@ LIMIT 3; ``` -## 近似向量搜索 +## 近似向量搜索 {#approximate-nearest-neighbor-search} -### 向量相似度索引 +### 向量相似度索引 {#vector-similarity-index} ClickHouse 提供了一种专用的“向量相似度”索引,用于执行近似向量搜索。 @@ -78,7 +78,7 @@ ClickHouse 提供了一种专用的“向量相似度”索引,用于执行近 如果遇到问题,请在 [ClickHouse 仓库](https://github.com/clickhouse/clickhouse/issues) 中提交 issue。 ::: -#### 创建向量相似度索引 +#### 创建向量相似度索引 {#creating-a-vector-similarity-index} 可以在新表上按如下方式创建向量相似度索引: @@ -196,7 +196,7 @@ ORDER BY [...] 上述公式未将向量相似度索引在分配运行时数据结构(例如预分配缓冲区和缓存)时所需的额外内存考虑在内。 -#### 使用向量相似度索引 +#### 使用向量相似度索引 {#using-a-vector-similarity-index} :::note 要使用向量相似度索引,[compatibility](../../../operations/settings/settings.md) 设置必须为 `''`(默认值)或不低于 `'25.1'` 的版本。 @@ -406,7 +406,7 @@ Query id: a2a9d0c8-a525-45c1-96ca-c5a11fa66f47 在未启用重打分(`vector_search_with_rescoring = 0`)且启用了并行副本的情况下运行的查询,可能会回退为执行重打分。 ::: -#### 性能调优 +#### 性能调优 {#performance-tuning} **压缩调优** @@ -540,7 +540,7 @@ result = chclient.query( 在本示例中,参考向量以原始二进制形式发送到服务器,并在服务器端被重新解释为浮点数数组。 这可以节省服务器端的 CPU 时间,并避免服务器日志和 `system.query_log` 的膨胀。 -#### 管理和监控 +#### 管理和监控 {#administration} 向量相似性索引在磁盘上的大小可以通过 [system.data_skipping_indices](../../../operations/system-tables/data_skipping_indices) 获取: @@ -558,7 +558,7 @@ WHERE type = 'vector_similarity'; └──────────┴───────┴──────┴──────────────────────────┘ ``` -#### 与常规跳过索引的区别 +#### 与常规跳过索引的区别 {#differences-to-regular-skipping-indexes} 与所有常规[跳过索引](/optimize/skipping-indexes)类似,向量相似度索引也是在 granule 之上构建的,每个已建立索引的块由 `GRANULARITY = [N]` 个 granule 组成(对普通跳过索引而言,`[N]` 默认为 1)。 例如,如果表的主索引粒度为 8192(设置 `index_granularity = 8192`)且 `GRANULARITY = 2`,则每个已建立索引的块将包含 16384 行。 @@ -584,7 +584,7 @@ WHERE type = 'vector_similarity'; 通常建议为向量相似度索引使用较大的 `GRANULARITY`,只有在出现例如向量相似度结构内存占用过高等问题时,才改用较小的 `GRANULARITY` 值。 如果没有为向量相似度索引指定 `GRANULARITY`,则默认值为 1 亿。 -#### 示例 +#### 示例 {#approximate-nearest-neighbor-search-example} ```sql CREATE TABLE tab(id Int32, vec Array(Float32), INDEX idx vec TYPE vector_similarity('hnsw', 'L2Distance', 2)) ENGINE = MergeTree ORDER BY id; @@ -615,7 +615,7 @@ LIMIT 3; * [dbpedia](../../../getting-started/example-datasets/dbpedia-dataset) * [hackernews](../../../getting-started/example-datasets/hackernews-vector-search-dataset) -### 量化比特(QBit) +### 量化比特(QBit) {#approximate-nearest-neighbor-search-qbit} @@ -649,7 +649,7 @@ ClickHouse 提供了 Quantized Bit(`QBit`)数据类型,通过以下方式 * `element_type` – 每个向量元素的类型。支持的类型包括 `BFloat16`、`Float32` 和 `Float64` * `dimension` – 每个向量中的元素个数 -#### 创建 `QBit` 表并添加数据 +#### 创建 `QBit` 表并添加数据 {#qbit-create} ```sql CREATE TABLE fruit_animal ( @@ -667,7 +667,7 @@ INSERT INTO fruit_animal VALUES ('horse', [-0.61435682, 0.48542571, 1.21091247, -0.62530446, -1.33082533]); ``` -#### 使用 `QBit` 进行向量搜索 +#### 使用 `QBit` 进行向量搜索 {#qbit-search} 我们使用 L2 距离查找与表示单词 “lemon” 的向量最接近的邻居向量。距离函数的第三个参数指定精度的位数——值越高,精度越高,但计算量也越大。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md index 602ad0ed321..5217eb20dc4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/coalescingmergetree.md @@ -9,9 +9,7 @@ show_related_blogs: true doc_type: 'reference' --- - - -# CoalescingMergeTree 表引擎 +# CoalescingMergeTree 表引擎 {#coalescingmergetree-table-engine} :::note Available from version 25.6 此表引擎从 25.6 及更高版本开始在 OSS 和 Cloud 中可用。 @@ -23,9 +21,7 @@ doc_type: 'reference' `CoalescingMergeTree` 旨在与非键列中的 Nullable 类型配合使用。如果这些列不是 Nullable,其行为与 [ReplacingMergeTree](/engines/table-engines/mergetree-family/replacingmergetree) 相同。 - - -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -42,16 +38,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] 有关请求参数的说明,请参阅[请求描述](../../../sql-reference/statements/create/table.md)。 -### CoalescingMergeTree 的参数 +### CoalescingMergeTree 的参数 {#parameters-of-coalescingmergetree} -#### 列 +#### 列 {#columns} `columns` - 一个包含需要合并其值的列名的元组(tuple)。可选参数。 这些列必须是数值类型,并且不能出现在分区键或排序键中。 如果未指定 `columns`,ClickHouse 会合并所有不在排序键中的列的值。 -### 查询子句 +### 查询子句 {#query-clauses} 在创建 `CoalescingMergeTree` 表时,所需的[子句](../../../engines/table-engines/mergetree-family/mergetree.md)与创建 `MergeTree` 表时相同。 @@ -76,8 +72,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `columns` — 一个包含列名的元组(tuple),这些列的值将被求和。可选参数。相关说明见上文。
- -## 使用示例 +## 使用示例 {#usage-example} 请看下表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md index dc6faddbb44..bab22872ef8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/collapsingmergetree.md @@ -10,7 +10,7 @@ doc_type: 'guide' -# CollapsingMergeTree 表引擎 +# CollapsingMergeTree 表引擎 {#collapsingmergetree-table-engine} @@ -40,7 +40,7 @@ doc_type: 'guide' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -81,9 +81,9 @@ ENGINE = CollapsingMergeTree(Sign) * 创建 `CollapsingMergeTree` 表时,需要与创建 `MergeTree` 表时相同的[查询子句](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-creating-a-table)。 -## 折叠 +## 折叠 {#table_engine-collapsingmergetree-collapsing} -### 数据 +### 数据 {#data} 考虑这样一种情况:你需要为某个给定对象保存持续变化的数据。 看起来为每个对象只保留一行并在有变化时更新它似乎是合乎逻辑的, @@ -141,7 +141,7 @@ ENGINE = CollapsingMergeTree(Sign) 2. 列中不断增长的长数组会因为写入负载增加而降低引擎效率。数据越简单,效率越高。 3. `SELECT` 的结果高度依赖于对象变更历史的一致性。在准备要插入的数据时要谨慎。对于不一致的数据,可能会得到不可预测的结果。例如,本应非负的指标(如会话深度)出现负值。 -### 算法 +### 算法 {#table_engine-collapsingmergetree-collapsing-algorithm} 当 ClickHouse 合并数据[分片](/concepts/glossary#parts)时, 每组具有相同排序键(`ORDER BY`)的连续行会被折叠为最多两行, @@ -186,9 +186,9 @@ ClickHouse 使用多个线程处理 `SELECT` 查询,因此无法预测结果 -## 示例 +## 示例 {#examples} -### 使用示例 +### 使用示例 {#example-of-use} 给出以下示例数据: @@ -288,7 +288,7 @@ SELECT * FROM UAct FINAL 这种数据选取方式效率较低,不建议在扫描数据量很大(数百万行)时使用。 ::: -### 另一种方法示例 +### 另一种方法示例 {#example-of-another-approach} 这种方法的思路是,合并操作只考虑键字段。 因此,在 "cancel" 行中,我们可以指定负值, diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md index 21830741a9d..8f6caa9e637 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/custom-partitioning-key.md @@ -7,9 +7,7 @@ title: '自定义分区键' doc_type: 'guide' --- - - -# 自定义分区键 +# 自定义分区键 {#custom-partitioning-key} :::note 在大多数情况下,无需使用分区键;在其他大多数情况下,除非是针对按天分区较为常见的可观测性场景,否则也不需要比“按月”更细粒度的分区键。 @@ -78,7 +76,6 @@ WHERE table = 'visits' `partition` 列包含分区的名称。在此示例中有两个分区:`201901` 和 `201902`。可以使用该列的值在 [ALTER ... PARTITION](../../../sql-reference/statements/alter/partition.md) 查询中指定分区名称。 - `name` 列包含分区数据 part 的名称。你可以在 [ALTER ATTACH PART](/sql-reference/statements/alter/partition#attach-partitionpart) 查询中使用该列来指定 part 的名称。 下面我们来拆解这个 part 名称:`201901_1_9_2_11`: @@ -134,16 +131,13 @@ drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 detached 文件夹 '201901_1_1_0'、'201901_1_7_1' 等,是各个 part 的目录。每个 part 属于一个分区,并且只包含某一个月的数据(本示例中的表是按月分区的)。 - `detached` 目录包含通过 [DETACH](/sql-reference/statements/detach) 查询从表中分离出去的 part。损坏的 part 也会被移动到该目录,而不是直接删除。服务器不会使用 `detached` 目录中的这些 part。你可以在任何时候在该目录中添加、删除或修改数据——在你执行 [ATTACH](/sql-reference/statements/alter/partition#attach-partitionpart) 查询之前,服务器都不会察觉到这些更改。 请注意,在正在运行的服务器上,你不能在文件系统中手动更改 part 的集合或其数据,因为服务器不会感知到这些变更。对于非复制表,你可以在服务器停止时进行此操作,但不推荐这样做。对于复制表,在任何情况下都不能更改 part 的集合。 ClickHouse 允许你对分区执行操作:删除分区、在表之间复制分区,或者创建备份。所有操作的完整列表请参见 [Manipulations With Partitions and Parts](/sql-reference/statements/alter/partition) 一节。 - - -## 使用分区键进行 GROUP BY 优化 +## 使用分区键进行 GROUP BY 优化 {#group-by-optimisation-using-partition-key} 对于某些表的分区键与查询的 GROUP BY 键的特定组合,可以针对每个分区独立执行聚合。 这样在最后我们就不必合并所有执行线程产生的部分聚合结果, diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md index 1dcccded6d1..69e4427819e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/graphitemergetree.md @@ -7,9 +7,7 @@ title: 'GraphiteMergeTree 表引擎' doc_type: 'guide' --- - - -# GraphiteMergeTree 表引擎 +# GraphiteMergeTree 表引擎 {#graphitemergetree-table-engine} 该引擎用于对 [Graphite](http://graphite.readthedocs.io/en/latest/index.html) 数据进行稀疏化和聚合/平均(rollup)处理。它对希望使用 ClickHouse 作为 Graphite 数据存储的开发者非常有用。 @@ -17,9 +15,7 @@ doc_type: 'guide' 该引擎继承自 [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md) 的属性。 - - -## 创建表 +## 创建表 {#creating-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -82,8 +78,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `config_section` — 配置文件中定义 rollup 规则的节名称。
- -## Rollup 配置 +## Rollup 配置 {#rollup-configuration} Rollup 的配置由服务器配置中的 [graphite_rollup](../../../operations/server-configuration-parameters/settings.md#graphite) 参数定义。该参数的名称可以任意。你可以创建多个配置,并将它们用于不同的表。 @@ -92,25 +87,25 @@ Rollup 配置结构: required-columns patterns -### 必需列 +### 必需列 {#required-columns} -#### `path_column_name` +#### `path_column_name` {#path_column_name} `path_column_name` — 存储指标名称(Graphite 指标)的列名。默认值:`Path`。 -#### `time_column_name` +#### `time_column_name` {#time_column_name} `time_column_name` — 存储该指标采集时间的列名。默认值:`Time`。 -#### `value_column_name` +#### `value_column_name` {#value_column_name} `value_column_name` — 存储在 `time_column_name` 中指定时间点的指标值的列名。默认值:`Value`。 -#### `version_column_name` +#### `version_column_name` {#version_column_name} `version_column_name` — 存储指标版本的列名。默认值:`Timestamp`。 -### 模式(Patterns) +### 模式(Patterns) {#patterns} `patterns` 部分的结构: @@ -163,8 +158,7 @@ default * `precision` – 以秒为单位定义数据年龄的精度。应当是 86400(一天的秒数)的约数。 * `function` – 要应用于其年龄落在 `[age, age + precision]` 区间内数据的聚合函数名称。可用函数:min / max / any / avg。平均值的计算是近似的,即“平均的平均值”。 -### 没有规则类型的配置示例 - +### 没有规则类型的配置示例 {#configuration-example} ```xml @@ -199,7 +193,7 @@ default ``` -### 不同规则类型的配置示例 +### 不同规则类型的配置示例 {#configuration-typed-example} ```xml 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..e5cc8cbc4c4 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 @@ -7,9 +7,7 @@ title: 'MergeTree 引擎系列' doc_type: 'reference' --- - - -# MergeTree 引擎家族 +# MergeTree 引擎家族 {#mergetree-engine-family} MergeTree 家族中的表引擎是 ClickHouse 数据存储能力的核心。它们提供了实现高可靠性和高性能数据检索的大部分特性:列式存储、自定义分区、稀疏主索引、二级数据跳过索引等。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md index 32b7e5db450..89c513dbddc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/invertedindexes.md @@ -10,7 +10,7 @@ doc_type: 'reference' import PrivatePreviewBadge from '@theme/badges/PrivatePreviewBadge'; -# 使用文本索引进行全文搜索 +# 使用文本索引进行全文搜索 {#full-text-search-using-text-indexes} @@ -22,7 +22,7 @@ ClickHouse 中的文本索引(也称为["倒排索引"](https://en.wikipedia.o -## 创建文本索引 +## 创建文本索引 {#creating-a-text-index} 要创建文本索引,首先启用相应的实验性设置: @@ -186,12 +186,12 @@ ALTER TABLE tab ADD INDEX text_idx(s) TYPE text(tokenizer = splitByNonAlpha); ``` -## 使用文本索引 +## 使用文本索引 {#using-a-text-index} 在 SELECT 查询中使用文本索引非常简单,常见的字符串搜索函数会自动使用该索引。 如果不存在索引,下面这些字符串搜索函数将会回退到较慢的暴力扫描。 -### 支持的函数 +### 支持的函数 {#functions-support} 当在 SELECT 查询的 `WHERE` 子句中使用文本函数时,即可使用文本索引: @@ -201,7 +201,7 @@ FROM [...] WHERE string_search_function(column_with_text_index) ``` -#### `=` 和 `!=` +#### `=` 和 `!=` {#functions-example-equals-notequals} `=`([`equals`](/sql-reference/functions/comparison-functions.md/#equals))和 `!=`([`notEquals`](/sql-reference/functions/comparison-functions.md/#notEquals))会匹配给定搜索词的整体。 @@ -213,7 +213,7 @@ SELECT * from tab WHERE str = 'Hello'; 文本索引支持 `=` 和 `!=` 运算,但只有在使用 `array` 分词器时,等值和不等值搜索才有意义(它会使索引存储整行的值)。 -#### `IN` 和 `NOT IN` +#### `IN` 和 `NOT IN` {#functions-example-in-notin} `IN`([in](/sql-reference/functions/in-functions))和 `NOT IN`([notIn](/sql-reference/functions/in-functions))类似于函数 `equals` 和 `notEquals`,但它们分别要求匹配所有搜索词(`IN`)或完全与所有搜索词都不匹配(`NOT IN`)。 @@ -225,7 +225,7 @@ SELECT * from tab WHERE str IN ('Hello', 'World'); 适用与 `=` 和 `!=` 相同的限制,也就是说,只有在配合 `array` tokenizer 使用时,`IN` 和 `NOT IN` 才有意义。 -#### `LIKE`、`NOT LIKE` 和 `match` +#### `LIKE`、`NOT LIKE` 和 `match` {#functions-example-like-notlike-match} :::note 这些函数目前仅在索引 tokenizer 为 `splitByNonAlpha` 或 `ngrams` 时才会使用文本索引进行过滤。 @@ -250,7 +250,7 @@ SELECT count() FROM tab WHERE comment LIKE ' support %'; -- 或者 `% support %` `support` 左右的空格确保该术语可以被提取为一个 token。 -#### `startsWith` 和 `endsWith` +#### `startsWith` 和 `endsWith` {#functions-example-startswith-endswith} 与 `LIKE` 类似,[startsWith](/sql-reference/functions/string-functions.md/#startsWith) 和 [endsWith](/sql-reference/functions/string-functions.md/#endsWith) 函数只有在能从搜索词中提取出完整的 token 时,才能使用文本索引。 @@ -275,7 +275,7 @@ startsWith(comment, 'clickhouse supports ')` SELECT count() FROM tab WHERE endsWith(comment, ' olap 引擎'); ``` -#### `hasToken` 和 `hasTokenOrNull` +#### `hasToken` 和 `hasTokenOrNull` {#functions-example-hastoken-hastokenornull} 函数 [hasToken](/sql-reference/functions/string-search-functions.md/#hasToken) 和 [hasTokenOrNull](/sql-reference/functions/string-search-functions.md/#hasTokenOrNull) 用于匹配单个指定的 token。 @@ -289,7 +289,7 @@ SELECT count() FROM tab WHERE hasToken(comment, 'clickhouse'); 函数 `hasToken` 和 `hasTokenOrNull` 是在与 `text` 索引配合使用时性能最优的函数。 -#### `hasAnyTokens` 和 `hasAllTokens` +#### `hasAnyTokens` 和 `hasAllTokens` {#functions-example-hasanytokens-hasalltokens} 函数 [hasAnyTokens](/sql-reference/functions/string-search-functions.md/#hasAnyTokens) 和 [hasAllTokens](/sql-reference/functions/string-search-functions.md/#hasAllTokens) 分别用于匹配给定 token 中的任意一个或全部。 @@ -309,7 +309,7 @@ SELECT count() FROM tab WHERE hasAnyTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); ``` -#### `has` +#### `has` {#functions-example-has} 数组函数 [has](/sql-reference/functions/array-functions#has) 用于判断字符串数组中是否包含某个单独的元素。 @@ -319,7 +319,7 @@ SELECT count() FROM tab WHERE hasAllTokens(comment, ['clickhouse', 'olap']); SELECT count() FROM tab WHERE has(array, 'clickhouse'); ``` -#### `mapContains` +#### `mapContains` {#functions-example-mapcontains} 函数 [mapContains](/sql-reference/functions/tuple-map-functions#mapcontains)(`mapContainsKey` 的别名)用于在 map 的键中匹配单个 token。 @@ -331,7 +331,7 @@ SELECT count() FROM tab WHERE mapContainsKey(map, 'clickhouse'); SELECT count() FROM tab WHERE mapContains(map, 'clickhouse'); ``` -#### `operator[]` +#### `operator[]` {#functions-example-access-operator} 可以将访问运算符 [operator[]](/sql-reference/operators#access-operators) 与文本索引配合使用,以过滤键和值。 @@ -343,9 +343,9 @@ SELECT count() FROM tab WHERE map['engine'] = 'clickhouse'; 请参阅以下示例,了解如何配合文本索引使用 `Array(T)` 和 `Map(K, V)` 类型的列。 -### 带有文本索引的 `Array` 和 `Map` 列示例 +### 带有文本索引的 `Array` 和 `Map` 列示例 {#text-index-array-and-map-examples} -#### 为 Array(String) 列建立索引 +#### 为 Array(String) 列建立索引 {#text-index-example-array} 想象一个博客平台,作者会使用关键词为他们的博文打标签并进行分类。 我们希望用户能够通过搜索或点击主题来发现相关内容。 @@ -377,7 +377,7 @@ ALTER TABLE posts ADD INDEX keywords_idx(keywords) TYPE text(tokenizer = splitBy ALTER TABLE posts MATERIALIZE INDEX keywords_idx; -- 务必为现有数据重建索引 ``` -#### 为 Map 列建立索引 +#### 为 Map 列建立索引 {#text-index-example-map} 在许多可观测性场景中,日志消息会被拆分为「组件」,并按合适的数据类型存储,例如时间戳使用 DateTime 类型、日志级别使用 Enum 类型等。 指标字段最好以键值对的形式存储。 @@ -435,9 +435,9 @@ SELECT * FROM logs WHERE has(mapValues(attributes), '192.168.1.1'); -- 快速 ``` -## 性能调优 +## 性能调优 {#performance-tuning} -### 直接读取 +### 直接读取 {#direct-read} 某些类型的文本查询可以通过一种称为“直接读取”(direct read)的优化显著提速。 更具体地说,当 SELECT 查询中 *没有* 从文本列进行投影时,可以应用此优化。 @@ -515,7 +515,7 @@ Positions: EXPLAIN PLAN 的第二个输出结果中包含一个虚拟列 `__text_index___`。 如果存在该列,则会使用直接读取。 -### 缓存 +### 缓存 {#caching} 可以使用不同的缓存将文本索引的部分内容缓存在内存中(参见[实现细节](#implementation)部分): 目前,对文本索引的反序列化字典块、头信息和倒排列表都提供了缓存,以减少 I/O。 @@ -524,7 +524,7 @@ EXPLAIN PLAN 的第二个输出结果中包含一个虚拟列 `__text_index_ + 已弃用的建表方法 -已弃用的建表方法 + :::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` — 索引粒度,即索引“marks”之间的数据行数。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} -表由按主键排序的数据部分(data part)组成。 - -当数据插入表中时,会创建独立的数据部分,每个部分都按主键进行字典序排序。例如,如果主键是 `(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} -主键中的列数没有明确限制。根据数据结构,您可以在主键中包含更多或更少的列。这可能会: +主键中的列数没有显式限制。可以根据数据结构,在主键中包含更多或更少的列。这可能会: -- 提高索引性能。 +* 提高索引性能。 - 如果主键是 `(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 +251,7 @@ ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 ``` -在这种情况下,在以下查询中: +在这种情况下,在查询时: ```sql SELECT count() FROM table @@ -277,42 +269,41 @@ 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} +以月份中的日期为例。在一个月内,它们构成一个[单调序列](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} +### 数据跳过索引 {#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 +321,7 @@ CREATE TABLE table_name ... ``` -ClickHouse 可以使用示例中的索引来减少以下查询中从磁盘读取的数据量: +示例中的索引可供 ClickHouse 在以下查询中使用,以减少从磁盘读取的数据量: ```sql SELECT count() FROM table WHERE u64 == 10; @@ -338,106 +329,105 @@ 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)。 +`MergeTree` 表引擎支持以下几种跳过索引类型。\ +有关如何使用跳过索引进行性能优化的更多信息,\ +请参阅[《理解 ClickHouse 数据跳过索引》](/optimize/skipping-indexes)。 -- [`MinMax`](#minmax) 索引 -- [`Set`](#set) 索引 -- [`bloom_filter`](#bloom-filter) 索引 -- [`ngrambf_v1`](#n-gram-bloom-filter) 索引 -- [`tokenbf_v1`](#token-bloom-filter) 索引 +* [`MinMax`](#minmax) 索引 +* [`Set`](#set) 索引 +* [`bloom_filter`](#bloom-filter) 索引 +* [`ngrambf_v1`](#n-gram-bloom-filter) 索引 +* [`tokenbf_v1`](#token-bloom-filter) 索引 #### MinMax 跳过索引 {#minmax} -对于每个索引颗粒,存储表达式的最小值和最大值。 -(如果表达式是 `tuple` 类型,则存储每个元组元素的最小值和最大值。) +对于每个索引粒度,会存储某个表达式的最小值和最大值。 +(如果表达式的类型是 `tuple`,则会为元组中的每个元素分别存储最小值和最大值。) -```text title="语法" +```text title="Syntax" minmax ``` -#### Set 索引 {#set} +#### Set {#set} -对于每个索引颗粒,最多存储指定表达式的 `max_rows` 个唯一值。 -`max_rows = 0` 表示"存储所有唯一值"。 +对于每个索引粒度,最多会存储 `max_rows` 个指定表达式的唯一值。 +`max_rows = 0` 表示“存储所有唯一值”。 -```text title="语法" +```text title="Syntax" set(max_rows) ``` -#### Bloom filter 索引 {#bloom-filter} +#### 布隆过滤器 {#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`),用于指定产生假阳性的概率(这会增加需要读取的数据量)。 - - -支持以下数据类型: - -- `(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](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 +445,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 +461,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,111 +469,104 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) as number_of_ha └──────────────────────────┘ ``` -当然,也可以使用这些函数来估算其他条件下的参数。 +当然,你也可以使用这些函数来估算其他条件下的参数。 上述函数参考了[此处](https://hur.st/bloomfilter)的布隆过滤器计算器。 -#### Token 布隆过滤器 {#token-bloom-filter} +#### Token bloom filter {#token-bloom-filter} -Token 布隆过滤器与 `ngrambf_v1` 相同,但存储的是 token(由非字母数字字符分隔的序列)而不是 ngram。 +Token bloom filter 与 `ngrambf_v1` 相同,但存储的是 token(由非字母数字字符分隔的序列),而不是 ngram。 -```text title="语法" -tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed) +```text title="Syntax" +tokenbf_v1(布隆过滤器字节大小, 哈希函数数量, 随机种子) ``` +#### 稀疏 grams 布隆过滤器 {#sparse-grams-bloom-filter} -#### 稀疏 gram 布隆过滤器 {#sparse-grams-bloom-filter} - -稀疏 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)。 +支持全文搜索,详情见[这里](invertedindexes.md)。 #### 向量相似度 {#vector-similarity} -支持近似最近邻搜索,详情请参阅[此处](annindexes.md)。 +支持近似最近邻检索,详见[此处](annindexes.md)。 ### 函数支持 {#functions-support} -`WHERE` 子句中的条件包含对列进行操作的函数调用。如果列是索引的一部分,ClickHouse 在执行函数时会尝试使用该索引。ClickHouse 针对索引使用支持不同的函数子集。 - -`set` 类型的索引可被所有函数使用。其他索引类型的支持情况如下: - - -| 函数(运算符)/索引 | 主键 | 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) | ✗ | ✗ | ✗ | ✗ | ✗ | ✔ | ✗ | - - - -当函数的常量参数小于 ngram 大小时,`ngrambf_v1` 无法用于查询优化。 - -(*) 要使 `hasTokenCaseInsensitive` 和 `hasTokenCaseInsensitiveOrNull` 有效,必须在已转换为小写的数据上创建 `tokenbf_v1` 索引,例如:`INDEX idx (lower(str_col)) TYPE tokenbf_v1(512, 3, 0)`。 +`WHERE` 子句中的条件可能包含对作用于列的函数的调用。如果该列是索引的一部分,ClickHouse 会在执行这些函数时尝试使用该索引。ClickHouse 对可用于索引的函数提供了不同的支持子集。 + +类型为 `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` 不能用于查询优化。 + +(*) 要让 `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` 索引不能用于查询优化。 例如: -- 可以被优化: - - `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` - - `s != 1` - - `NOT startsWith(s, 'test')` -::: - - +* 可以被优化: + * `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` + * `s != 1` + * `NOT startsWith(s, 'test')` + ::: ## 投影 {#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` 语句不支持投影。 +在带有 [FINAL](/sql-reference/statements/select/from#final-modifier) 修饰符的 `SELECT` 语句中不支持投影。 ### 投影查询 {#projection-query} -投影查询用于定义投影。它隐式地从父表中选择数据。 - +投影查询用于定义一个投影。它会隐式地从父表中选取数据。 **语法** ```sql @@ -594,40 +577,38 @@ SELECT [GROUP BY] [ORDER BY] ### 投影存储 {#projection-storage} -投影存储在数据分区目录内。它类似于索引,但包含一个子目录,用于存储匿名 `MergeTree` 表的数据分区。该表由投影的定义查询生成。如果存在 `GROUP BY` 子句,底层存储引擎将变为 [AggregatingMergeTree](aggregatingmergetree.md),并且所有聚合函数都会转换为 `AggregateFunction`。如果存在 `ORDER BY` 子句,`MergeTree` 表将其用作主键表达式。在合并过程中,投影分区通过其存储的合并例程进行合并。父表分区的校验和与投影分区的校验和合并。其他维护任务与跳数索引类似。 +投影存储在数据分片(part)目录中。它类似于索引,但包含一个子目录,用于存放一个匿名 `MergeTree` 表的分片。该表由投影的定义查询所派生。如果存在 `GROUP BY` 子句,则其底层存储引擎变为 [AggregatingMergeTree](aggregatingmergetree.md),并且所有聚合函数都会被转换为 `AggregateFunction`。如果存在 `ORDER BY` 子句,则该 `MergeTree` 表会将其作为主键表达式使用。在合并过程中,投影分片通过其存储引擎的合并流程进行合并。父表分片的校验和会与投影分片的校验和组合在一起。其他维护任务与跳过索引(skip index)类似。 ### 查询分析 {#projection-query-analysis} -1. 检查投影是否可用于回答给定查询,即它是否生成与查询基表相同的结果。 -2. 选择最佳可行匹配,即需要读取最少颗粒数的匹配。 -3. 使用投影的查询管道将与使用原始分区的查询管道不同。如果某些分区中不存在投影,我们可以添加管道以即时"投影"它。 - +1. 检查投影是否可以用于回答给定查询,即它是否能生成与查询基表相同的结果。 +2. 选择最优的可行匹配方案,即需要读取的数据颗粒(granule)最少的那个。 +3. 使用投影的查询管道将不同于使用原始数据分片的管道。如果某些数据分片中缺少该投影,可以在查询管道中动态增加步骤以“实时投影”出来。 ## 并发数据访问 {#concurrent-data-access} -对于并发表访问,ClickHouse 使用多版本控制机制。换句话说,当表被同时读取和更新时,数据从查询时刻的当前数据分片集合中读取。不存在长时间锁定。插入操作不会阻塞读取操作。 - -表的读取操作会自动并行化。 +对于对表的并发访问,我们使用多版本机制。换句话说,当一个表被同时读取和更新时,查询会从在查询时刻“当前”的那一组数据分片中读取数据。不会出现长时间持有的锁。插入操作不会阻塞读取操作。 +从表中读取会自动并行执行。 -## 列和表的 TTL {#table_engine-mergetree-ttl} +## 列和表的 TTL {#table_engine-mergetree-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 @@ -636,13 +617,13 @@ TTL date_time + INTERVAL 15 HOUR ### 列 TTL {#mergetree-column-ttl} -当列中的值过期时,ClickHouse 会将它们替换为该列数据类型的默认值。如果数据部分中某列的所有值都过期,ClickHouse 会从文件系统的数据部分中删除该列。 +当列中的值过期时,ClickHouse 会将其替换为该列数据类型的默认值。如果某个数据部分中该列的所有值都已过期,ClickHouse 会从文件系统中的该数据部分删除此列。 `TTL` 子句不能用于键列。 **示例** -#### 创建带有 `TTL` 的表: {#creating-a-table-with-ttl} +#### 创建带 `TTL` 的表: {#creating-a-table-with-ttl} ```sql CREATE TABLE tab @@ -657,7 +638,7 @@ PARTITION BY toYYYYMM(d) ORDER BY d; ``` -#### 为现有表的列添加 TTL {#adding-ttl-to-a-column-of-an-existing-table} +#### 向现有表的列添加 TTL {#adding-ttl-to-a-column-of-an-existing-table} ```sql ALTER TABLE tab @@ -665,7 +646,7 @@ ALTER TABLE tab c String TTL d + INTERVAL 1 DAY; ``` -#### 修改列的 TTL {#altering-ttl-of-the-column} +#### 更改列的 TTL {#altering-ttl-of-the-column} ```sql ALTER TABLE tab @@ -675,24 +656,24 @@ ALTER TABLE tab ### 表 TTL {#mergetree-table-ttl} -表可以有一个用于删除过期行的表达式,以及多个用于在[磁盘或卷](#table_engine-mergetree-multiple-volumes)之间自动移动部分的表达式。当表中的行过期时,ClickHouse 会删除所有相应的行。对于部分的移动或重新压缩,该部分的所有行都必须满足 `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 +681,11 @@ 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` 的表: {#creating-a-table-with-ttl-1} ```sql CREATE TABLE tab @@ -720,15 +701,14 @@ TTL d + INTERVAL 1 MONTH DELETE, d + INTERVAL 2 WEEK TO DISK 'bbb'; ``` -#### 修改表的 `TTL`: {#altering-ttl-of-the-table} +#### 修改表的 `TTL`: {#altering-ttl-of-the-table} ```sql ALTER TABLE tab MODIFY TTL d + INTERVAL 1 DAY; ``` - -创建一个表,其中的行在一个月后过期。日期为星期一的过期行将被删除: +创建一个表,行在一个月后过期。对已过期的行,仅删除日期为星期一的记录: ```sql CREATE TABLE table_with_where @@ -742,7 +722,7 @@ ORDER BY d TTL d + INTERVAL 1 MONTH DELETE WHERE toDayOfWeek(d) = 1; ``` -#### 创建一个表,其中过期的行会被重新压缩: {#creating-a-table-where-expired-rows-are-recompressed} +#### 创建对过期行重新压缩的表: {#creating-a-table-where-expired-rows-are-recompressed} ```sql CREATE TABLE table_for_recompression @@ -757,7 +737,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 @@ -775,55 +755,53 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ### 删除过期数据 {#mergetree-removing-expired-data} -当 ClickHouse 合并数据部分时,具有过期 `TTL` 的数据会被删除。 +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) 设置 - +* [ttl_only_drop_parts](/operations/settings/merge-tree-settings#ttl_only_drop_parts) 设置 ## 磁盘类型 {#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) -- [`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` 用于 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} -`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} -- 磁盘(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} +### 配置 {#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 +809,7 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ```xml - + /mnt/fast_ssd/clickhouse/ @@ -852,11 +830,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 +850,17 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); round_robin - + - + 0.2 - + - + ... @@ -890,20 +868,19 @@ 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(给出的最低优先级)连续覆盖,中间不能缺少任何数字。 + * 如果 *所有* 卷都打了标签,则按给定顺序确定它们的优先级。 + * 如果只有 *部分* 卷打了标签,则未打标签的卷具有最低优先级,并按它们在配置中的定义顺序确定优先级。 + * 如果 *没有* 卷打标签,则它们的优先级对应于它们在配置中声明的顺序。 * 两个卷不能具有相同的优先级值。 配置示例: @@ -949,16 +926,15 @@ TTL d + INTERVAL 1 MONTH GROUP BY k1, k2 SET x = max(x), y = min(y); ``` +在给定的示例中,`hdd_in_order` 策略实现了 [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling)(轮询)方式。因此,该策略仅定义了一个卷(`single`),数据 part 会以循环顺序存储在该卷的所有磁盘上。如果系统中挂载了多个相似的磁盘但没有配置 RAID,此类策略会非常有用。请记住,每个单独的磁盘驱动器都不够可靠,您可能需要通过将复制因子设置为 3 或更多来进行补偿。 -在给定的示例中,`hdd_in_order` 策略实现了[轮询](https://en.wikipedia.org/wiki/Round-robin_scheduling)方法。因此,该策略仅定义一个卷(`single`),数据部分按循环顺序存储在其所有磁盘上。如果系统挂载了多个相似的磁盘但未配置 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 +948,46 @@ 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) 设置进行更改。 - -### 详细信息 {#details} - -对于 `MergeTree` 表,数据通过不同方式写入磁盘: +`default` 存储策略意味着只使用一个卷,该卷仅由 `` 中指定的一块磁盘组成。 +你可以在建表之后通过 [ALTER TABLE ... MODIFY SETTING] 查询更改存储策略,新策略必须包含所有原有的磁盘和卷,并使用相同的名称。 -- 作为插入操作的结果(`INSERT` 查询)。 -- 在后台合并和[变更](/sql-reference/statements/alter#mutations)期间。 -- 从另一个副本下载时。 -- 作为分区冻结的结果 [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition)。 +用于在后台移动数据部分的线程数量可以通过 [background_move_pool_size](/operations/server-configuration-parameters/settings.md/#background_move_pool_size) 设置进行修改。 -在除变更和分区冻结之外的所有这些情况下,数据部分根据给定的存储策略存储在卷和磁盘上: +### 细节 {#details} -1. 选择第一个(按定义顺序)具有足够磁盘空间来存储数据部分(`unreserved_space > current_part_size`)并允许存储给定大小的数据部分(`max_data_part_size_bytes > current_part_size`)的卷。 -2. 在该卷内,选择紧随用于存储前一个数据块的磁盘之后的磁盘,并且该磁盘的可用空间大于数据部分大小(`unreserved_space - keep_free_space_bytes > current_part_size`)。 +对于 `MergeTree` 表,数据以不同的方式写入磁盘: -在底层,变更和分区冻结使用[硬链接](https://en.wikipedia.org/wiki/Hard_link)。不支持不同磁盘之间的硬链接,因此在这种情况下,生成的数据部分存储在与初始数据部分相同的磁盘上。 +* 作为插入操作(`INSERT` 查询)的结果。 +* 在执行后台合并和[变更](/sql-reference/statements/alter#mutations)时。 +* 从其他副本下载时。 +* 作为分区冻结 [ALTER TABLE ... FREEZE PARTITION](/sql-reference/statements/alter/partition#freeze-partition) 的结果。 -在后台,数据部分根据可用空间量(`move_factor` 参数)按照配置文件中声明卷的顺序在卷之间移动。 -数据永远不会从最后一个卷传输到第一个卷。可以使用系统表 [system.part_log](/operations/system-tables/part_log)(字段 `type = MOVE_PART`)和 [system.parts](/operations/system-tables/parts.md)(字段 `path` 和 `disk`)来监控后台移动。此外,详细信息可以在服务器日志中找到。 +在除变更和分区冻结之外的所有这些情况下,数据部件(part)会根据给定的存储策略被存储在某个卷和磁盘上: -用户可以使用查询 [ALTER TABLE ... MOVE PART\|PARTITION ... TO VOLUME\|DISK ...](/sql-reference/statements/alter/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)。不同磁盘之间不支持硬链接,因此在这些情况下,生成的部件会存储在与初始部件相同的磁盘上。 +在后台,部件会基于空闲空间的大小(`move_factor` 参数),按照配置文件中声明卷的顺序在卷之间移动。 +数据永远不会从最后一个卷迁出,也不会被迁移到第一个卷中。可以使用系统表 [system.part_log](/operations/system-tables/part_log)(字段 `type = MOVE_PART`)和 [system.parts](/operations/system-tables/parts.md)(字段 `path` 和 `disk`)来监控后台移动操作。更详细的信息可以在服务器日志中找到。 -在后台合并和变更操作完成后,旧的数据块只有在经过一定时间(`old_parts_lifetime`)后才会被删除。 -在此期间,它们不会被移动到其他卷或磁盘。因此,在这些数据块被最终删除之前,评估已占用磁盘空间时仍会将其计算在内。 +用户可以通过查询 [ALTER TABLE ... MOVE PART|PARTITION ... TO VOLUME|DISK ...](/sql-reference/statements/alter/partition) 强制将某个部件或分区从一个卷移动到另一个卷,所有对后台操作的限制同样会被考虑在内。该查询会自行发起移动操作,而不会等待后台操作完成。如果没有足够的可用空间,或任一必需条件未满足,用户将收到一条错误信息。 -用户可以使用 [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} +## 使用外部存储进行数据存储 {#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 +1031,32 @@ 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` — 用于存储的磁盘名称。 - +* `_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` 时,在合并过程中会被保留。 +* `_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 +1068,68 @@ 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` + 语法:`minmax` -- `TDigest` +* `TDigest` - [TDigest](https://github.com/tdunning/t-digest) 草图,用于计算数值列的近似百分位数(例如第 90 百分位数)。 + [TDigest](https://github.com/tdunning/t-digest) Sketch 数据结构,用于计算数值列的近似分位数(例如第 90 个百分位数)。 - 语法:`tdigest` + 语法:`tdigest` -- `Uniq` +* `Uniq` - [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) 草图,用于估算列中不同值的数量。 + [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) Sketch 数据结构,用于估算某列中包含的不同值的数量。 - 语法:`uniq` + 语法:`uniq` -- `CountMin` +* `CountMin` - [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) 草图,用于提供列中每个值出现频率的近似计数。 + [CountMin](https://en.wikipedia.org/wiki/Count%E2%80%93min_sketch) Sketch 数据结构,用于对某列中每个值的出现频率进行近似计数。 - 语法:`countmin` + 语法:`countmin` ### 支持的数据类型 {#supported-data-types} -| | (U)Int*, Float*, Decimal(_), Date_, Boolean, Enum\* | String 或 FixedString | -| -------- | --------------------------------------------------- | --------------------- | -| CountMin | ✔ | ✔ | -| MinMax | ✔ | ✗ | -| TDigest | ✔ | ✗ | -| Uniq | ✔ | ✔ | +| | (U)Int*, Float*, Decimal(*), Date*, Boolean, Enum* | String 或 FixedString | +|-----------|----------------------------------------------------|-----------------------| +| CountMin | ✔ | ✔ | +| MinMax | ✔ | ✗ | +| TDigest | ✔ | ✗ | +| Uniq | ✔ | ✔ | ### 支持的操作 {#supported-operations} -| | 等值过滤器 (==) | 范围过滤器 (`>, >=, <, <=`) | -| -------- | --------------------- | ------------------------------ | -| CountMin | ✔ | ✗ | -| MinMax | ✗ | ✔ | -| TDigest | ✗ | ✔ | -| Uniq | ✔ | ✗ | - +| | 等值过滤 (==) | 范围过滤 (`>, >=, <, <=`) | +|-----------|----------------|---------------------------| +| CountMin | ✔ | ✗ | +| MinMax | ✗ | ✔ | +| TDigest | ✗ | ✔ | +| Uniq | ✔ | ✗ | -## 列级设置 {#column-level-settings} +## 列级别设置 {#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 +1141,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/mergetree-family/replacingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md index c0316989b98..976823f2af9 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replacingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# ReplacingMergeTree 表引擎 +# ReplacingMergeTree 表引擎 {#replacingmergetree-table-engine} 该引擎与 [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree) 的不同之处在于,它会删除具有相同[排序键](../../../engines/table-engines/mergetree-family/mergetree.md)值的重复记录(指表的 `ORDER BY` 子句,而非 `PRIMARY KEY`)。 @@ -23,7 +23,7 @@ doc_type: 'reference' -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -46,9 +46,9 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ::: -## ReplacingMergeTree 参数 +## ReplacingMergeTree 参数 {#replacingmergetree-parameters} -### `ver` +### `ver` {#ver} `ver` — 带有版本号的列。类型为 `UInt*`、`Date`、`DateTime` 或 `DateTime64`。可选参数。 @@ -100,7 +100,7 @@ SELECT * FROM mySecondReplacingMT FINAL; └─────┴─────────┴─────────────────────┘ ``` -### `is_deleted` +### `is_deleted` {#is_deleted} `is_deleted` — 在合并过程中用于确定该行数据表示的是当前状态还是应被删除的列名;`1` 表示“删除”行,`0` 表示“状态”行。 @@ -187,7 +187,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 查询时去重 & FINAL +## 查询时去重 & FINAL {#query-time-de-duplication--final} 在合并阶段,ReplacingMergeTree 使用 `ORDER BY` 列(用于创建表)中的值作为唯一标识来识别重复行,并仅保留版本最高的那一行。不过,这种方式只能在最终状态上接近正确——它并不保证所有重复行都会被去重,因此不应将其作为严格依赖。由于更新和删除记录在查询时仍可能被计算在内,查询结果因此可能不正确。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md index 23ff93782e9..35717f42c4d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/replication.md @@ -1,18 +1,16 @@ --- -description: 'ClickHouse 中 Replicated* 系列表引擎数据复制概览' +description: '基于 ClickHouse 中 Replicated* 系列表引擎的数据复制概述' sidebar_label: 'Replicated*' sidebar_position: 20 slug: /engines/table-engines/mergetree-family/replication -title: 'Replicated* 表引擎' +title: 'Replicated* 系列表引擎' doc_type: 'reference' --- - - -# Replicated* 表引擎 +# Replicated* 表引擎 {#replicated-table-engines} :::note -在 ClickHouse Cloud 中,副本由系统自动管理。请在创建表时不要添加参数。例如,在下面的文本中,应将以下内容替换为: +在 ClickHouse Cloud 中,复制由系统自动管理。请在创建表时不要添加这些参数。例如,在下面的文本中,你应将其替换为: ```sql ENGINE = ReplicatedMergeTree( @@ -21,7 +19,7 @@ ENGINE = ReplicatedMergeTree( ) ``` -包含: +包括: ```sql ENGINE = ReplicatedMergeTree @@ -29,7 +27,7 @@ ENGINE = ReplicatedMergeTree ::: -复制仅支持 MergeTree 系列的表引擎: +复制仅支持属于 MergeTree 系列的表: * ReplicatedMergeTree * ReplicatedSummingMergeTree @@ -39,21 +37,21 @@ ENGINE = ReplicatedMergeTree * ReplicatedVersionedCollapsingMergeTree * ReplicatedGraphiteMergeTree -复制是在单个表级别进行的,而不是在整个服务器级别。一个服务器可以同时存储已复制的表和未复制的表。 +复制在单表级别进行,而不是在整个服务器级别进行。单个服务器可以同时存储已复制表和未复制表。 复制不依赖于分片。每个分片都有自己独立的复制。 -针对 `INSERT` 和 `ALTER` 查询的压缩数据会被复制(更多信息,参见 [ALTER](/sql-reference/statements/alter) 文档)。 +`INSERT` 和 `ALTER` 查询的压缩数据会被复制(更多信息,参见 [ALTER](/sql-reference/statements/alter) 文档)。 -`CREATE`、`DROP`、`ATTACH`、`DETACH` 和 `RENAME` 查询只在单个服务器上执行,并不会被复制: +`CREATE`、`DROP`、`ATTACH`、`DETACH` 和 `RENAME` 查询在单个服务器上执行,不会被复制: -* `CREATE TABLE` 查询会在执行该查询的服务器上创建一个新的可复制的表。如果该表在其他服务器上已经存在,则会添加一个新副本。 -* `DROP TABLE` 查询会删除位于执行该查询的服务器上的副本。 +* `CREATE TABLE` 查询会在执行该查询的服务器上创建一个新的可复制表。如果此表已经存在于其他服务器上,它会增加一个新的副本。 +* `DROP TABLE` 查询会删除位于执行该查询的服务器上的该副本。 * `RENAME` 查询会在其中一个副本上重命名表。换句话说,复制表在不同副本上可以有不同的名称。 -ClickHouse 使用 [ClickHouse Keeper](/guides/sre/keeper/index.md) 来存储副本的元信息。也可以使用 3.4.5 或更高版本的 ZooKeeper,但推荐使用 ClickHouse Keeper。 +ClickHouse 使用 [ClickHouse Keeper](/guides/sre/keeper/index.md) 来存储副本的元信息。也可以使用 3.4.5 或更新版本的 ZooKeeper,但推荐使用 ClickHouse Keeper。 -要使用复制功能,请在服务器配置的 [zookeeper](/operations/server-configuration-parameters/settings#zookeeper) 部分中设置相关参数。 +要使用复制功能,请在服务器配置的 [zookeeper](/operations/server-configuration-parameters/settings#zookeeper) 部分设置相关参数。 :::note 不要忽视安全设置。ClickHouse 支持 ZooKeeper 安全子系统的 `digest` [ACL 方案](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl)。 @@ -78,10 +76,10 @@ ClickHouse 使用 [ClickHouse Keeper](/guides/sre/keeper/index.md) 来存储副 ``` -ClickHouse 还支持将副本元数据存储在辅助 ZooKeeper 集群中。方法是:在引擎参数中指定 ZooKeeper 集群名称和路径。 +ClickHouse 也支持将副本元数据存储在辅助 ZooKeeper 集群中。可以通过在引擎参数中指定 ZooKeeper 集群名称和路径来实现。 换句话说,它支持将不同表的元数据存储在不同的 ZooKeeper 集群中。 -设置辅助 ZooKeeper 集群地址的示例: +辅助 ZooKeeper 集群地址配置示例: ```xml @@ -108,59 +106,57 @@ ClickHouse 还支持将副本元数据存储在辅助 ZooKeeper 集群中。方 ``` -要将表元数据存储在一个额外的 ZooKeeper 集群中,而不是默认的 ZooKeeper 集群,可以使用 SQL 创建一个基于 ReplicatedMergeTree 引擎的表,如下所示: +要将表元数据存储在辅助 ZooKeeper 集群而不是默认的 ZooKeeper 集群中,可以使用 SQL 创建基于 ReplicatedMergeTree 引擎的表,如下所示: ```sql CREATE TABLE table_name ( ... ) ENGINE = ReplicatedMergeTree('zookeeper_name_configured_in_auxiliary_zookeepers:path', 'replica_name') ... ``` -你可以指定任何现有的 ZooKeeper 集群,系统会在其上使用一个目录用于存储自身数据(该目录在创建复制表时指定)。 - -如果在配置文件中未配置 ZooKeeper,则无法创建复制表,且所有已有的复制表都将是只读的。 +你可以指定任意现有的 ZooKeeper 集群,系统会在该集群上使用一个目录来存放自身数据(该目录在创建副本表时指定)。 +如果在配置文件中未配置 ZooKeeper,你将无法创建副本表,且任何已有的副本表都将变为只读。 -ZooKeeper 不用于 `SELECT` 查询,因为复制不会影响 `SELECT` 的性能,查询速度与非复制表一样快。在查询分布式复制表时,ClickHouse 的行为由 [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) 和 [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries) 这两个设置控制。 -对于每个 `INSERT` 查询,大约会通过若干事务向 ZooKeeper 添加十条记录。(更精确地说,这是针对每个插入的数据块;一个 `INSERT` 查询包含一个数据块,或者每 `max_insert_block_size = 1048576` 行一个数据块。)这会导致与非复制表相比,`INSERT` 的延迟略有增加。但如果按照建议以每秒不超过一次 `INSERT` 的批量方式插入数据,就不会产生任何问题。用于与单个 ZooKeeper 集群协同工作的整个 ClickHouse 集群,总共每秒只有数百个 `INSERT`。数据插入的吞吐量(每秒行数)与非复制数据一样高。 +ZooKeeper 不参与 `SELECT` 查询,因为复制不会影响 `SELECT` 的性能,查询速度与非复制表一样快。对于分布式复制表的查询,ClickHouse 的行为由 [max_replica_delay_for_distributed_queries](/operations/settings/settings.md/#max_replica_delay_for_distributed_queries) 和 [fallback_to_stale_replicas_for_distributed_queries](/operations/settings/settings.md/#fallback_to_stale_replicas_for_distributed_queries) 这两个设置控制。 -对于非常大的集群,可以为不同的分片使用不同的 ZooKeeper 集群。然而,根据我们的经验,在大约 300 台服务器的生产集群中,这并不是必要的。 +对于每个 `INSERT` 查询,会通过若干事务向 ZooKeeper 添加大约十条记录。(更精确地说,这是针对每个被插入的数据块;一个 INSERT 查询包含一个数据块,或者每 `max_insert_block_size = 1048576` 行一个数据块。)这会导致 `INSERT` 相比非复制表有略高的延迟。但如果遵循建议,以每秒不超过一个 `INSERT` 的批量方式插入数据,就不会产生任何问题。一个用于协调单个 ZooKeeper 集群的整个 ClickHouse 集群,总共每秒可处理数百个 `INSERT`。数据插入的吞吐量(每秒行数)与非复制数据一样高。 -复制是异步且多主的。`INSERT` 查询(以及 `ALTER`)可以发送到任何可用的服务器。数据会先插入到执行查询的服务器上,然后再复制到其他服务器上。由于是异步的,最近插入的数据会在一定延迟后才出现在其他副本上。如果部分副本不可用,则会在它们重新可用时再写入数据。如果某个副本是可用的,延迟就是通过网络传输压缩数据块所需的时间。用于为复制表执行后台任务的线程数可以通过 [background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size) 设置进行配置。 +对于非常大的集群,可以为不同的分片使用不同的 ZooKeeper 集群。不过根据我们的经验,在大约 300 台服务器的生产集群中,还没有发现这种做法是必要的。 -`ReplicatedMergeTree` 引擎为副本抓取(fetch)操作使用了单独的线程池。该线程池的大小由 [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size) 设置限制,并且可以通过重启服务器来调整。 +复制是异步的,并且是多主(multi-master)。`INSERT` 查询(以及 `ALTER`)可以发送到任何可用服务器。数据会先插入到执行查询的服务器上,然后再复制到其他服务器。由于复制是异步的,新插入的数据会在一定延迟后才出现在其他副本上。如果部分副本不可用,则当这些副本重新可用时数据才会被写入。如果某个副本是可用的,延迟就是在网络上传输压缩数据块所需的时间。用于处理复制表后台任务的线程数量可以通过 [background_schedule_pool_size](/operations/server-configuration-parameters/settings.md/#background_schedule_pool_size) 这个设置来配置。 -默认情况下,`INSERT` 查询只等待来自一个副本的数据写入确认。如果数据仅成功写入一个副本,而该副本所在的服务器随后宕机,存储的数据就会丢失。要启用从多个副本获取数据写入确认,请使用 `insert_quorum` 选项。 +`ReplicatedMergeTree` 引擎使用单独的线程池来处理复制数据拉取(replicated fetches)。该线程池的大小由 [background_fetches_pool_size](/operations/server-configuration-parameters/settings#background_fetches_pool_size) 设置限制,并且可以在重启服务器时进行调整。 -每个数据块都是原子写入的。`INSERT` 查询会被拆分为最多 `max_insert_block_size = 1048576` 行的数据块。换句话说,如果 `INSERT` 查询少于 1048576 行,则该查询是以原子方式完成写入的。 +默认情况下,INSERT 查询只等待来自一个副本的数据写入确认。如果数据仅成功写入一个副本,而该副本所在的服务器随之完全宕机,则已存储的数据会丢失。要启用从多个副本获取写入确认的能力,请使用 `insert_quorum` 选项。 -数据块会去重。对于多次写入相同的数据块(大小相同且包含相同行并且顺序相同的数据块),该数据块只会被写入一次。这样做是为了在发生网络故障、客户端应用无法确定数据是否已写入数据库时,可以简单地重复执行 `INSERT` 查询。将相同数据的 `INSERT` 发送到哪个副本并不重要。`INSERTs` 是幂等的。去重参数由 [merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree) 服务器设置控制。 +每个数据块的写入是原子的。INSERT 查询会被拆分为最多 `max_insert_block_size = 1048576` 行的数据块。换句话说,如果 `INSERT` 查询中少于 1048576 行,则整个查询是以原子方式完成的。 -在复制过程中,只有要插入的源数据会通过网络传输。后续的数据转换(合并)会在所有副本上以相同方式协调并执行。这样可以将网络使用量降到最低,这意味着当副本位于不同数据中心时,复制也能良好工作。(注意,在不同数据中心中复制数据是复制的主要目标。) +数据块会被去重。对于多次写入同一个数据块(具有相同大小、包含相同行且行顺序相同的数据块),该数据块只会被写入一次。这样设计的原因在于,网络故障时客户端应用可能不知道数据是否已写入数据库,因此可以直接重试 `INSERT` 查询。对于包含相同数据的 INSERT 来说,它被发送到了哪个副本并不重要。`INSERT` 操作是幂等的。去重参数由 [merge_tree](/operations/server-configuration-parameters/settings.md/#merge_tree) 服务器设置控制。 -你可以为相同的数据配置任意数量的副本。根据我们的经验,一个相对可靠且易于运维的方案是在生产环境中使用双副本复制,并且每台服务器使用 RAID-5 或 RAID-6(某些情况下使用 RAID-10)。 +在复制过程中,只有要插入的源数据会通过网络传输。后续的数据转换(合并)会在所有副本上以相同方式进行协调并执行。这样可以最大限度地减少网络使用量,这意味着当副本位于不同数据中心时,复制依然工作良好。(注意,将数据复制到不同数据中心是复制的主要目标。) -系统会监控副本上的数据同步情况,并能够在故障后进行恢复。故障切换可以是自动的(当数据差异较小时),也可以是半自动的(当数据差异过大时,这可能表明存在配置错误)。 +同一份数据可以拥有任意数量的副本。根据我们的经验,在生产环境中,一个相对可靠且易于运维的方案是使用双副本(double replication),并在每台服务器上使用 RAID-5 或 RAID-6(在某些情况下使用 RAID-10)。 +系统会监控副本上的数据同步情况,并且能够在故障后恢复。对于数据差异较小的情况,故障转移是自动完成的;对于数据差异过大的情况(可能表明存在配置错误),故障转移是半自动完成的。 - -## 创建复制表 +## 创建复制表 {#creating-replicated-tables} :::note -在 ClickHouse Cloud 中,副本复制由平台自动处理。 +在 ClickHouse Cloud 中,复制由系统自动处理。 -创建表时使用不带复制参数的 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree)。系统会在内部将 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) 重写为 [`SharedMergeTree`](/cloud/reference/shared-merge-tree),以实现复制和数据分发。 +使用不带复制参数的 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) 创建表。系统会在内部将 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) 重写为用于复制和数据分布的 [`SharedMergeTree`](/cloud/reference/shared-merge-tree)。 -避免使用 `ReplicatedMergeTree` 或手动指定复制参数,因为复制由平台统一管理。 +请避免使用 `ReplicatedMergeTree` 或指定复制参数,因为复制由平台统一管理。 ::: -### Replicated*MergeTree 参数 +### Replicated*MergeTree 参数 {#replicatedmergetree-parameters} -| 参数 | 说明 | -| ------------------ | ----------------------------------------------- | -| `zoo_path` | 在 ClickHouse Keeper 中表的路径。 | -| `replica_name` | 在 ClickHouse Keeper 中副本的名称。 | -| `other_parameters` | 用于创建复制版本的底层引擎参数,例如 `ReplacingMergeTree` 中的版本参数。 | +| 参数 | 描述 | +| ------------------ | -------------------------------------------------- | +| `zoo_path` | ClickHouse Keeper 中该表的路径。 | +| `replica_name` | ClickHouse Keeper 中的副本名称。 | +| `other_parameters` | 用于创建该副本引擎版本的参数,例如 `ReplacingMergeTree` 中的 version。 | 示例: @@ -171,6 +167,7 @@ CREATE TABLE table_name CounterID UInt32, UserID UInt32, ver UInt16 +) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}', ver) PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) @@ -190,7 +187,7 @@ SAMPLE BY intHash32(UserID); ``` -如示例所示,这些参数可以包含花括号中的替换占位符。替换值取自配置文件的 [macros](/operations/server-configuration-parameters/settings.md/#macros) 部分。 +如该示例所示,这些参数可以在花括号中包含可替换的占位符。替换后的值取自配置文件的 [macros](/operations/server-configuration-parameters/settings.md/#macros) 部分。 示例: @@ -201,33 +198,33 @@ SAMPLE BY intHash32(UserID); ``` -在 ClickHouse Keeper 中,每个复制表的路径都必须唯一。不同分片上的表应当具有不同的路径。 +在 ClickHouse Keeper 中,指向表的路径对于每个 Replicated 表都必须是唯一的。不同分片上的表应使用不同的路径。 在本例中,路径由以下部分组成: -`/clickhouse/tables/` 是通用前缀。建议严格使用这一前缀。 +`/clickhouse/tables/` 是公共前缀。建议原样使用该前缀。 `{shard}` 将被展开为分片标识符。 -`table_name` 是 ClickHouse Keeper 中该表对应节点的名称。将其设置为与表名相同是一个不错的选择。之所以要显式定义,是因为与表名不同,它在执行 RENAME 查询后不会改变。 -*提示*:也可以在 `table_name` 前添加数据库名,例如:`db_name.table_name` +`table_name` 是该表在 ClickHouse Keeper 中对应节点的名称。通常将其设置为与表名相同是个好主意。之所以要显式定义,是因为与表名不同的是,它在执行 RENAME 查询后不会改变。 +*提示*:也可以在 `table_name` 前加上数据库名,例如 `db_name.table_name`。 -可以使用两个内置替换量 `{database}` 和 `{table}`,它们分别展开为表名和数据库名(除非在 `macros` 部分中定义了这些宏)。因此,可以将 ZooKeeper 路径指定为 `'/clickhouse/tables/{shard}/{database}/{table}'`。 -在使用这些内置替换量时,请谨慎处理表重命名。ClickHouse Keeper 中的路径无法更改,而当表被重命名后,宏会展开为不同的路径,表将引用 ClickHouse Keeper 中不存在的路径,并进入只读模式。 +可以使用两个内置替换 `{database}` 和 `{table}`,它们分别展开为表名和数据库名(除非在 `macros` 部分中定义了这些宏)。因此,ZooKeeper 路径可以指定为 `'/clickhouse/tables/{shard}/{database}/{table}'`。 +在使用这些内置替换时,请谨慎处理表重命名。ClickHouse Keeper 中的路径无法更改,当表被重命名后,宏会展开为不同的路径,表将指向 ClickHouse Keeper 中不存在的路径,并进入只读模式。 副本名称用于标识同一张表的不同副本。可以像示例中那样使用服务器名。该名称只需要在每个分片内保持唯一即可。 -你可以不使用替换量,而是显式定义这些参数。对于测试以及配置小型集群时,这可能更加方便。不过,在这种情况下,将无法使用分布式 DDL 查询(`ON CLUSTER`)。 +可以显式定义这些参数,而不是使用替换。这在测试以及配置小型集群时可能更为方便。但是,在这种情况下将无法使用分布式 DDL 查询(`ON CLUSTER`)。 -在处理大型集群时,建议使用替换量,因为这可以降低出错的概率。 +在处理大型集群时,建议使用替换,因为它们可以降低出错概率。 -你可以在服务器配置文件中为 `Replicated` 表引擎指定默认参数。例如: +可以在服务器配置文件中为 `Replicated` 表引擎指定默认参数。例如: ```xml /clickhouse/tables/{shard}/{database}/{table} {replica} ``` -在这种情况下,在创建表时可以省略参数: +在这种情况下,创建表时可以省略参数: ```sql CREATE TABLE table_name ( @@ -236,8 +233,7 @@ CREATE TABLE table_name ( ORDER BY x; ``` -这相当于: - +它等同于: ```sql CREATE TABLE table_name ( @@ -246,105 +242,102 @@ CREATE TABLE table_name ( ORDER BY x; ``` -在每个副本上运行 `CREATE TABLE` 查询。此查询会创建一个新的复制表,或向现有复制表中添加一个新的副本。 +在每个副本上运行 `CREATE TABLE` 查询。此查询会创建一个新的复制表,或者将一个新的副本添加到现有表中。 -如果是在表在其他副本上已经包含一些数据之后才添加新副本,那么在运行查询后,这些数据会从其他副本复制到新的副本。换句话说,新副本会与其他副本进行同步。 +如果是在其他副本上已经存在部分数据之后才添加新的副本,那么在运行该查询后,数据会从其他副本复制到新的副本。换句话说,新副本会与其他副本进行同步。 -要删除副本,请运行 `DROP TABLE`。但这只会删除一个副本——也就是你执行该查询所在服务器上的那个副本。 +要删除一个副本,请运行 `DROP TABLE`。但这只会删除一个副本——也就是你运行该查询所在服务器上的那个副本。 -## 故障后的恢复 +## 故障后的恢复 {#recovery-after-failures} -如果在服务器启动时 ClickHouse Keeper 不可用,复制表会切换到只读模式。系统会定期尝试连接 ClickHouse Keeper。 +如果在服务器启动时 ClickHouse Keeper 不可用,复制表会切换为只读模式。系统会定期尝试连接 ClickHouse Keeper。 -如果在执行 `INSERT` 时 ClickHouse Keeper 不可用,或者在与 ClickHouse Keeper 交互时发生错误,则会抛出异常。 +如果在执行 `INSERT` 期间 ClickHouse Keeper 不可用,或者在与 ClickHouse Keeper 交互时发生错误,系统会抛出异常。 -连接到 ClickHouse Keeper 之后,系统会检查本地文件系统中的数据集是否与预期的数据集匹配(ClickHouse Keeper 会存储这些信息)。如果存在轻微的不一致,系统会通过与副本同步数据来解决。 +连接到 ClickHouse Keeper 之后,系统会检查本地文件系统中的数据集是否与预期的数据集匹配(ClickHouse Keeper 中保存了这些信息)。如果存在轻微不一致,系统会通过与副本同步数据来解决。 -如果系统检测到损坏的数据分片(文件大小错误)或无法识别的分片(已写入文件系统但未记录到 ClickHouse Keeper 的分片),则会将它们移动到 `detached` 子目录中(不会被删除)。任何缺失的分片都会从副本中复制。 +如果系统检测到损坏的数据分区片段(文件大小错误)或无法识别的分区片段(已写入文件系统但未在 ClickHouse Keeper 中记录的分区片段),则会将它们移动到 `detached` 子目录中(不会被删除)。任何缺失的分区片段都会从副本中复制。 请注意,ClickHouse 不会执行任何破坏性操作,例如自动删除大量数据。 -当服务器启动(或与 ClickHouse Keeper 建立新会话)时,它只检查所有文件的数量和大小。如果文件大小相同但中间某处字节发生了变化,则不会立即检测到,只会在尝试为 `SELECT` 查询读取数据时才会发现。此时查询会抛出关于校验和不匹配或压缩块大小不匹配的异常。在这种情况下,数据分片会被加入到验证队列中,并在必要时从副本中复制。 +在服务器启动时(或与 ClickHouse Keeper 建立新会话时),系统只会检查所有文件的数量和大小。如果文件大小匹配,但中间某处的字节发生了更改,则不会立刻被检测到,只有在尝试为 `SELECT` 查询读取数据时才会发现。此时查询会抛出关于校验和不匹配或压缩块大小不匹配的异常。在这种情况下,数据分区片段会被加入验证队列,并在必要时从副本中复制。 -如果本地数据集与预期数据集的差异过大,就会触发安全机制。服务器会将此记录到日志中并拒绝启动。这样设计的原因是,这种情况可能表明配置错误,例如某个分片上的副本被误配置成了另一个分片上的副本。不过,该机制的阈值设置得相当低,因此这种情况也可能在正常的故障恢复过程中发生。在这种情况下,数据通过“按下一个按钮”实现半自动恢复。 +如果本地数据集与预期的数据集差异过大,会触发安全机制。服务器会将此写入日志,并拒绝启动。原因是这种情况可能表明存在配置错误,例如某个分片上的副本被误配置为另一个分片上的副本。然而,该机制的阈值设置得相当低,这种情况也可能在正常的故障恢复过程中出现。在这种情况下,数据会通过“按下一个按钮”的方式进行半自动恢复。 -要开始恢复,在 ClickHouse Keeper 中创建节点 `/path_to_table/replica_name/flags/force_restore_data` 并填入任意内容,或者运行以下命令来恢复所有复制表: +要开始恢复,请在 ClickHouse Keeper 中创建节点 `/path_to_table/replica_name/flags/force_restore_data`(内容任意),或者运行命令以恢复所有复制表: ```bash sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data ``` -然后重启服务器。服务器在启动时会删除这些标志位并开始恢复。 +随后重启服务器。服务器在启动时会删除这些标志文件并开始恢复。 ## 完全数据丢失后的恢复 {#recovery-after-complete-data-loss} -如果某个服务器上的所有数据和元数据都丢失了,请按照以下步骤进行恢复: +如果某台服务器上的所有数据和元数据都丢失了,请按以下步骤进行恢复: -1. 在该服务器上安装 ClickHouse。正确配置包含分片标识符和副本信息的配置文件中的 substitution(替换规则)(如果你使用了它们)。 -2. 如果存在未复制的表且需要在服务器上手动恢复,请从其某个副本复制这些表的数据(目录为 `/var/lib/clickhouse/data/db_name/table_name/`)。 -3. 从某个副本复制位于 `/var/lib/clickhouse/metadata/` 中的表定义文件。如果在表定义中显式指定了分片或副本标识符,请将其修改为与当前副本相对应。(或者,启动服务器并执行所有本应位于 `/var/lib/clickhouse/metadata/` 目录下 .sql 文件中的 `ATTACH TABLE` 查询。) +1. 在该服务器上安装 ClickHouse。在包含分片标识符和副本信息(如使用副本)的配置文件中正确配置 substitutions。 +2. 如果有需要在服务器上手动复制的非复制表(unreplicated tables),请从副本中拷贝其数据(目录 `/var/lib/clickhouse/data/db_name/table_name/`)。 +3. 从副本中拷贝位于 `/var/lib/clickhouse/metadata/` 的表定义。如果在表定义中显式定义了分片或副本标识符,请更正为与此副本相对应。(或者,启动服务器并执行所有本应位于 `/var/lib/clickhouse/metadata/` 目录下 .sql 文件中的 `ATTACH TABLE` 查询。) 4. 要开始恢复,请在 ClickHouse Keeper 中创建节点 `/path_to_table/replica_name/flags/force_restore_data`(内容任意),或者运行命令以恢复所有复制表:`sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data` -然后启动服务器(如果已在运行,则重启)。数据会从其他副本中下载。 - -另一种恢复方式是从 ClickHouse Keeper 中删除丢失副本的信息(`/path_to_table/replica_name`),然后按照“[创建复制表](#creating-replicated-tables)”中所述重新创建该副本。 - -恢复过程中对网络带宽没有限制。如果你一次恢复许多副本,请注意这一点。 +然后启动服务器(如果已经在运行,则重启)。数据会从其他副本中下载。 +另一种恢复方式是从 ClickHouse Keeper 中删除与丢失副本相关的信息(`/path_to_table/replica_name`),然后按照“[创建复制表](#creating-replicated-tables)”中的说明重新创建该副本。 +恢复过程中对网络带宽没有限制。如果你同时恢复大量副本,请注意这一点。 -## 从 MergeTree 转换为 ReplicatedMergeTree +## 从 MergeTree 转换为 ReplicatedMergeTree {#converting-from-mergetree-to-replicatedmergetree} -我们使用术语 `MergeTree` 来统称 `MergeTree family` 中的所有表引擎,对 `ReplicatedMergeTree` 也是同样的用法。 +我们使用术语 `MergeTree` 指代 `MergeTree family` 中的所有表引擎,对 `ReplicatedMergeTree` 也采用相同的约定。 -如果您有一个是通过手动方式实现复制的 `MergeTree` 表,可以将它转换为复制表。如果您已经在一个 `MergeTree` 表中收集了大量数据,现在希望启用复制功能,则可能需要执行此操作。 +如果有一个通过手动方式进行复制的 `MergeTree` 表,可以将其转换为复制表。如果已经在某个 `MergeTree` 表中累积了大量数据,并且现在希望启用复制功能,则可能需要这样做。 -[ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 语句可以将已分离的 `MergeTree` 表以 `ReplicatedMergeTree` 的形式附加。 +[ATTACH TABLE ... AS REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 语句允许将已分离的 `MergeTree` 表附加为 `ReplicatedMergeTree`。 -如果在表的数据目录中(对于 `Atomic` 数据库,即 `/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/`)设置了 `convert_to_replicated` 标志,则在服务器重启时可以自动将 `MergeTree` 表转换。创建一个空的 `convert_to_replicated` 文件,下一次服务器重启时该表将作为复制表加载。 +如果在表的数据目录(对于 `Atomic` 数据库为 `/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/`)下设置了 `convert_to_replicated` 标记,则在服务器重启时可以自动将 `MergeTree` 表转换为复制表。 +创建一个空的 `convert_to_replicated` 文件,下一次服务器重启时,该表将作为复制表加载。 -可以使用此查询来获取表的数据路径。如果表有多个数据路径,则必须使用第一个路径。 +可以使用以下查询获取表的数据路径。如果表有多个数据路径,则必须使用第一个。 ```sql SELECT data_paths FROM system.tables WHERE table = 'table_name' AND database = 'database_name'; ``` 请注意,ReplicatedMergeTree 表将会使用 `default_replica_path` 和 `default_replica_name` 设置的值来创建。 -要在其他副本上创建已转换的表,需要在 `ReplicatedMergeTree` 引擎的第一个参数中显式指定其路径。可以使用以下查询来获取其路径。 +要在其他副本上创建转换后的表,需要在 `ReplicatedMergeTree` 引擎的第一个参数中显式指定其路径。可以使用以下查询来获取该路径。 ```sql SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; ``` -还有一种手动完成此操作的方法。 +还有一种手动方式可以实现此操作。 -如果各个副本上的数据不一致,先进行同步,或者在除一个副本外的所有副本上删除这部分数据。 +如果各个副本上的数据不一致,请先对其进行同步,或者在除一个副本外的所有副本上删除这些数据。 -将现有的 MergeTree 表重命名,然后使用原来的名称创建一个 `ReplicatedMergeTree` 表。 -将旧表中的数据移动到新表数据目录内的 `detached` 子目录(`/var/lib/clickhouse/data/db_name/table_name/`)。 -然后在其中一个副本上运行 `ALTER TABLE ATTACH PARTITION`,将这些数据部件添加到工作集中。 +先重命名现有的 MergeTree 表,然后使用旧表名创建一个 `ReplicatedMergeTree` 表。 +将旧表中的数据移动到新表数据目录下的 `detached` 子目录中(`/var/lib/clickhouse/data/db_name/table_name/`)。 +然后在其中一个副本上运行 `ALTER TABLE ATTACH PARTITION`,将这些分区片段添加到正在使用的工作集中。 ## 从 ReplicatedMergeTree 转换为 MergeTree {#converting-from-replicatedmergetree-to-mergetree} -使用 [ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 语句,在单个服务器上将已分离(detached)的 `ReplicatedMergeTree` 表作为 `MergeTree` 表附加。 +使用 [ATTACH TABLE ... AS NOT REPLICATED](/sql-reference/statements/attach.md#attach-mergetree-table-as-replicatedmergetree) 语句,在单个服务器上将已分离的 `ReplicatedMergeTree` 表作为 `MergeTree` 表附加。 -另一种方式需要重启服务器。先创建一个名称不同的 MergeTree 表。将 `ReplicatedMergeTree` 表数据目录中的所有数据移动到新表的数据目录。然后删除该 `ReplicatedMergeTree` 表并重启服务器。 +另一种做法需要重启服务器。先创建一个名称不同的 MergeTree 表。将 `ReplicatedMergeTree` 表数据目录中的所有数据移动到新表的数据目录中。然后删除 `ReplicatedMergeTree` 表并重启服务器。 -如果希望在不启动服务器的情况下移除一个 `ReplicatedMergeTree` 表: +如果希望在不启动服务器的情况下移除 `ReplicatedMergeTree` 表: - 删除元数据目录(`/var/lib/clickhouse/metadata/`)中对应的 `.sql` 文件。 -- 删除 ClickHouse Keeper 中对应的路径(`/path_to_table/replica_name`)。 - -之后,可以启动服务器,创建一个 `MergeTree` 表,将数据移动到其数据目录,然后重启服务器。 - +- 删除 ClickHouse Keeper 中相应的路径(`/path_to_table/replica_name`)。 +完成上述操作后,可以启动服务器,创建一个 `MergeTree` 表,将数据移动到该表的数据目录中,然后重启服务器。 ## 当 ClickHouse Keeper 集群中的元数据丢失或损坏时的恢复 {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} -如果 ClickHouse Keeper 中的数据丢失或损坏,可以按照上文所述,将数据迁移到一个非复制表以进行保留。 +如果 ClickHouse Keeper 中的数据丢失或损坏,可以按照上文所述,将数据迁移到未复制表中以进行保存。 **另请参阅** @@ -352,4 +345,4 @@ SELECT zookeeper_path FROM system.replicas WHERE table = 'table_name'; - [background_fetches_pool_size](/operations/server-configuration-parameters/settings.md/#background_fetches_pool_size) - [execute_merges_on_single_replica_time_threshold](/operations/settings/merge-tree-settings#execute_merges_on_single_replica_time_threshold) - [max_replicated_fetches_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_fetches_network_bandwidth) -- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) +- [max_replicated_sends_network_bandwidth](/operations/settings/merge-tree-settings.md/#max_replicated_sends_network_bandwidth) \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md index 0dff8da5d6a..8d57f59172d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/summingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# SummingMergeTree 表引擎 +# SummingMergeTree 表引擎 {#summingmergetree-table-engine} 该引擎继承自 [MergeTree](/engines/table-engines/mergetree-family/versionedcollapsingmergetree)。不同之处在于,当对 `SummingMergeTree` 表的数据部分进行合并时,ClickHouse 会将所有具有相同主键(更准确地说,是具有相同[排序键](../../../engines/table-engines/mergetree-family/mergetree.md))的多行,替换为一行,其中数值数据类型列的值为这些行的求和结果。如果排序键的设计使得单个键值对应大量行,这种方式可以显著减少存储体积并加速数据查询。 @@ -17,7 +17,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -34,16 +34,16 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] 有关请求参数的描述,请参阅[请求描述](../../../sql-reference/statements/create/table.md)。 -### SummingMergeTree 的参数 +### SummingMergeTree 的参数 {#parameters-of-summingmergetree} -#### 列 +#### 列 {#columns} `columns` — 一个包含需要求和的列名的元组(tuple)。可选参数。 这些列必须是数值类型,且不能出现在分区键或排序键中。 如果未指定 `columns`,ClickHouse 会对所有数值类型且不在排序键中的列进行求和。 -### 查询子句 +### 查询子句 {#query-clauses} 在创建 `SummingMergeTree` 表时,需要与创建 `MergeTree` 表时相同的[子句](../../../engines/table-engines/mergetree-family/mergetree.md)。 @@ -69,7 +69,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 使用示例 +## 使用示例 {#usage-example} 请看下表: @@ -103,13 +103,13 @@ SELECT key, sum(value) FROM summtt GROUP BY key ``` -## 数据处理 +## 数据处理 {#data-processing} 当数据被插入到表中时,会按原样保存。ClickHouse 会定期合并已插入的数据部分,在此过程中,具有相同主键的行会被求和,并在每个合并结果的数据部分中替换为一行。 ClickHouse 合并数据部分的方式可能导致:不同的合并结果数据部分中仍然可能包含具有相同主键的行,即求和可能是不完整的。因此,在执行查询时(`SELECT`),应按照上面的示例使用聚合函数 [sum()](/sql-reference/aggregate-functions/reference/sum) 和 `GROUP BY` 子句。 -### 求和的通用规则 +### 求和的通用规则 {#common-rules-for-summation} 数值数据类型列中的值会被求和。参与求和的列集合由参数 `columns` 定义。 @@ -119,11 +119,11 @@ ClickHouse 合并数据部分的方式可能导致:不同的合并结果数据 主键列中的值不会被求和。 -### AggregateFunction 列中的求和 +### AggregateFunction 列中的求和 {#the-summation-in-the-aggregatefunction-columns} 对于 [AggregateFunction 类型](../../../sql-reference/data-types/aggregatefunction.md) 的列,ClickHouse 的行为类似于 [AggregatingMergeTree](../../../engines/table-engines/mergetree-family/aggregatingmergetree.md) 引擎,会根据该函数进行聚合。 -### 嵌套结构 +### 嵌套结构 {#nested-structures} 表可以包含以特殊方式处理的嵌套数据结构。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md index 14c2b0668d3..31d7d8e3314 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/mergetree-family/versionedcollapsingmergetree.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# VersionedCollapsingMergeTree 表引擎 +# VersionedCollapsingMergeTree 表引擎 {#versionedcollapsingmergetree-table-engine} 该引擎: @@ -22,7 +22,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -39,7 +39,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] 有关查询参数的详细说明,请参阅[查询说明](../../../sql-reference/statements/create/table.md)。 -### 引擎参数 +### 引擎参数 {#engine-parameters} ```sql VersionedCollapsingMergeTree(sign, version) @@ -50,7 +50,7 @@ VersionedCollapsingMergeTree(sign, version) | `sign` | 行类型列的列名:`1` 表示“state”行,`-1` 表示“cancel”行。 | [`Int8`](/sql-reference/data-types/int-uint) | | `version` | 对象状态版本列的列名。 | [`Int*`](/sql-reference/data-types/int-uint), [`UInt*`](/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) | -### 查询子句 +### 查询子句 {#query-clauses} 在创建 `VersionedCollapsingMergeTree` 表时,需要与创建 `MergeTree` 表时相同的[子句](../../../engines/table-engines/mergetree-family/mergetree.md)。 @@ -82,9 +82,9 @@ VersionedCollapsingMergeTree(sign, version) -## 折叠 +## 折叠 {#table_engines_versionedcollapsingmergetree} -### 数据 +### 数据 {#data} 考虑这样一种情况:你需要为某个对象保存不断变化的数据。为某个对象仅保留一行记录,并在有变化时更新这一行是合理的。然而,对于 DBMS 来说,执行 `UPDATE` 操作代价高且速度慢,因为这需要在存储中重写数据。如果你需要快速写入数据,则不适合使用 `UPDATE`,但可以按如下方式顺序写入对象的变更。 @@ -130,7 +130,7 @@ VersionedCollapsingMergeTree(sign, version) 2. 列中持续增长的长数组会因为写入负载而降低引擎效率。数据越简单直接,引擎效率越高。 3. `SELECT` 结果高度依赖于对象变更历史的一致性。在准备要插入的数据时要非常谨慎。对于不一致的数据,你可能会得到不可预测的结果,例如本应为非负指标(如会话深度)的负值。 -### 算法 +### 算法 {#table_engines-versionedcollapsingmergetree-algorithm} 当 ClickHouse 合并数据分片时,会删除每一对具有相同主键和版本、但 `Sign` 不同的行。行的顺序无关紧要。 @@ -149,7 +149,7 @@ ClickHouse 不保证具有相同主键的所有行会位于同一个结果数据 -## 使用示例 +## 使用示例 {#example-of-use} 示例数据: 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..ad12189d81c 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-table-engine} -`Alias` 引擎会创建一个指向另一张表的代理表。所有读写操作都会转发到目标表,而别名表本身不存储任何数据,只维护对目标表的引用。 + +`Alias` 引擎会创建指向另一张表的代理。所有读写操作都会被转发到目标表,而别名表本身不存储任何数据,只维护对目标表的引用。 +:::info +这是一个实验性特性,在未来版本中可能会以不向后兼容的方式发生变更。 +要启用 Alias 表引擎,请通过设置 [allow_experimental_alias_table_engine](/operations/settings/settings#allow_experimental_alias_table_engine)。 +输入命令 `set allow_experimental_alias_table_engine = 1`。 +::: -## 创建表 +## 创建表 {#creating-a-table} ```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,29 +58,27 @@ 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} - -## 用法示例 - -### 创建基本别名 +### 创建基本别名 {#basic-alias-creation} 在同一数据库中创建一个简单的别名: @@ -104,9 +108,10 @@ SELECT * FROM data_alias; └────┴──────┴───────┘ ``` -### 跨数据库别名 -创建一个指向其他数据库中某张表的别名: +### 跨数据库别名 {#cross-database-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; ``` -### 通过别名进行写入操作 -所有写入操作都会转发到目标表: +### 通过别名执行写入操作 {#write-operations} + +经由别名的所有写入操作都会被转发到其目标表: ```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` 操作会修改目标表的表结构: +### 表结构修改 {#schema-modification} + +`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` 操作: +### 数据变更 {#data-mutations} + +支持 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; └────┴──────────┴───────┴────────┘ ``` -### 分区操作 -对于分区表,分区操作会转发: +### 分区操作 {#partition-operations} +对于分区表,分区操作将被转发: ```sql CREATE TABLE logs ( @@ -259,9 +267,10 @@ ALTER TABLE logs_alias ATTACH PARTITION '202402'; SELECT count() FROM logs_alias; -- 返回 3 ``` -### 表优化 -OPTIMIZE 操作会在目标表中合并数据分片: +### 表优化 {#table-optimization} + +对目标表中的分片执行合并优化操作: ```sql CREATE TABLE events ( @@ -272,28 +281,29 @@ 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 ``` -### 别名管理 + +### 别名管理 {#alias-management} 可以分别对别名进行重命名或删除: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md index 531e2a971d4..92663abc42d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/buffer.md @@ -7,9 +7,7 @@ title: 'Buffer 表引擎' doc_type: 'reference' --- - - -# Buffer 表引擎 +# Buffer 表引擎 {#buffer-table-engine} 在写入时先将要写入的数据缓存在 RAM 中,并定期刷新到另一张表。读取时会同时从缓冲区和另一张表中读取数据。 @@ -21,27 +19,27 @@ doc_type: 'reference' Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes [,flush_time [,flush_rows [,flush_bytes]]]) ``` -### 引擎参数 +### 引擎参数 {#engine-parameters} -#### `database` +#### `database` {#database} `database` – 数据库名称。可以使用 `currentDatabase()` 或其他返回字符串的常量表达式。 -#### `table` +#### `table` {#table} `table` – 要将数据刷新到的目标表。 -#### `num_layers` +#### `num_layers` {#num_layers} `num_layers` – 并行层数。从物理上看,该表将表示为 `num_layers` 个彼此独立的缓冲区。 -#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, 和 `max_bytes` +#### `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, 和 `max_bytes` {#min_time-max_time-min_rows-max_rows-min_bytes-and-max_bytes} 用于从缓冲区刷新数据的触发条件。 -### 可选引擎参数 +### 可选引擎参数 {#optional-engine-parameters} -#### `flush_time`, `flush_rows`, 和 `flush_bytes` +#### `flush_time`, `flush_rows`, 和 `flush_bytes` {#flush_time-flush_rows-and-flush_bytes} 在后台从缓冲区刷新数据的触发条件(省略或设为零表示没有 `flush*` 参数)。 @@ -49,15 +47,15 @@ Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_ 另外,如果至少一个 `flush*` 条件满足,就会在后台发起一次刷新操作。这与 `max*` 不同,因为 `flush*` 允许单独配置后台刷新,以避免对写入 Buffer 表的 `INSERT` 查询增加延迟。 -#### `min_time`, `max_time`, 和 `flush_time` +#### `min_time`, `max_time`, 和 `flush_time` {#min_time-max_time-and-flush_time} 从第一次写入缓冲区开始计算的时间(秒)条件。 -#### `min_rows`, `max_rows`, 和 `flush_rows` +#### `min_rows`, `max_rows`, 和 `flush_rows` {#min_rows-max_rows-and-flush_rows} 缓冲区中行数的条件。 -#### `min_bytes`, `max_bytes`, 和 `flush_bytes` +#### `min_bytes`, `max_bytes`, 和 `flush_bytes` {#min_bytes-max_bytes-and-flush_bytes} 缓冲区中字节数的条件。 @@ -84,7 +82,6 @@ CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 1, 10, 可以为数据库名和表名设置用单引号括起来的空字符串。这表示不存在目标表。在这种情况下,当达到数据刷新条件时,缓冲区会直接被清空。这对于在内存中保留一个数据时间窗口可能很有用。 - 从 Buffer 表中读取时,数据会同时从缓冲区和目标表(如果存在)中进行处理。 注意,Buffer 表不支持索引。换句话说,缓冲区中的数据会被全量扫描,这在缓冲区很大时可能会比较慢。(对于从属表中的数据,将使用该表所支持的索引。) diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md index e3fe4f14967..b01ccb05e74 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/dictionary.md @@ -8,15 +8,11 @@ title: 'Dictionary 表引擎' doc_type: 'reference' --- - - -# Dictionary 表引擎 +# Dictionary 表引擎 {#dictionary-table-engine} `Dictionary` 引擎将 [dictionary](../../../sql-reference/dictionaries/index.md) 数据显示为 ClickHouse 表。 - - -## 示例 +## 示例 {#example} 例如,假设有一个名为 `products` 的字典,其配置如下: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md index 03b80031c73..4378297fbb4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/distributed.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# 分布式表引擎 +# 分布式表引擎 {#distributed-table-engine} :::warning 在 Cloud 中使用 Distributed 引擎 要在 ClickHouse Cloud 中创建分布式表引擎,可以使用 [`remote` 和 `remoteSecure`](../../../sql-reference/table-functions/remote) 表函数。 @@ -21,7 +21,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#distributed-creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -33,7 +33,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] [SETTINGS name=value, ...] ``` -### 基于现有表 +### 基于现有表 {#distributed-from-a-table} 当 `Distributed` 表指向当前服务器上的某个表时,你可以沿用该表的表结构: @@ -41,7 +41,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 ENGINE = Distributed(cluster, database, table[, sharding_key[, policy_name]]) [SETTINGS name=value, ...] ``` -### 分布式参数 +### 分布式参数 {#distributed-parameters} | Parameter | Description | | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | @@ -56,7 +56,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] AS [db2.]name2 * [distributed_foreground_insert](../../../operations/settings/settings.md#distributed_foreground_insert) 设置 * [MergeTree](../../../engines/table-engines/mergetree-family/mergetree.md#table_engine-mergetree-multiple-volumes) 使用示例 -### 分布式设置 +### 分布式设置 {#distributed-settings} | Setting | Description | Default value | @@ -102,7 +102,7 @@ SETTINGS 在数据库名的位置上,你可以使用返回字符串的常量表达式。例如:`currentDatabase()`。 -## 集群 +## 集群 {#distributed-clusters} 集群是在[服务器配置文件](../../../operations/configuration-files.md)中配置的: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md index 7a5c4cf69ce..d467f21d67f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/executable.md @@ -7,20 +7,16 @@ title: 'Executable 和 ExecutablePool 表引擎' doc_type: 'reference' --- - - -# Executable 和 ExecutablePool 表引擎 +# Executable 和 ExecutablePool 表引擎 {#executable-and-executablepool-table-engines} `Executable` 和 `ExecutablePool` 表引擎允许你定义一张表,其行由你编写的脚本生成(通过向 **stdout** 写入行)。可执行脚本存储在 `users_scripts` 目录中,并且可以从任意数据源读取数据。 -- `Executable` 表:每次查询都会运行脚本 -- `ExecutablePool` 表:维护一个持久进程池,并从池中获取进程来执行读取操作 +* `Executable` 表:每次查询都会运行脚本 +* `ExecutablePool` 表:维护一个持久进程池,并从池中获取进程来执行读取操作 你还可以选择性地添加一个或多个输入查询,将其结果以流式方式写入 **stdin**,供脚本读取。 - - -## 创建 `Executable` 表 +## 创建 `Executable` 表 {#creating-an-executable-table} `Executable` 表引擎需要两个参数:脚本名称和输入数据的格式。你还可以可选地传入一个或多个输入查询: @@ -102,8 +98,7 @@ SELECT * FROM my_executable_table └───┴────────────┘ ``` - -## 将查询结果传递给脚本 +## 将查询结果传递给脚本 {#passing-query-results-to-a-script} Hacker News 网站的用户会留下评论。Python 提供了一个自然语言处理工具包(`nltk`),其中的 `SentimentIntensityAnalyzer` 可用于判断评论是正面、负面还是中性,并为其打分,分值范围在 -1(极度负面评论)到 1(极度正面评论)之间。我们来创建一个 `Executable` 表,使用 `nltk` 计算 Hacker News 评论的情感。 @@ -177,7 +172,6 @@ FROM sentiment 响应如下: - ```response ┌───────id─┬─情感值────┐ │ 7398199 │ 0.4404 │ @@ -203,8 +197,7 @@ FROM sentiment └──────────┴───────────┘ ``` - -## 创建 `ExecutablePool` 表 +## 创建 `ExecutablePool` 表 {#creating-an-executablepool-table} `ExecutablePool` 的语法与 `Executable` 类似,但 `ExecutablePool` 表有几个特有的相关设置: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md index 0353a40ee42..5685af197ad 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/external-data.md @@ -7,7 +7,7 @@ title: '用于查询处理的外部数据' doc_type: 'reference' --- -# 用于查询处理的外部数据 +# 用于查询处理的外部数据 {#external-data-for-query-processing} ClickHouse 允许在发送 `SELECT` 查询时,将查询处理所需的数据一并发送到服务器。此数据会被放入一张临时表(参见“临时表”一节),并且可以在查询中使用(例如用于 `IN` 运算符)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md index e916851dad6..1b775e7e30d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/file.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# File 表引擎 +# File 表引擎 {#file-table-engine} `File` 表引擎将数据保存在一个文件中,文件使用受支持的[文件格式](/interfaces/formats#formats-overview)之一(如 `TabSeparated`、`Native` 等)。 @@ -25,7 +25,7 @@ doc_type: 'reference' -## 在 ClickHouse 服务器中的使用 +## 在 ClickHouse 服务器中的使用 {#usage-in-clickhouse-server} ```sql File(Format) @@ -44,7 +44,7 @@ ClickHouse 不允许为 `File` 指定文件系统路径。它将使用服务器 ::: -## 示例 +## 示例 {#example} **1.** 创建 `file_engine_table` 表: @@ -76,7 +76,7 @@ SELECT * FROM file_engine_table ``` -## 在 ClickHouse-local 中的用法 +## 在 ClickHouse-local 中的用法 {#usage-in-clickhouse-local} 在 [clickhouse-local](../../../operations/utilities/clickhouse-local.md) 中,File 引擎除了 `Format` 外还可以接收文件路径。可以使用数字或人类可读的名称(例如 `0` 或 `stdin`、`1` 或 `stdout`)来指定默认输入/输出流。可以根据额外的引擎参数或文件扩展名(`gz`、`br` 或 `xz`)来读写压缩文件。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md index 34e711e0ae7..d2b5a7fdf9e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/filelog.md @@ -20,7 +20,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -56,7 +56,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] * `handle_error_mode` — FileLog 引擎的错误处理方式。可选值:`default`(如果解析消息失败则抛出异常)、`stream`(异常信息和原始消息将保存在虚拟列 `_error` 和 `_raw_message` 中)。 -## 描述 +## 描述 {#description} 已送达的记录会被自动跟踪,因此日志文件中的每条记录只会被计数一次。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md index 8b101c88712..392d398434f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/generate.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# GenerateRandom 表引擎 +# GenerateRandom 表引擎 {#generaterandom-table-engine} `GenerateRandom` 表引擎根据给定的表结构生成随机数据。 @@ -20,7 +20,7 @@ doc_type: 'reference' -## 在 ClickHouse Server 中的使用 +## 在 ClickHouse Server 中的使用 {#usage-in-clickhouse-server} ```sql ENGINE = GenerateRandom([random_seed [,max_string_length [,max_array_length]]]) @@ -33,7 +33,7 @@ ENGINE = GenerateRandom([random_seed [,max_string_length [,max_array_length]]]) 它支持所有可以存储在表中的 [DataTypes](../../../sql-reference/data-types/index.md),`AggregateFunction` 类型除外。 -## 示例 +## 示例 {#example} **1.** 创建 `generate_engine_table` 表: 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..6323ae0b209 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 @@ -7,9 +7,7 @@ title: '特殊表引擎' doc_type: 'reference' --- - - -# 特殊表引擎 +# 特殊表引擎 {#special-table-engines} 表引擎主要分为三大类: @@ -26,7 +24,6 @@ doc_type: 'reference' 如果发现错误,请直接编辑对应页面的 YAML front matter。 */ } - {/*AUTOGENERATED_START*/ } | Page | Description | diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md index 4fa163e1f1a..2a243707b83 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/join.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Join 表引擎 +# Join 表引擎 {#join-table-engine} 用于 [JOIN](/sql-reference/statements/select/join) 操作的可选预构建数据结构。 @@ -19,7 +19,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -115,7 +115,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] -## 用法示例 +## 用法示例 {#example} 创建左侧的表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md index 6c33ab3835a..1a720510d55 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/keepermap.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# KeeperMap 表引擎 +# KeeperMap 表引擎 {#keepermap-table-engine} 此引擎允许你将 Keeper/ZooKeeper 集群用作一致性的键值存储,支持线性化写入和顺序一致的读取。 @@ -26,7 +26,7 @@ doc_type: 'reference' 其中 `path` 可以是任意其他有效的 ZooKeeper 路径。 -## 创建数据表 +## 创建数据表 {#creating-a-table} ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] @@ -80,9 +80,9 @@ PRIMARY KEY key 当然,也可以在彼此无关联的 ClickHouse 实例上,手动使用相同路径运行 `CREATE TABLE`,以达到相同的数据共享效果。 -## 支持的操作 +## 支持的操作 {#supported-operations} -### 插入 +### 插入 {#inserts} 当向 `KeeperMap` 插入新行时,如果键不存在,则会为该键创建一个新条目。 如果键已存在且 `keeper_map_strict_mode` 被设为 `true`,则会抛出异常;否则,该键对应的值将被覆盖。 @@ -93,7 +93,7 @@ PRIMARY KEY key INSERT INTO keeper_map_table VALUES ('some key', 1, 'value', 3.2); ``` -### 删除 +### 删除 {#deletes} 可以使用 `DELETE` 查询或 `TRUNCATE` 删除行。 如果键存在,并且将 `keeper_map_strict_mode` 设置为 `true`,则只有在能够以原子方式执行时,获取和删除数据才会成功。 @@ -110,7 +110,7 @@ ALTER TABLE keeper_map_table DELETE WHERE key LIKE 'some%' AND v1 > 1; TRUNCATE TABLE keeper_map_table; ``` -### 更新 +### 更新 {#updates} 可以使用 `ALTER TABLE` 查询来更新值。主键不可更新。 如果将 `keeper_map_strict_mode` 设置为 `true`,只有在以原子方式执行时,读取和更新数据才会成功。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md index 71e37e79d82..91317761af5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/memory.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Memory 表引擎 +# Memory 表引擎 {#memory-table-engine} :::note 在 ClickHouse Cloud 上使用 Memory 表引擎时,数据出于设计原因不会在所有节点之间复制。若要保证所有查询都被路由到同一节点,并使 Memory 表引擎按预期工作,可以采用以下任一方式: @@ -48,7 +48,7 @@ Memory 引擎被系统用于带有外部查询数据的临时表(参见“Exte -## 使用说明 +## 使用说明 {#usage} **初始化配置** @@ -65,7 +65,7 @@ ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 100 **注意:** `bytes` 和 `rows` 的封顶参数可以同时设置,但会始终遵守由 `max` 和 `min` 所定义的最低限制。 -## 示例 +## 示例 {#examples} ```sql CREATE TABLE memory (i UInt32) ENGINE = Memory SETTINGS min_bytes_to_keep = 4096, max_bytes_to_keep = 16384; diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md index 9c836320bcd..facd208ad44 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/merge.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Merge 表引擎 +# Merge 表引擎 {#merge-table-engine} `Merge` 引擎(不要与 `MergeTree` 混淆)自身不存储数据,而是允许同时从任意数量的其他表中读取数据。 @@ -17,7 +17,7 @@ doc_type: 'reference' -## 创建表 +## 创建表 {#creating-a-table} ```sql CREATE TABLE ... 引擎=Merge(db_name, tables_regexp) @@ -51,7 +51,7 @@ CREATE TABLE ... 引擎=Merge(db_name, tables_regexp) -## 示例 +## 示例 {#examples} **示例 1** diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md index 5747c28ffc3..c2cb4630004 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/null.md @@ -7,7 +7,7 @@ title: 'Null 表引擎' doc_type: 'reference' --- -# Null 表引擎 +# Null 表引擎 {#null-table-engine} 当向 `Null` 表写入数据时,这些数据会被忽略。 当从 `Null` 表读取数据时,返回结果是空的。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md index c173222b514..8466531679c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/set.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# Set 表引擎 +# Set 表引擎 {#set-table-engine} :::note 在 ClickHouse Cloud 中,如果服务创建时使用的版本早于 25.4,则需要使用 `SET compatibility=25.4` 将兼容性设置为至少 25.4。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md index 33ab7358a1c..6e23b82cf74 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/url.md @@ -9,7 +9,7 @@ doc_type: 'reference' -# URL 表引擎 +# URL 表引擎 {#url-table-engine} 对远程 HTTP/HTTPS 服务器进行数据查询和写入。该引擎类似于 [File](../../../engines/table-engines/special/file.md) 引擎。 @@ -52,7 +52,7 @@ doc_type: 'reference' -## 示例 +## 示例 {#example} **1.** 在服务器上创建一个 `url_engine_table` 表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md index 8fc437b3f98..ae9b9d56a94 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/engines/table-engines/special/view.md @@ -7,6 +7,6 @@ title: 'View 表引擎' doc_type: 'reference' --- -# View 表引擎 +# View 表引擎 {#view-table-engine} 用于实现视图(更多信息请参见 `CREATE VIEW` 查询)。它本身不存储数据,而只存储指定的 `SELECT` 查询。在从该表读取数据时,会运行此查询(并从查询中删除所有不需要的列)。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/concurrency.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/concurrency.md index f9d25f4415e..b42acc28c7e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/concurrency.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/concurrency.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['并发', 'QPS'] --- -# ClickHouse 是否支持高频并发查询? +# ClickHouse 是否支持高频并发查询? {#does-clickhouse-support-frequent-concurrent-queries} ClickHouse 专为可直接对外服务的实时分析型应用而设计。它可以在 PB 级数据库上,将历史数据与实时写入相结合,以低延迟(小于 10 毫秒)和高并发(每秒超过 10,000 次查询)处理分析查询。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/cost-based.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/cost-based.md index 891f7fb97cd..d17a372243b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/cost-based.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/cost-based.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['CBE', 'optimizer'] --- -# ClickHouse 是否有基于成本的优化器? +# ClickHouse 是否有基于成本的优化器? {#does-clickhouse-have-a-cost-based-optimizer} ClickHouse 具备一些局部的基于成本的优化机制,例如:读取列的顺序由从磁盘读取压缩数据范围的成本来决定。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/datalake.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/datalake.md index 54e906551f7..0daca22a540 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/datalake.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/datalake.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['数据湖', '湖仓'] --- -# ClickHouse 是否支持数据湖? +# ClickHouse 是否支持数据湖? {#does-clickhouse-support-data-lakes} ClickHouse 支持数据湖,包括 Iceberg、Delta Lake、Apache Hudi、Apache Paimon、Hive。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/dependencies.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/dependencies.md index b2bcbedcb98..6ee40440f69 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/dependencies.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/dependencies.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['依赖', '第三方'] --- -# 运行 ClickHouse 需要哪些第三方依赖? +# 运行 ClickHouse 需要哪些第三方依赖? {#what-are-the-3rd-party-dependencies-for-running-clickhouse} ClickHouse 没有任何运行时依赖。它以单个二进制可执行文件的形式发布,完全自包含。该应用程序提供集群的全部功能:处理查询、作为集群中的工作节点、作为提供 Raft 共识算法的协调系统,以及作为客户端或本地查询引擎。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md index 6c151dca2e3..ead08a51735 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/distributed-join.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['分布式', 'JOIN'] --- -# ClickHouse 是否支持分布式 JOIN? +# ClickHouse 是否支持分布式 JOIN? {#does-clickhouse-support-distributed-join} ClickHouse 在集群上支持分布式 JOIN。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/federated.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/federated.md index b979afe7b1e..3f3090a7e26 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/federated.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/federated.md @@ -8,22 +8,22 @@ doc_type: 'reference' keywords: ['federated', 'hybrid', 'postgres', 'mysql', 'sqlite', 'odbc', 'jdbc'] --- -# ClickHouse 是否支持联邦查询? +# ClickHouse 是否支持联邦查询? {#does-clickhouse-support-federated-queries} 在分析型数据库中,ClickHouse 对联邦查询和混合查询执行的支持最为全面。 它支持查询外部数据库: -- PostgreSQL -- MySQL -- MongoDB -- Redis -- 任何 ODBC 数据源 -- 任何 JDBC 数据源 -- 任何 Arrow Flight 数据源 -- 流式数据源,例如 Kafka 和 RabbitMQ -- 数据湖,例如 Iceberg、Delta Lake、Apache Hudi、Apache Paimon -- 位于共享存储上的外部文件,例如 AWS S3、GCS、Minio、Cloudflare R2、Azure Blob Storage、Alicloud OSS、Tencent COS,以及本地存储,支持多种数据格式 +* PostgreSQL +* MySQL +* MongoDB +* Redis +* 任何 ODBC 数据源 +* 任何 JDBC 数据源 +* 任何 Arrow Flight 数据源 +* 流式数据源,例如 Kafka 和 RabbitMQ +* 数据湖,例如 Iceberg、Delta Lake、Apache Hudi、Apache Paimon +* 位于共享存储上的外部文件,例如 AWS S3、GCS、Minio、Cloudflare R2、Azure Blob Storage、Alicloud OSS、Tencent COS,以及本地存储,支持多种数据格式 ClickHouse 可以在单个查询中对多个不同的数据源进行 join。它还提供混合查询执行选项,既利用本地资源,又将部分查询卸载到远程机器上。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/index.md index 2ba3a15c958..461eedccbf5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/index.md @@ -8,18 +8,18 @@ description: '列出关于 ClickHouse 常见问题的索引页面' doc_type: 'landing-page' --- -# 关于 ClickHouse 的常见问题 +# 关于 ClickHouse 的常见问题 {#general-questions-about-clickhouse} -- [什么是 ClickHouse?](../../intro.md) -- [为什么 ClickHouse 如此之快?](../../concepts/why-clickhouse-is-so-fast.mdx) -- [谁在使用 ClickHouse?](../../faq/general/who-is-using-clickhouse.md) -- [“ClickHouse” 是什么意思?](../../faq/general/dbms-naming.md) -- [“Не тормозит” 是什么意思?](../../faq/general/ne-tormozit.md) -- [什么是 OLAP?](../../faq/general/olap.md) -- [什么是列式数据库?](../../faq/general/columnar-database.md) -- [如何选择主键?](../../guides/best-practices/sparse-primary-indexes.md) -- [为什么不使用类似 MapReduce 的方案?](../../faq/general/mapreduce.md) -- [如何向 ClickHouse 贡献代码?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) +* [什么是 ClickHouse?](../../intro.md) +* [为什么 ClickHouse 如此之快?](../../concepts/why-clickhouse-is-so-fast.mdx) +* [谁在使用 ClickHouse?](../../faq/general/who-is-using-clickhouse.md) +* [“ClickHouse” 是什么意思?](../../faq/general/dbms-naming.md) +* [“Не тормозит” 是什么意思?](../../faq/general/ne-tormozit.md) +* [什么是 OLAP?](../../faq/general/olap.md) +* [什么是列式数据库?](../../faq/general/columnar-database.md) +* [如何选择主键?](../../guides/best-practices/sparse-primary-indexes.md) +* [为什么不使用类似 MapReduce 的方案?](../../faq/general/mapreduce.md) +* [如何向 ClickHouse 贡献代码?](/knowledgebase/how-do-i-contribute-code-to-clickhouse) :::info 没有找到所需内容? 请查阅我们的[知识库](/knowledgebase/),并浏览文档中更多实用的文章。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/sql.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/sql.md index 838674e2e54..bb3c6113bb2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/sql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/sql.md @@ -8,46 +8,46 @@ doc_type: 'reference' keywords: ['SQL 语法', 'ANSI SQL'] --- -# ClickHouse 支持哪些 SQL 语法? +# ClickHouse 支持哪些 SQL 语法? {#what-sql-syntax-does-clickhouse-support} ClickHouse 对 SQL 语法提供了完整支持,包括以下特性: -- SQL/JSON 和 JSON 数据类型(SQL-2023) -- 窗口函数(SQL-2003) -- 公用表表达式和递归查询(SQL-1999) -- ROLLUP、CUBE 和 GROUPING SETS(SQL-1999) -- 对 RBAC 的完整支持(SQL-1999) -- 关联子查询(SQL-1992) +* SQL/JSON 和 JSON 数据类型(SQL-2023) +* 窗口函数(SQL-2003) +* 公用表表达式和递归查询(SQL-1999) +* ROLLUP、CUBE 和 GROUPING SETS(SQL-1999) +* 对 RBAC 的完整支持(SQL-1999) +* 关联子查询(SQL-1992) 这一支持已经通过 TPC-H 和 TPC-DS 基准测试以及 SQLTest 得到验证。 ClickHouse 在许多特性被 ISO/IEC 标准化之前就已经引入了它们,例如: -- 条件聚合函数 -- `any` 聚合函数 -- `least` 和 `greatest` -- `GROUP BY ALL` -- 对别名的扩展使用 -- 数字字面量中的下划线 +* 条件聚合函数 +* `any` 聚合函数 +* `least` 和 `greatest` +* `GROUP BY ALL` +* 对别名的扩展使用 +* 数字字面量中的下划线 ClickHouse 通过引入大量提升使用体验的改进来扩展 SQL: -- 不受限制地使用别名 -- WITH 子句中的别名 -- 聚合函数组合器 -- 参数化聚合函数 -- 近似聚合函数 -- 原生大整数数值类型和扩展精度小数类型 -- 用于数组操作的高阶函数 -- ARRAY JOIN 子句和 arrayJoin 函数 -- 数组聚合 -- LIMIT BY 子句 -- GROUP BY WITH TOTALS -- AS OF JOIN -- ANY/ALL JOIN -- 更自然的 JSON 语法 -- 列表中的尾随逗号 -- FROM ... SELECT 子句顺序 -- 类型安全的查询参数和参数化视图 +* 不受限制地使用别名 +* WITH 子句中的别名 +* 聚合函数组合器 +* 参数化聚合函数 +* 近似聚合函数 +* 原生大整数数值类型和扩展精度小数类型 +* 用于数组操作的高阶函数 +* ARRAY JOIN 子句和 arrayJoin 函数 +* 数组聚合 +* LIMIT BY 子句 +* GROUP BY WITH TOTALS +* AS OF JOIN +* ANY/ALL JOIN +* 更自然的 JSON 语法 +* 列表中的尾随逗号 +* FROM ... SELECT 子句顺序 +* 类型安全的查询参数和参数化视图 其中一些特性有机会被纳入即将发布的 SQL 标准,而它们已经可以在 ClickHouse 中使用。 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/updates.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/updates.md index 9653ddd0d42..b25e3c99795 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/updates.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/general/updates.md @@ -8,7 +8,7 @@ doc_type: 'reference' keywords: ['更新', '实时'] --- -# ClickHouse 是否支持实时更新? +# ClickHouse 是否支持实时更新? {#does-clickhouse-support-real-time-updates} ClickHouse 支持 `UPDATE` 语句,并且能够以与执行 `INSERT` 一样快的速度执行实时更新。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/index.md index 047ecfe9ddd..c3b1b40e500 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/index.md @@ -8,15 +8,15 @@ description: '汇总与 ClickHouse 集成到其他系统相关问题的落地页 doc_type: 'landing-page' --- -# 关于将 ClickHouse 与其他系统集成的问题 +# 关于将 ClickHouse 与其他系统集成的问题 {#questions-about-integrating-clickhouse-and-other-systems} -- [如何将 ClickHouse 中的数据导出到文件?](https://clickhouse.com/docs/knowledgebase/file-export) -- [如何将 JSON 导入 ClickHouse?](/integrations/data-ingestion/data-formats/json/intro.md) -- [如何将 Kafka 连接到 ClickHouse?](/integrations/data-ingestion/kafka/index.md) -- [可以将 Java 应用程序连接到 ClickHouse 吗?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) -- [ClickHouse 可以读取 MySQL 中的表吗?](/integrations/mysql) -- [ClickHouse 可以读取 PostgreSQL 中的表吗?](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) -- [通过 ODBC 连接 Oracle 时,如果遇到编码问题该怎么办?](/faq/integration/oracle-odbc.md) +* [如何将 ClickHouse 中的数据导出到文件?](https://clickhouse.com/docs/knowledgebase/file-export) +* [如何将 JSON 导入 ClickHouse?](/integrations/data-ingestion/data-formats/json/intro.md) +* [如何将 Kafka 连接到 ClickHouse?](/integrations/data-ingestion/kafka/index.md) +* [可以将 Java 应用程序连接到 ClickHouse 吗?](/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md) +* [ClickHouse 可以读取 MySQL 中的表吗?](/integrations/mysql) +* [ClickHouse 可以读取 PostgreSQL 中的表吗?](/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md) +* [通过 ODBC 连接 Oracle 时,如果遇到编码问题该怎么办?](/faq/integration/oracle-odbc.md) :::info 没有找到所需内容? 请查看我们的[知识库](/knowledgebase/),以及浏览本文档中许多其他有用的文章。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/json-import.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/json-import.md index 94781804f48..2d332231094 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/json-import.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/json-import.md @@ -16,7 +16,7 @@ ClickHouse 支持多种[输入和输出数据格式](/interfaces/formats)。其 -## 示例 +## 示例 {#examples} 使用 [HTTP 接口](../../interfaces/http.md): diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md index f59ca525691..7db7500b5dc 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/integration/oracle-odbc.md @@ -8,9 +8,7 @@ doc_type: 'guide' keywords: ['oracle', 'odbc', '编码', '集成', '外部字典'] --- - - -# 通过 ODBC 使用 Oracle 时如果遇到编码问题怎么办? +# 通过 ODBC 使用 Oracle 时如果遇到编码问题怎么办? {#oracle-odbc-encodings} 如果通过 Oracle ODBC 驱动将 Oracle 用作 ClickHouse 外部字典的数据源,则需要在 `/etc/default/clickhouse` 中为 `NLS_LANG` 环境变量设置正确的值。有关更多信息,请参阅 [Oracle NLS_LANG 常见问题解答](https://www.oracle.com/technetwork/products/globalization/nls-lang-099431.html)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md index 841024fcce6..af2f280d5be 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/delete-old-data.md @@ -30,7 +30,7 @@ TTL 不仅可以用来将数据“移动”到 [/dev/null](https://en.wikipedia. -## DELETE FROM +## DELETE FROM {#delete-from} [DELETE FROM](/sql-reference/statements/delete.md) 允许在 ClickHouse 中运行标准的 DELETE 查询。满足过滤条件的行会被标记为已删除,并且在后续的结果集中不再返回。行的清理是以异步方式执行的。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/index.md index 92deb488e62..cce5432aaff 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/operations/index.md @@ -8,16 +8,16 @@ doc_type: 'landing-page' keywords: ['运维', '管理', '部署', '集群管理', '常见问题'] --- -# 关于运维 ClickHouse 服务器和集群的问题 +# 关于运维 ClickHouse 服务器和集群的问题 {#question-about-operating-clickhouse-servers-and-clusters} -- [在生产环境中应该使用哪个 ClickHouse 版本?](/faq/operations/production.md) -- [是否可以采用存储与计算分离的方式部署 ClickHouse?](/faq/operations/separate_storage.md) -- [是否可以从 ClickHouse 表中删除旧记录?](/faq/operations/delete-old-data.md) -- [如何配置 ClickHouse Keeper?](/guides/sre/keeper/index.md) -- [ClickHouse 能否与 LDAP 集成?](/guides/sre/user-management/configuring-ldap.md) -- [如何在 ClickHouse 中配置用户、角色和权限?](/guides/sre/user-management/index.md) -- [能否在 ClickHouse 中更新或删除行?](/guides/starter_guides/mutations.md) -- [ClickHouse 是否支持多区域复制?](/faq/operations/multi-region-replication.md) +* [在生产环境中应该使用哪个 ClickHouse 版本?](/faq/operations/production.md) +* [是否可以采用存储与计算分离的方式部署 ClickHouse?](/faq/operations/separate_storage.md) +* [是否可以从 ClickHouse 表中删除旧记录?](/faq/operations/delete-old-data.md) +* [如何配置 ClickHouse Keeper?](/guides/sre/keeper/index.md) +* [ClickHouse 能否与 LDAP 集成?](/guides/sre/user-management/configuring-ldap.md) +* [如何在 ClickHouse 中配置用户、角色和权限?](/guides/sre/user-management/index.md) +* [能否在 ClickHouse 中更新或删除行?](/guides/starter_guides/mutations.md) +* [ClickHouse 是否支持多区域复制?](/faq/operations/multi-region-replication.md) :::info 没有找到需要的内容? 请查阅我们的[知识库](/knowledgebase/),并浏览文档中提供的更多实用文章。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/faq/use-cases/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/faq/use-cases/index.md index ed9687016e0..300abb822cd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/faq/use-cases/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/faq/use-cases/index.md @@ -8,10 +8,10 @@ keywords: ['ClickHouse 使用场景', '时间序列数据库', '键值存储', ' doc_type: 'landing-page' --- -# 关于 ClickHouse 使用场景的常见问题 +# 关于 ClickHouse 使用场景的常见问题 {#questions-about-clickhouse-use-cases} -- [我可以将 ClickHouse 用作时序数据库吗?](/knowledgebase/time-series) -- [我可以将 ClickHouse 用作键值存储吗?](/knowledgebase/key-value) +* [我可以将 ClickHouse 用作时序数据库吗?](/knowledgebase/time-series) +* [我可以将 ClickHouse 用作键值存储吗?](/knowledgebase/key-value) :::info 没有找到您需要的内容? 请查看我们的[知识库](/knowledgebase/),并浏览文档中大量实用的文章。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md index a8dcd9bb096..a18d278f198 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/amazon-reviews.md @@ -11,10 +11,10 @@ keywords: ['Amazon reviews', 'customer reviews dataset', 'e-commerce data', 'exa :::note 下面的查询是在 **Production** 环境的 ClickHouse Cloud 实例上执行的。更多信息请参阅 -["Playground 规格说明"](/getting-started/playground#specifications)。 +["Playground 规格说明"](/getting-started/playground#specifications)。 ::: -## 加载数据集 +## 加载数据集 {#loading-the-dataset} 1. 在不将数据插入 ClickHouse 的情况下,我们可以直接在原处对其进行查询。先取出几行数据,看看它们的样子: @@ -122,7 +122,6 @@ FROM s3Cluster('default', 'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_*.snappy.parquet') ``` - :::tip 在 ClickHouse Cloud 中,集群名称为 `default`。请将 `default` 更改为你的集群名称……或者如果你没有集群,可以使用 `s3` 表函数(而不是 `s3Cluster`)。 ::: @@ -152,8 +151,7 @@ ORDER BY size DESC 原始数据约为 70GB,在 ClickHouse 中压缩后仅占约 30GB。 - -## 示例查询 +## 示例查询 {#example-queries} 7. 现在来运行一些查询。下面是数据集中最有帮助的前 10 条评论: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md index d198ae2aec1..210d1671def 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/anon_web_analytics_metrica.md @@ -7,7 +7,7 @@ title: '匿名化网站分析' doc_type: 'guide' --- -# 匿名化的网站分析数据 +# 匿名化的网站分析数据 {#anonymized-web-analytics-data} 此数据集由两个表组成,存储匿名化的网站分析数据:一个为 hits(`hits_v1`),一个为 visits(`visits_v1`)。 @@ -15,17 +15,17 @@ doc_type: 'guide' ## 下载并摄取数据 {#download-and-ingest-the-data} -### 下载 hits TSV 压缩文件 +### 下载 hits TSV 压缩文件 {#download-the-hits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/hits/tsv/hits_v1.tsv.xz | unxz --threads=`nproc` > hits_v1.tsv -# 验证校验和 +# 验证校验和 {#validate-the-checksum} md5sum hits_v1.tsv -# 校验和应为:f3631b6295bf06989c1437491f7592cb +# 校验和应为:f3631b6295bf06989c1437491f7592cb {#checksum-should-be-equal-to-f3631b6295bf06989c1437491f7592cb} ``` -### 创建数据库和表 +### 创建数据库和表 {#create-the-database-and-table} ```bash clickhouse-client --query "CREATE DATABASE IF NOT EXISTS datasets" @@ -45,7 +45,7 @@ clickhouse-client --query="CREATE TABLE default.hits_100m_obfuscated (WatchID UI ``` -### 导入 hits 表的数据 +### 导入 hits 表的数据 {#import-the-hits-data} ```bash cat hits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.hits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -62,13 +62,13 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.hits_v1" ``` -### 下载压缩的 visits TSV 文件 +### 下载压缩的 visits TSV 文件 {#download-the-visits-compressed-tsv-file} ```bash curl https://datasets.clickhouse.com/visits/tsv/visits_v1.tsv.xz | unxz --threads=`nproc` > visits_v1.tsv -# 验证校验和 +# 验证校验和 {#validate-the-checksum} md5sum visits_v1.tsv -# 校验和应为:6dafe1a0f24e59e3fc2d0fed85601de6 +# 校验和应为:6dafe1a0f24e59e3fc2d0fed85601de6 {#checksum-should-be-equal-to-6dafe1a0f24e59e3fc2d0fed85601de6} ``` @@ -78,7 +78,7 @@ md5sum visits_v1.tsv clickhouse-client --query "CREATE TABLE datasets.visits_v1 ( 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 Nested(ID UInt32, Serial UInt32, EventTime DateTime, Price Int64, OrderID String, CurrencyID 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 Nested(ID Int8, SearchEngineID UInt16, AdvEngineID UInt8, PlaceID UInt16, SocialSourceNetworkID UInt8, Domain String, SearchPhrase String, SocialSourcePage 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 Nested(Key1 String, Key2 String, Key3 String, Key4 String, Key5 String, ValueDouble Float64), Market Nested(Type UInt8, GoalID UInt32, OrderID String, OrderPrice Int64, PP UInt32, DirectPlaceID UInt32, DirectOrderID UInt32, DirectBannerID UInt32, GoodID String, GoodName String, GoodQuantity Int32, GoodPrice Int64), IslandID FixedString(16)) ENGINE = CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate, intHash32(UserID), VisitID) SAMPLE BY intHash32(UserID) SETTINGS index_granularity = 8192" ``` -### 导入访问数据 +### 导入访问数据 {#import-the-visits-data} ```bash cat visits_v1.tsv | clickhouse-client --query "INSERT INTO datasets.visits_v1 FORMAT TSV" --max_insert_block_size=100000 @@ -95,7 +95,7 @@ clickhouse-client --query "SELECT COUNT(*) FROM datasets.visits_v1" ``` -## 一个 JOIN 示例 +## 一个 JOIN 示例 {#an-example-join} hits 和 visits 数据集用于 ClickHouse 的测试例程,这是测试套件中的一个查询。其余测试在本页末尾的 *下一步* 部分中有引用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md index 738971e5045..2c008e2033e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/brown-benchmark.md @@ -94,8 +94,7 @@ clickhouse-client --query "INSERT INTO mgbench.logs2 FORMAT CSVWithNames" < mgbe clickhouse-client --query "INSERT INTO mgbench.logs3 FORMAT CSVWithNames" < mgbench3.csv ``` - -## 运行基准查询 +## 运行基准查询 {#run-benchmark-queries} ```sql USE mgbench; @@ -209,7 +208,6 @@ ORDER BY machine_name, dt; ``` - ```sql -- Q1.6: 所有文件服务器的每小时网络流量总和是多少? diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md index cce072b914e..c497446382c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/cell-towers.md @@ -7,15 +7,15 @@ keywords: ['蜂窝基站数据', '地理数据', 'OpenCelliD', '地理空间数 doc_type: '指南' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; -import ActionsMenu from '@site/docs/_snippets/_service_actions_menu.md'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; -import SupersetDocker from '@site/docs/_snippets/_add_superset_detail.md'; +import ActionsMenu from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_service_actions_menu.md'; +import SQLConsoleDetail from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; +import SupersetDocker from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_add_superset_detail.md'; import cloud_load_data_sample from '@site/static/images/_snippets/cloud-load-data-sample.png'; import cell_towers_1 from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' import add_a_database from '@site/static/images/getting-started/example-datasets/superset-add.png' @@ -29,7 +29,6 @@ import superset_radio_umts from '@site/static/images/getting-started/example-dat import superset_umts_netherlands from '@site/static/images/getting-started/example-datasets/superset-umts-netherlands.png' import superset_cell_tower_dashboard from '@site/static/images/getting-started/example-datasets/superset-cell-tower-dashboard.png' - ## 目标 {#goal} 在本指南中,您将学习如何: @@ -124,7 +123,7 @@ INSERT INTO cell_towers SELECT * FROM s3('https://datasets-documentation.s3.amaz -## 运行一些示例查询 +## 运行一些示例查询 {#examples} 1. 各类型蜂窝基站的数量: @@ -171,7 +170,6 @@ SELECT mcc, count() FROM cell_towers GROUP BY mcc ORDER BY count() DESC LIMIT 10 您可以考虑在 ClickHouse 中创建一个 [Dictionary](../../sql-reference/dictionaries/index.md) 来对这些值进行解码。 - ## 使用场景:集成地理数据 {#use-case} 使用 [`pointInPolygon`](/sql-reference/functions/geo/coordinates.md/#pointinpolygon) 函数。 @@ -266,7 +264,6 @@ WHERE pointInPolygon((lon, lat), (SELECT * FROM moscow)) 返回 1 行。耗时:0.067 秒。处理了 4328 万行,692.42 MB(每秒 6.4583 亿行,10.33 GB/秒)。 ``` - ## 查看模式 {#review-of-the-schema} 在 Superset 中构建可视化之前,请先查看你将要使用的列。此数据集主要提供全球移动蜂窝基站的位置(经度和纬度)以及无线接入技术类型。各列的说明可以在[社区论坛](https://community.opencellid.org/t/documenting-the-columns-in-the-downloadable-cells-database-csv/186)中找到。下面描述将用于构建可视化的列。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md index 49d9f674323..2ea98618f16 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/dbpedia.md @@ -15,7 +15,7 @@ doc_type: 'guide' 该数据集包含位于 [huggingface.co](https://huggingface.co/api/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M/parquet/default/train/) 上的 26 个 `Parquet` 文件。文件名为 `0.parquet`、`1.parquet`、...、`25.parquet`。要查看该数据集的一些示例记录,请访问此 [Hugging Face 页面](https://huggingface.co/datasets/Qdrant/dbpedia-entities-openai3-text-embedding-3-large-1536-1M)。 -## 创建表 +## 创建表 {#create-table} 创建 `dbpedia` 表,用于存储文章 ID、标题、正文和嵌入向量: @@ -31,7 +31,7 @@ CREATE TABLE dbpedia ``` -## 加载表 +## 加载表 {#load-table} 要从所有 Parquet 文件中加载数据集,请运行以下 Shell 命令: @@ -74,7 +74,7 @@ FROM dbpedia _最近邻_ 指的是与用户查询最相关的文档、图像或其他内容。 检索结果是生成式 AI 应用中 RAG(检索增强生成,Retrieval Augmented Generation)的关键输入。 -## 运行暴力向量相似度搜索 +## 运行暴力向量相似度搜索 {#run-a-brute-force-vector-similarity-search} KNN(k 近邻)搜索或暴力搜索是指计算数据集中每个向量与搜索嵌入向量之间的距离,然后对这些距离进行排序以获得最近邻。使用 `dbpedia` 数据集时,一种快速、直观地观察语义搜索效果的方法,是直接使用数据集本身的嵌入向量作为搜索向量。例如: @@ -116,7 +116,7 @@ LIMIT 20 同时分别记录在 OS 文件缓存为冷状态时,以及在将 `max_threads` 设置为 1 时的查询延迟,以识别实际的计算资源占用和存储带宽使用情况(从而可以将结果推算到包含数百万向量的生产数据集!) -## 构建向量相似度索引 +## 构建向量相似度索引 {#build-vector-similarity-index} 运行以下 SQL,在 `vector` 列上定义并构建向量相似度索引: @@ -131,7 +131,7 @@ ALTER TABLE dbpedia MATERIALIZE INDEX vector_index SETTINGS mutations_sync = 2; 根据可用 CPU 核心数量和存储带宽的不同,构建并保存索引可能需要几分钟时间。 -## 执行 ANN 搜索 +## 执行 ANN 搜索 {#perform-ann-search} *Approximate Nearest Neighbours*(近似最近邻,ANN)指一类技术(例如采用图结构、随机森林等特殊数据结构),可以比精确向量搜索更快地计算结果。结果的准确度通常在实际使用中已经“足够好”。许多近似算法提供参数,用于在结果准确度和搜索时间之间进行权衡和调优。 @@ -178,7 +178,7 @@ LIMIT 20 ``` -## 为搜索查询生成嵌入向量 +## 为搜索查询生成嵌入向量 {#generating-embeddings-for-search-query} 目前为止看到的相似度搜索查询,都是使用 `dbpedia` 表中已有的向量之一作为搜索向量。在实际应用中,需要根据用户输入的查询(可能是自然语言)来生成搜索向量。搜索向量应当使用与为数据集生成嵌入向量时相同的 LLM 模型生成。 @@ -220,7 +220,7 @@ while True: ``` -## 问答演示应用 +## 问答演示应用 {#q-and-a-demo-application} 上面的示例演示了使用 ClickHouse 进行语义搜索和文档检索。下面将介绍一个非常简单但具有巨大潜力的生成式 AI 示例应用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md index 7d7324534c8..6861be2c6d7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/foursquare-os-places.md @@ -24,7 +24,7 @@ import visualization_4 from '@site/static/images/getting-started/example-dataset 关于这些地点的附加元数据,例如类别和社交媒体 信息。 -## 数据探索 +## 数据探索 {#data-exploration} 为了探索这些数据,我们将使用 [`clickhouse-local`](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local),这是一个小型命令行工具, 虽然体积小巧,但提供了完整的 ClickHouse 引擎。当然,也可以使用 @@ -148,7 +148,7 @@ DESCRIBE s3('s3://fsq-os-places-us-east-1/release/dt=2025-04-08/places/parquet/* ``` -## 将数据加载到 ClickHouse 中 +## 将数据加载到 ClickHouse 中 {#loading-the-data} 如果希望将数据持久化到磁盘上,可以使用 `clickhouse-server` 或 ClickHouse Cloud。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md index ffd2cac861e..509ad631dd7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/github.md @@ -29,7 +29,7 @@ import superset_authors_matrix_v2 from '@site/static/images/getting-started/exam * `line_changes` - 2.7G - 7,535,157 行 -## 生成数据 +## 生成数据 {#generating-the-data} 此步骤为可选。我们免费提供这些数据——请参阅[下载并插入数据](#downloading-and-inserting-the-data)。 @@ -73,7 +73,7 @@ CREATE TABLE git.commits * Linux - `~/clickhouse git-import` - 160 分钟 -## 下载和插入数据 +## 下载和插入数据 {#downloading-and-inserting-the-data} 以下数据可用于复现一个可工作的环境。或者,可以在 play.clickhouse.com 中获取该数据集——参见 [Queries](#queries) 获取更多详情。 @@ -220,7 +220,7 @@ FROM s3('https://datasets-documentation.s3.amazonaws.com/github/commits/clickhou 该数据集可以在 [play.clickhouse.com](https://sql.clickhouse.com?query_id=DCQPNPAIMAQXRLHYURLKVJ) 的 `git_clickhouse` 数据库中获取。我们为所有查询都提供了指向该环境的链接,并在需要时调整数据库名称。请注意,由于数据采集时间不同,play 环境中的查询结果可能与此处展示的结果有所差异。 -### 单个文件的历史记录 +### 单个文件的历史记录 {#history-of-a-single-file} 这是最简单的查询之一。在这里我们查看 `StorageReplicatedMergeTree.cpp` 的所有提交信息。由于这些通常更值得关注,我们按最新的提交优先排序。 @@ -296,7 +296,7 @@ LIMIT 10 请注意,还有一个更复杂的查询版本,它会在考虑重命名的情况下查找文件的[逐行提交历史](#line-by-line-commit-history-of-a-file)。 -### 查找当前有效文件 +### 查找当前有效文件 {#find-the-current-active-files} 这对于后续分析很重要,因为那时我们只想考虑代码仓库中当前存在的文件。我们将这组文件近似定义为那些没有被重命名或删除(然后又被重新添加或重新命名)的文件。 @@ -428,7 +428,7 @@ git ls-files | grep -v -E 'generated\.cpp|^(contrib|docs?|website|libs/(libcityh 这些差异不应对我们的分析产生实质性影响。**欢迎提供该查询的改进版本**。 -### 列出修改最多的文件 +### 列出修改最多的文件 {#list-files-with-most-modifications} 在当前文件范围内,我们将删除和新增的行数相加,作为修改次数。 @@ -484,7 +484,7 @@ LIMIT 10 ``` -### 通常在一周中的哪一天进行代码提交? +### 通常在一周中的哪一天进行代码提交? {#what-day-of-the-week-do-commits-usually-occur} [运行](https://sql.clickhouse.com?query_id=GED2STFSYJDRAA59H8RLIV) @@ -510,7 +510,7 @@ GROUP BY dayOfWeek(time) AS day_of_week 这很合理,周五的工作效率往往会有所下降。很高兴看到大家在周末也继续提交代码!非常感谢所有贡献者! -### 子目录/文件的历史——随时间变化的行数、提交次数和贡献者数量 +### 子目录/文件的历史——随时间变化的行数、提交次数和贡献者数量 {#history-of-subdirectoryfile---number-of-lines-commits-and-contributors-over-time} 如果不进行过滤,查询结果会非常庞大,不便展示或可视化。因此,在下面的示例中,我们支持按文件或子目录进行过滤。这里我们使用 `toStartOfWeek` 函数按周分组——可根据需要进行调整。 @@ -555,7 +555,7 @@ LIMIT 10 For commits and authors -### 列出作者数量最多的文件 +### 列出作者数量最多的文件 {#list-files-with-maximum-number-of-authors} 仅限当前文件。 @@ -611,7 +611,7 @@ LIMIT 10 ``` -### 仓库中最早的代码行 +### 仓库中最早的代码行 {#oldest-lines-of-code-in-the-repository} 仅针对当前文件。 @@ -669,7 +669,7 @@ LIMIT 10 ``` -### 历史最悠久的文件 +### 历史最悠久的文件 {#files-with-longest-history} 仅包含当前仍存在的文件。 @@ -728,7 +728,7 @@ LIMIT 10 我们的核心数据结构 MergeTree 显然也在持续演进,迄今已经历了大量改进! -### 本月在文档和代码方面的贡献分布 +### 本月在文档和代码方面的贡献分布 {#distribution-of-contributors-with-respect-to-docs-and-code-over-the-month} **在数据采集过程中,由于 `docs/` 目录的提交历史非常杂乱,其变更已被过滤掉。因此,本查询结果并不完全准确。** @@ -792,7 +792,7 @@ FROM 在月底时可能会稍微多一点,但整体来看分布比较均匀。需要再次说明的是,由于在数据插入过程中应用了 docs 过滤器进行筛选,因此这些结果并不可靠。 -### 影响最广泛的作者 +### 影响最广泛的作者 {#authors-with-the-most-diverse-impact} 这里我们将多样性定义为某位作者参与贡献过的不同文件数量。 @@ -870,7 +870,7 @@ LIMIT 10 ``` -### 作者的常用文件 +### 作者的常用文件 {#favorite-files-for-an-author} 在这里,我们选择我们的创始人 [Alexey Milovidov](https://github.com/alexey-milovidov),并将分析范围限定为当前的文件。 @@ -957,7 +957,7 @@ LIMIT 10 这可能更能体现他的兴趣领域。 -### 作者最少的大型文件 +### 作者最少的大型文件 {#largest-files-with-lowest-number-of-authors} 为此,我们首先需要找出最大的文件。如果要基于提交历史,为每个文件完整重建所有版本来估算大小,代价会非常高! @@ -1130,7 +1130,7 @@ LIMIT 10 ``` -### 按时间、按星期几、按作者以及按特定子目录统计提交与代码行数分布 +### 按时间、按星期几、按作者以及按特定子目录统计提交与代码行数分布 {#commits-and-lines-of-code-distribution-by-time-by-weekday-by-author-for-specific-subdirectories} 这里的含义是:按一周中每一天统计新增和删除的代码行数。在本示例中,我们聚焦于 [Functions 目录](https://github.com/ClickHouse/ClickHouse/tree/master/src/Functions) @@ -1258,7 +1258,7 @@ FROM ``` -### 用于展示不同作者之间谁更倾向于重写他人代码的矩阵 +### 用于展示不同作者之间谁更倾向于重写他人代码的矩阵 {#matrix-of-authors-that-shows-what-authors-tends-to-rewrite-another-authors-code} `sign = -1` 表示代码删除。我们会排除标点符号以及空行的插入。 @@ -1313,7 +1313,7 @@ Alexey 显然很喜欢删除别人的代码。我们把他排除在外,以获 Superset 作者矩阵 v2 -### 按一周中的每一天来看,谁是贡献占比最高的提交者? +### 按一周中的每一天来看,谁是贡献占比最高的提交者? {#who-is-the-highest-percentage-contributor-per-day-of-week} 如果我们只按提交次数来考虑: @@ -1514,7 +1514,7 @@ LIMIT 5 BY root ``` -### 某位作者的代码中,有多少百分比被其他作者删除? +### 某位作者的代码中,有多少百分比被其他作者删除? {#what-percentage-of-code-for-an-author-has-been-removed-by-other-authors} 对于这个问题,我们需要将某位作者编写的代码行数,除以该作者被其他贡献者删除的代码总行数。 @@ -1565,7 +1565,7 @@ LIMIT 10 ``` -### 列出被重写次数最多的文件 +### 列出被重写次数最多的文件 {#list-files-that-were-rewritten-most-number-of-times} 对于这个问题,最简单的方法可能是按文件路径统计行修改次数(仅限当前仍存在的文件),例如: @@ -1708,7 +1708,7 @@ LIMIT 10 ``` -### 在一周中的哪一天,代码留存在代码库中的概率最高? +### 在一周中的哪一天,代码留存在代码库中的概率最高? {#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository} 为此,我们需要对每一行代码进行唯一标识。由于同一行可能在一个文件中出现多次,我们通过文件路径和该行的内容来进行估算。 @@ -1771,7 +1771,7 @@ GROUP BY dayOfWeek(added_day) AS day_of_week_added ``` -### 按平均代码年龄排序的文件 +### 按平均代码年龄排序的文件 {#files-sorted-by-average-code-age} 此查询使用与[代码在仓库中保留概率最高的是一周中的哪一天](#what-weekday-does-the-code-have-the-highest-chance-to-stay-in-the-repository)相同的原理——通过路径和行内容来唯一标识一行代码。 这使我们能够识别一行代码从被添加到被删除之间的时间。我们仅筛选当前仍存在的文件和代码,并对每个文件内所有代码行的时间进行平均。 @@ -1862,7 +1862,7 @@ LIMIT 10 ``` -### 谁更倾向于编写更多的测试 / CPP 代码 / 注释? +### 谁更倾向于编写更多的测试 / CPP 代码 / 注释? {#who-tends-to-write-more-tests--cpp-code--comments} 我们可以用几种方式来回答这个问题。若聚焦于代码与测试的比例,这个查询相对简单——统计对包含 `tests` 的文件夹的贡献次数,并计算其占总贡献次数的比例。 @@ -1996,7 +1996,7 @@ LIMIT 10 请注意,我们是按代码贡献排序的。对于所有主要贡献者来说,这个比例都出奇地高,这也是我们代码之所以如此易读的原因之一。 -### 不同作者的提交中代码/注释比例随时间如何变化? +### 不同作者的提交中代码/注释比例随时间如何变化? {#how-does-an-authors-commits-change-over-time-with-respect-to-codecomments-percentage} 按作者维度计算这个指标非常简单, @@ -2114,7 +2114,7 @@ LIMIT 20 令人鼓舞的是,我们的评论比例相当稳定,并不会随着作者贡献时间的增加而下降。 -### 代码在被重写之前的平均时间是多少?中位数(代码衰减的“半衰期”)又是多少? +### 代码在被重写之前的平均时间是多少?中位数(代码衰减的“半衰期”)又是多少? {#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay} 我们可以使用与[列出被重写次数最多或被最多作者重写的文件](#list-files-that-were-rewritten-most-number-of-times)相同的原则来识别重写行为,但这次针对所有文件。使用窗口函数计算每个文件两次重写之间的时间间隔,在此基础上,我们可以计算所有文件整体的平均值和中位数。 @@ -2175,7 +2175,7 @@ FROM rewrites ``` -### 从代码最有可能被重写的角度来看,什么时候写代码是最“糟糕”的? +### 从代码最有可能被重写的角度来看,什么时候写代码是最“糟糕”的? {#what-is-the-worst-time-to-write-code-in-sense-that-the-code-has-highest-chance-to-be-re-written} 类似于 [What is the average time before code will be rewritten and the median (half-life of code decay)?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) 和 [List files that were rewritten most number of time or by most of authors](#list-files-that-were-rewritten-most-number-of-times),只是这里我们按一周中的星期几进行聚合。可按需要进行调整,例如按一年中的月份。 @@ -2240,7 +2240,7 @@ GROUP BY dayOfWeek ``` -### 哪位作者的代码「黏性」最高? +### 哪位作者的代码「黏性」最高? {#which-authors-code-is-the-most-sticky} 我们将「黏性」定义为:一位作者的代码在被重写之前能保留多长时间。类似于前一个问题 [代码在被重写前的平均时间是多少?以及中位数(代码衰减的半衰期)?](#what-is-the-average-time-before-code-will-be-rewritten-and-the-median-half-life-of-code-decay) —— 使用相同的重写度量方式,即文件中有 50% 的内容为新增、50% 为删除。我们按作者计算平均重写时间,并且只考虑在超过两个文件上有贡献的作者。 @@ -2318,7 +2318,7 @@ LIMIT 10 ``` -### 作者连续提交天数最多 +### 作者连续提交天数最多 {#most-consecutive-days-of-commits-by-an-author} 此查询首先需要计算每位作者在哪些日期进行了提交。使用按作者分区的窗口函数,我们可以计算各次提交之间相隔的天数。对于每次提交,如果距离上一次提交相隔 1 天,则将其标记为连续(1),否则为 0,并将这一结果存入 `consecutive_day`。 @@ -2374,7 +2374,7 @@ LIMIT 10 ``` -### 文件的逐行提交历史 +### 文件的逐行提交历史 {#line-by-line-commit-history-of-a-file} 文件可能会被重命名。发生这种情况时,我们会产生一个重命名事件,其中 `path` 列会被设置为文件的新路径,而 `old_path` 则表示之前的位置,例如: @@ -2455,7 +2455,7 @@ FORMAT PrettyCompactMonoBlock ## 未解决的问题 {#unsolved-questions} -### Git blame +### Git blame {#git-blame} 由于目前无法在数组函数中保持状态,因此在实践中很难得到精确的结果。使用 `arrayFold` 或 `arrayReduce` 之后就可以做到,因为它们允许在每次迭代时保存状态。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md index b578cde5ded..27c0ef870bf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/hacker-news.md @@ -7,7 +7,7 @@ doc_type: 'guide' keywords: ['示例数据集', 'Hacker News', '样本数据', '文本分析', '向量搜索'] --- -# Hacker News 数据集 +# Hacker News 数据集 {#hacker-news-dataset} > 在本教程中,你将把 2800 万行 Hacker News 数据(来自 CSV 和 Parquet 两种格式)插入到一个 ClickHouse 表中,并运行一些简单的查询来探索这些数据。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md index 984d1a75820..1d6c3ddcb14 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/laion.md @@ -11,7 +11,7 @@ keywords: ['示例数据集', 'laion', '图像嵌入', '示例数据', '机器 该数据集包含图像 URL、图像及其说明文字各自的嵌入向量、图像与图像说明文字之间的相似度评分,以及元数据,例如图像宽度/高度、许可证类型和 NSFW 标志。我们可以使用该数据集来演示 ClickHouse 中的[近似最近邻搜索](../../engines/table-engines/mergetree-family/annindexes.md)。 -## 数据准备 +## 数据准备 {#data-preparation} 在原始数据中,embedding 向量和元数据存储在不同的文件中。数据准备步骤会下载数据、合并这些文件, 将它们转换为 CSV 格式并导入 ClickHouse。可以使用下面的 `download.sh` 脚本来完成这一操作: @@ -40,28 +40,28 @@ npy_file = "img_emb_" + str_i + '.npy' metadata_file = "metadata_" + str_i + '.parquet' text_npy = "text_emb_" + str_i + '.npy' -# 加载所有文件 +# 加载所有文件 {#load-all-files} im_emb = np.load(npy_file) text_emb = np.load(text_npy) data = pd.read_parquet(metadata_file) -# 合并文件 +# 合并文件 {#combine-files} data = pd.concat([data, pd.DataFrame({"image_embedding" : [*im_emb]}), pd.DataFrame({"text_embedding" : [*text_emb]})], axis=1, copy=False) -# 待导入 ClickHouse 的列 +# 待导入 ClickHouse 的列 {#columns-to-be-imported-into-clickhouse} data = data[['url', 'caption', 'NSFW', 'similarity', "image_embedding", "text_embedding"]] -# 将 np.arrays 转换为列表 +# 将 np.arrays 转换为列表 {#transform-nparrays-to-lists} data['image_embedding'] = data['image_embedding'].apply(lambda x: x.tolist()) data['text_embedding'] = data['text_embedding'].apply(lambda x: x.tolist()) -# 此处需要使用这个小技巧,因为 caption 有时会包含各种引号 +# 此处需要使用这个小技巧,因为 caption 有时会包含各种引号 {#this-small-hack-is-needed-because-caption-sometimes-contains-all-kind-of-quotes} data['caption'] = data['caption'].apply(lambda x: x.replace("'", " ").replace('"', " ")) -# 导出数据为 CSV 文件 +# 导出数据为 CSV 文件 {#export-data-as-csv-file} data.to_csv(str_i + '.csv', header=False) -# 删除原始数据文件 +# 删除原始数据文件 {#removed-raw-data-files} os.system(f"rm {npy_file} {metadata_file} {text_npy}") ``` @@ -76,7 +76,7 @@ seq 0 409 | xargs -P1 -I{} bash -c './download.sh {}' (上面的 Python 脚本非常慢(每个文件大约需要 2–10 分钟),占用大量内存(每个文件 41 GB),且生成的 CSV 文件也很大(每个 10 GB),使用时请谨慎。如果你的 RAM 足够多,可以增大 `-P1` 的数值以提高并行度。如果这仍然太慢,可以考虑设计更好的摄取流程——例如先将 .npy 文件转换为 Parquet,然后使用 ClickHouse 完成其余处理。) -## 创建表 +## 创建表 {#create-table} 要先创建一个不带索引的表,运行: @@ -105,7 +105,7 @@ INSERT INTO laion FROM INFILE '{path_to_csv_files}/*.csv' 请注意,`id` 列仅用于示例说明,脚本会向其中写入非唯一值。 -## 运行基于暴力算法的向量相似度搜索 +## 运行基于暴力算法的向量相似度搜索 {#run-a-brute-force-vector-similarity-search} 要运行一次基于暴力算法的近似向量搜索,请执行: @@ -137,7 +137,7 @@ SELECT url, caption FROM laion ORDER BY cosineDistance(image_embedding, {target: ``` -## 使用向量相似性索引执行近似向量相似性搜索 +## 使用向量相似性索引执行近似向量相似性搜索 {#run-an-approximate-vector-similarity-search-with-a-vector-similarity-index} 现在我们在该表上定义两个向量相似性索引。 @@ -194,7 +194,7 @@ SELECT url, caption FROM laion ORDER BY cosineDistance(image_embedding, {target: 通常我们希望为新的图像或新的图像描述创建嵌入向量,并在数据中搜索相似的图像/图像描述对。我们可以使用 [UDF](/sql-reference/functions/udf) 直接在客户端中创建 `target` 向量。务必使用同一模型来生成原始数据和搜索时用的新嵌入向量。下面的脚本使用的是 `ViT-B/32` 模型,该模型也是此数据集所基于的模型。 -### 文本嵌入 +### 文本嵌入 {#text-embeddings} 首先,将以下 Python 脚本保存到 ClickHouse 数据路径下的 `user_scripts/` 目录中,并将其设为可执行文件(`chmod +x encode_text.py`)。 @@ -256,7 +256,7 @@ LIMIT 10 请注意,`encode_text()` UDF 本身的计算可能需要几秒钟才能生成嵌入向量。 -### 图像嵌入 +### 图像嵌入 {#image-embeddings} 图像嵌入的创建方式类似,我们提供了一个 Python 脚本,可为以本地图像文件形式存储的图像生成嵌入向量。 @@ -304,7 +304,7 @@ if __name__ == '__main__': 获取示例图片进行搜索: ```shell -# 获取乐高套装的随机图片 +# 获取乐高套装的随机图片 {#get-a-random-image-of-a-lego-set} $ wget http://cdn.firstcry.com/brainbees/images/products/thumb/191325a.jpg ``` diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md index 000c71bd970..26aa0c85cae 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/menus.md @@ -15,22 +15,22 @@ keywords: ['example dataset', 'menus', 'historical data', 'sample data', 'nypl'] 这些数据来自图书馆馆藏档案,可能不完整,也不一定适合严格的统计分析。不过它也非常有趣且“美味”。 数据规模仅为关于菜单菜品的 130 万条记录——对 ClickHouse 来说,这个数据量非常小,但仍然是一个很好的示例。 -## 下载数据集 +## 下载数据集 {#download-dataset} 运行以下命令: ```bash wget https://s3.amazonaws.com/menusdata.nypl.org/gzips/2021_08_01_07_01_17_data.tgz -# 可选:验证校验和 +# 可选:验证校验和 {#option-validate-the-checksum} md5sum 2021_08_01_07_01_17_data.tgz -# 校验和应为:db6126724de939a5481e3160a2d67d15 +# 校验和应为:db6126724de939a5481e3160a2d67d15 {#checksum-should-be-equal-to-db6126724de939a5481e3160a2d67d15} ``` 如有需要,请将链接替换为来自 [http://menus.nypl.org/data](http://menus.nypl.org/data) 的最新更新链接。 下载大小约为 35 MB。 -## 解压数据集 +## 解压数据集 {#unpack-dataset} ```bash tar xvf 2021_08_01_07_01_17_data.tgz @@ -46,7 +46,7 @@ tar xvf 2021_08_01_07_01_17_data.tgz * `MenuItem` — 菜单中的一项。某个菜单页面上的一道菜及其价格,并包含指向菜品和菜单页面的链接。 -## 创建表 +## 创建表 {#create-tables} 我们使用 [Decimal](../../sql-reference/data-types/decimal.md) 数据类型存储价格。 @@ -114,7 +114,7 @@ CREATE TABLE menu_item ``` -## 导入数据 +## 导入数据 {#import-data} 将数据上传到 ClickHouse,请运行: @@ -134,7 +134,7 @@ clickhouse-client --format_csv_allow_single_quotes 0 --input_format_null_as_defa 设置 [date_time_input_format best_effort](/operations/settings/formats#date_time_input_format) 允许以多种格式解析 [DateTime](../../sql-reference/data-types/datetime.md) 字段。例如,不带秒的 ISO-8601 时间(如 `2000-01-01 01:02`)也会被识别。如果不启用此设置,则只允许固定格式的 DateTime。 -## 数据反规范化 +## 数据反规范化 {#denormalize-data} 数据以[规范化形式](https://en.wikipedia.org/wiki/Database_normalization#Normal_forms)分布在多个表中。这意味着,如果你想查询例如菜单项对应的菜品名称,就必须执行 [JOIN](/sql-reference/statements/select/join)。 对于典型的分析任务,预先对数据进行 JOIN 合并,以避免每次查询都执行 `JOIN`,要高效得多。这被称为“反规范化”数据。 @@ -187,7 +187,7 @@ FROM menu_item ``` -## 验证数据 +## 验证数据 {#validate-data} 查询: @@ -206,7 +206,7 @@ SELECT count() FROM menu_item_denorm; ## 执行一些查询 {#run-queries} -### 菜品历史价格平均值 +### 菜品历史价格平均值 {#query-averaged-historical-prices} 查询: @@ -249,7 +249,7 @@ ORDER BY d ASC; 请谨慎看待,仅供参考。 -### 汉堡价格 +### 汉堡价格 {#query-burger-prices} 查询: @@ -287,7 +287,7 @@ ORDER BY d ASC; ``` -### 伏特加 +### 伏特加 {#query-vodka} 查询: @@ -322,7 +322,7 @@ ORDER BY d ASC; 为了查到 vodka,我们就得写 `ILIKE '%vodka%'`,本身就很能说明问题。 -### 鱼子酱 +### 鱼子酱 {#query-caviar} 我们来打印鱼子酱的价格,同时打印任意一道包含鱼子酱的菜肴名称。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md index 38618a5ca35..22545e4e922 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/noaa.md @@ -28,7 +28,7 @@ keywords: ['示例数据集', 'noaa', '天气数据', '样本数据', '气候'] - 一个适用于 ClickHouse 的[预先准备好的版本](#pre-prepared-data)数据,已完成清洗、重组和富化。该数据覆盖 1900 年至 2022 年。 - [下载原始数据](#original-data)并转换为 ClickHouse 所需的格式。希望添加自定义列的用户可以考虑采用这种方式。 -### 预先准备的数据 +### 预先准备的数据 {#pre-prepared-data} 更具体地说,已经移除了所有在 NOAA 的质量检查中未出现任何失败的行。数据也从“每行一个观测值”重构为“每个测站 ID 与日期对应一行”,即: @@ -55,7 +55,7 @@ wget https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enriche 下面将说明下载并转换原始数据,以便将其加载到 ClickHouse 的步骤。 -#### 下载 +#### 下载 {#download} 下载原始数据: @@ -64,7 +64,7 @@ for i in {1900..2023}; do wget https://noaa-ghcn-pds.s3.amazonaws.com/csv.gz/${i ``` -#### 数据采样 +#### 数据采样 {#sampling-the-data} ```bash $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format PrettyCompact @@ -108,7 +108,7 @@ $ clickhouse-local --query "SELECT * FROM '2021.csv.gz' LIMIT 10" --format Prett 每行一个测量值会在 ClickHouse 中产生稀疏的表结构。我们应当转换为每个时间点和测站一行的形式,将各测量项作为列。首先,我们将数据集限制为没有问题的行,即 `qFlag` 等于空字符串的记录。 -#### 清洗数据 +#### 清洗数据 {#clean-the-data} 使用 [ClickHouse local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local),我们可以筛选出代表感兴趣测量数据并满足质量要求的行: @@ -122,7 +122,7 @@ FROM file('*.csv.gz', CSV, 'station_id String, date String, measurement String, 由于数据量超过 26 亿行,这个查询执行得并不快,因为需要解析所有文件。在我们的 8 核机器上,这大约需要 160 秒。 -### 透视数据 +### 透视数据 {#pivot-data} 虽然“每行一条测量记录”的结构也可以在 ClickHouse 中使用,但会让后续查询不必要地变得复杂。理想情况下,我们希望每个站点 ID 和日期对应一行,其中每种测量类型及其对应的数值都是单独的一列,即: @@ -161,7 +161,7 @@ done 此查询会生成一个 50GB 的单个文件 `noaa.csv`。 -### 丰富数据 +### 丰富数据 {#enriching-the-data} 这些数据除了包含前缀为国家代码的站点 ID 外,不包含任何其他位置信息。理想情况下,每个站点都应关联有纬度和经度。为此,NOAA 贴心地将每个站点的详细信息单独提供在一个 [ghcnd-stations.txt](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file) 文件中。该文件包含[多列数据](https://github.com/awslabs/open-data-docs/tree/main/docs/noaa/noaa-ghcn#format-of-ghcnd-stationstxt-file),其中有五列对后续分析很有用:id、latitude、longitude、elevation 和 name。 @@ -194,7 +194,7 @@ FROM file('noaa.csv', CSV, 此查询运行需要几分钟时间,并生成一个大小为 6.4 GB 的文件 `noaa_enriched.parquet`。 -## 创建表 +## 创建表 {#create-table} 使用 ClickHouse 客户端在 ClickHouse 中创建一个 MergeTree 表。 @@ -223,7 +223,7 @@ CREATE TABLE noaa ## 向 ClickHouse 写入数据 {#inserting-into-clickhouse} -### 从本地文件插入 +### 从本地文件插入 {#inserting-from-local-file} 在 ClickHouse 客户端中,可以按如下方式从本地文件插入数据: @@ -236,7 +236,7 @@ INSERT INTO noaa FROM INFILE '<路径>/noaa_enriched.parquet' 有关如何加快加载速度,请参见[此处](https://clickhouse.com/blog/real-world-data-noaa-climate-data#load-the-data)。 -### 从 S3 中导入数据 +### 从 S3 中导入数据 {#inserting-from-s3} ```sql INSERT INTO noaa SELECT * @@ -249,7 +249,7 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/noaa/noaa_enr ## 查询示例 {#sample-queries} -### 有史以来的最高气温 +### 有史以来的最高气温 {#highest-temperature-ever} ```sql SELECT @@ -278,7 +278,7 @@ LIMIT 5 令人放心的是,其与截至 2023 年 [Furnace Creek](https://www.google.com/maps/place/36%C2%B027'00.0%22N+116%C2%B052'00.1%22W/@36.1329666,-116.1104099,8.95z/data=!4m5!3m4!1s0x0:0xf2ed901b860f4446!8m2!3d36.45!4d-116.8667) 的[官方记录](https://en.wikipedia.org/wiki/List_of_weather_records#Highest_temperatures_ever_recorded)高度一致。 -### 最佳滑雪胜地 +### 最佳滑雪胜地 {#best-ski-resorts} 使用这份[美国滑雪胜地列表](https://gist.githubusercontent.com/gingerwizard/dd022f754fd128fdaf270e58fa052e35/raw/622e03c37460f17ef72907afe554cb1c07f91f23/ski_resort_stats.csv)及其各自位置,将其与过去 5 年中任意单月降雪量最高的前 1000 个气象站进行关联。按 [geoDistance](/sql-reference/functions/geo/coordinates/#geodistance) 对关联结果排序,并将距离限制在 20 公里以内,从中为每个滑雪胜地选取距离最近的一条记录,然后按总降雪量排序。注意,我们还将滑雪胜地限制在海拔 1800 米以上,将其作为良好滑雪条件的一个粗略指标。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md index 4c0df670537..d17faeeb76b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nyc-taxi.md @@ -24,7 +24,7 @@ import TabItem from '@theme/TabItem'; ::: -## 创建 `trips` 表 +## 创建 `trips` 表 {#create-the-table-trips} 首先为出租车行程创建一张表: @@ -125,7 +125,7 @@ FROM gcs( -## 示例查询 +## 示例查询 {#sample-queries} 下面的查询是在上文所述的示例数据上执行的。用户可以在 [sql.clickhouse.com](https://sql.clickhouse.com/?query=U0VMRUNUIGNvdW50KCkgRlJPTSBueWNfdGF4aS50cmlwcw\&chart=eyJ0eXBlIjoibGluZSIsImNvbmZpZyI6eyJ0aXRsZSI6IlRlbXBlcmF0dXJlIGJ5IGNvdW50cnkgYW5kIHllYXIiLCJ4YXhpcyI6InllYXIiLCJ5YXhpcyI6ImNvdW50KCkiLCJzZXJpZXMiOiJDQVNUKHBhc3Nlbmdlcl9jb3VudCwgJ1N0cmluZycpIn19) 上针对完整数据集运行这些示例查询,只需将下面的查询修改为使用表 `nyc_taxi.trips`。 @@ -182,7 +182,7 @@ ORDER BY passenger_count ASC ``` -## 下载预先生成的分区 +## 下载预先生成的分区 {#download-of-prepared-partitions} :::note 以下步骤介绍原始数据集的信息,以及将预先生成的分区加载到自行管理的 ClickHouse 服务器环境中的方法。 @@ -195,9 +195,9 @@ ORDER BY passenger_count ASC ```bash $ curl -O https://datasets.clickhouse.com/trips_mergetree/partitions/trips_mergetree.tar -# 验证校验和 +# 验证校验和 {#validate-the-checksum} $ md5sum trips_mergetree.tar -# 校验和应为:f3b8d469b41d9a82da064ded7245d12c +# 校验和应为:f3b8d469b41d9a82da064ded7245d12c {#checksum-should-be-equal-to-f3b8d469b41d9a82da064ded7245d12c} $ tar xvf trips_mergetree.tar -C /var/lib/clickhouse # ClickHouse 数据目录的路径 $ # 检查解压数据的权限,必要时进行修复 $ sudo service clickhouse-server restart @@ -209,7 +209,7 @@ $ clickhouse-client --query "select count(*) from datasets.trips_mergetree" ::: -## 单机环境下的结果 +## 单机环境下的结果 {#results-on-single-server} 问题 1: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md index 7f261114132..d66f75a12f1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/nypd_complaint_data.md @@ -42,7 +42,7 @@ keywords: ['示例数据集', 'nypd', '犯罪数据', '样本数据', '公共数 在开始使用 ClickHouse 数据库之前,请先熟悉一下该 TSV 文件中的数据。 -### 查看源 TSV 文件中的字段 +### 查看源 TSV 文件中的字段 {#look-at-the-fields-in-the-source-tsv-file} 这是一个查询 TSV 文件的示例命令,但先不要运行它。 @@ -119,7 +119,7 @@ New Georeferenced Column Nullable(String) 此时,应检查 TSV 文件中的列是否与[数据集网页](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243)中 **Columns in this Dataset** 部分指定的列名和类型一致。该数据集中的数据类型定义并不十分具体,所有数值型字段都被设置为 `Nullable(Float64)`,而其他所有字段则为 `Nullable(String)`。在创建用于存储这些数据的 ClickHouse 表时,可以指定更合适、性能更佳的数据类型。 -### 确定合适的表结构 +### 确定合适的表结构 {#determine-the-proper-schema} 要确定字段应使用哪些数据类型,必须先了解数据的实际形态。例如,字段 `JURISDICTION_CODE` 是一个数值类型:它应该是 `UInt8`,还是 `Enum`,或者使用 `Float64` 更为合适? @@ -210,7 +210,7 @@ clickhouse-local --input_format_max_rows_to_read_for_schema_inference=2000 \ 在撰写本文时使用的数据集中,`PARK_NM` 列中只有几百个不同的公园和游乐场名称。根据 [LowCardinality](/sql-reference/data-types/lowcardinality#description) 的建议,`LowCardinality(String)` 字段中的不同字符串数量应控制在 10,000 个以下,因此这个数量相对较小。 -### DateTime 字段 +### DateTime 字段 {#datetime-fields} 根据该[数据集网页](https://data.cityofnewyork.us/Public-Safety/NYPD-Complaint-Data-Current-Year-To-Date-/5uac-w243)中的 **Columns in this Dataset** 部分,可以看到为报告事件的开始和结束分别提供了日期和时间字段。查看 `CMPLNT_FR_DT` 和 `CMPLT_TO_DT` 的最小值和最大值,可以帮助判断这些字段是否始终有值: @@ -297,7 +297,7 @@ FORMAT PrettyCompact" 还需要对更多字段类型进行修改,这些都可以通过遵循相同的分析步骤来确定。查看字段中不同字符串取值的数量、数值字段的最小值和最大值,然后做出你的决策。本指南后面给出的表结构中包含了许多低基数的字符串字段和无符号整数字段,而浮点数值字段则很少。 ::: -## 连接日期和时间字段 +## 连接日期和时间字段 {#concatenate-the-date-and-time-fields} 要将日期和时间字段 `CMPLNT_FR_DT` 和 `CMPLNT_FR_TM` 拼接为一个可以转换为 `DateTime` 的 `String`,请选择这两个字段,并使用连接运算符进行拼接:`CMPLNT_FR_DT || ' ' || CMPLNT_FR_TM`。`CMPLNT_TO_DT` 和 `CMPLNT_TO_TM` 字段的处理方式相同。 @@ -328,7 +328,7 @@ FORMAT PrettyCompact" ``` -## 将日期和时间字符串转换为 DateTime64 类型 +## 将日期和时间字符串转换为 DateTime64 类型 {#convert-the-date-and-time-string-to-a-datetime64-type} 在本指南的前面部分中,我们发现 TSV 文件中存在早于 1970 年 1 月 1 日的日期,这意味着这些日期需要使用 64 位的 DateTime 类型。同时,还需要将日期格式从 `MM/DD/YYYY` 转换为 `YYYY/MM/DD`。这两项操作都可以通过 [`parseDateTime64BestEffort()`](../../sql-reference/functions/type-conversion-functions.md#parsedatetime64besteffort) 来完成。 @@ -389,7 +389,7 @@ FORMAT PrettyCompact" 上文中针对各列所选用的数据类型会体现在下面的表结构中。我们还需要确定表所使用的 `ORDER BY` 和 `PRIMARY KEY`。必须至少指定 `ORDER BY` 或 `PRIMARY KEY` 其中之一。下面是关于如何决定在 `ORDER BY` 中包含哪些列的一些指导原则,更多信息请参见本文档末尾的 *后续步骤* 部分。 -### `ORDER BY` 和 `PRIMARY KEY` 子句 +### `ORDER BY` 和 `PRIMARY KEY` 子句 {#order-by-and-primary-key-clauses} * `ORDER BY` 元组应包含在查询过滤条件中使用的字段 * 为了最大化磁盘压缩率,`ORDER BY` 元组中的字段应按基数从低到高排序 @@ -483,7 +483,7 @@ CREATE TABLE NYPD_Complaint ( ``` -### 查找表的主键 +### 查找表的主键 {#finding-the-primary-key-of-a-table} ClickHouse 的 `system` 数据库,特别是 `system.table`,存储了你刚刚创建的表的所有信息。下面的查询会显示 `ORDER BY`(排序键)和 `PRIMARY KEY`: @@ -518,7 +518,7 @@ Query id: 6a5b10bf-9333-4090-b36e-c7f08b1d9e01 我们将使用 `clickhouse-local` 工具对数据进行预处理,并使用 `clickhouse-client` 将其上传。 -### 使用的 `clickhouse-local` 参数 +### 使用的 `clickhouse-local` 参数 {#clickhouse-local-arguments-used} :::tip `table='input'` 出现在下面传给 clickhouse-local 的参数中。clickhouse-local 会获取提供的输入(`cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv`),并将该输入插入到一张表中。默认情况下,这张表被命名为 `table`。在本指南中,将这张表的名称设置为 `input`,以使数据流更加清晰。传给 clickhouse-local 的最后一个参数是一个从该表查询的语句(`FROM input`),随后通过管道传给 `clickhouse-client`,用于向表 `NYPD_Complaint` 写入数据。 @@ -569,7 +569,7 @@ cat ${HOME}/NYPD_Complaint_Data_Current__Year_To_Date_.tsv \ ``` -## 验证数据 +## 验证数据 {#validate-data} :::note 数据集每年会变动一到多次,因此你得到的计数结果可能与本文档中的示例不完全一致。 @@ -613,7 +613,7 @@ WHERE name = 'NYPD_Complaint' ## 执行一些查询 {#run-queries} -### 查询 1:按月对比投诉数量 +### 查询 1:按月对比投诉数量 {#query-1-compare-the-number-of-complaints-by-month} 查询: @@ -651,7 +651,7 @@ Query id: 7fbd4244-b32a-4acf-b1f3-c3aa198e74d9 ``` -### 查询 2:按行政区对比投诉总数 +### 查询 2:按行政区对比投诉总数 {#query-2-compare-total-number-of-complaints-by-borough} 查询: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md index 249ee95a712..c4b5f58e370 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/ontime.md @@ -127,7 +127,7 @@ CREATE TABLE `ontime` ORDER BY (Year, Quarter, Month, DayofMonth, FlightDate, IATA_CODE_Reporting_Airline); ``` -## 从原始数据导入 +## 从原始数据导入 {#import-from-raw-data} 下载数据: @@ -144,7 +144,7 @@ ls -1 *.zip | xargs -I{} -P $(nproc) bash -c "echo {}; unzip -cq {} '*.csv' | se (如果你的服务器出现内存不足或其他问题,请删除 `-P $(nproc)` 这一部分) -## 从已保存的副本导入 +## 从已保存的副本导入 {#import-from-a-saved-copy} 你也可以通过以下查询,从已保存的副本中导入数据: @@ -155,7 +155,7 @@ INSERT INTO ontime SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazo 该快照创建于 2022-05-29。 -## 查询 +## 查询 {#queries} Q0. diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md index 2831d7e3671..32ec8b4f04f 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/stackoverflow.md @@ -22,7 +22,7 @@ import stackoverflow from '@site/static/images/getting-started/example-datasets/ 该数据集的模式说明可在[此处](https://meta.stackexchange.com/questions/2677/database-schema-documentation-for-the-public-data-dump-and-sede)找到。 -## 预置数据 +## 预置数据 {#pre-prepared-data} 我们提供了一份 Parquet 格式的数据副本,内容更新至 2024 年 4 月。虽然从行数规模来看(6,000 万条帖子),这个数据集对 ClickHouse 来说并不算大,但其中包含了大量文本以及体积较大的 String 类型列。 @@ -33,7 +33,7 @@ CREATE DATABASE stackoverflow 以下时间测试结果基于一个位于 `eu-west-2`、具有 96 GiB 内存和 24 个 vCPU 的 ClickHouse Cloud 集群。数据集位于 `eu-west-3`。 -### 文章 +### 文章 {#posts} ```sql CREATE TABLE stackoverflow.posts @@ -73,7 +73,7 @@ INSERT INTO stackoverflow.posts SELECT * FROM s3('https://datasets-documentation Posts 数据集也可以按年份获取,例如 [https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet) -### 投票 +### 投票 {#votes} ```sql CREATE TABLE stackoverflow.votes @@ -96,7 +96,7 @@ INSERT INTO stackoverflow.votes SELECT * FROM s3('https://datasets-documentation 投票数据也可以按年份获取,例如:[https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/votes/2020.parquet) -### 评论 +### 评论 {#comments} ```sql CREATE TABLE stackoverflow.comments @@ -120,7 +120,7 @@ INSERT INTO stackoverflow.comments SELECT * FROM s3('https://datasets-documentat 评论数据也可以按年份获取,例如:[https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/posts/2020.parquet](https://datasets-documentation.s3.eu-west-3.amazonaws.com/stackoverflow/parquet/comments/2020.parquet) -### 用户 +### 用户 {#users} ```sql CREATE TABLE stackoverflow.users @@ -147,7 +147,7 @@ INSERT INTO stackoverflow.users SELECT * FROM s3('https://datasets-documentation ``` -### 徽章 +### 徽章 {#badges} ```sql CREATE TABLE stackoverflow.badges @@ -168,7 +168,7 @@ INSERT INTO stackoverflow.badges SELECT * FROM s3('https://datasets-documentatio ``` -### 文章链接 +### 文章链接 {#postlinks} ```sql CREATE TABLE stackoverflow.postlinks @@ -188,7 +188,7 @@ INSERT INTO stackoverflow.postlinks SELECT * FROM s3('https://datasets-documenta ``` -### PostHistory +### PostHistory {#posthistory} ```sql CREATE TABLE stackoverflow.posthistory @@ -217,7 +217,7 @@ INSERT INTO stackoverflow.posthistory SELECT * FROM s3('https://datasets-documen 原始数据集以压缩的 7-Zip XML 格式提供,可从 [https://archive.org/download/stackexchange](https://archive.org/download/stackexchange) 获取,文件前缀为 `stackoverflow.com*`。 -### 下载 +### 下载 {#download} ```bash wget https://archive.org/download/stackexchange/stackoverflow.com-Badges.7z @@ -232,7 +232,7 @@ wget https://archive.org/download/stackexchange/stackoverflow.com-Votes.7z 这些文件大小可达 35GB,具体下载时间取决于网络状况,大约需要 30 分钟——下载服务器的限速约为 20 MB/秒。 -### 转换为 JSON +### 转换为 JSON {#convert-to-json} 在撰写本文时,ClickHouse 暂不原生支持将 XML 作为输入格式。要将数据加载到 ClickHouse,我们首先将其转换为 NDJSON。 @@ -260,7 +260,7 @@ p7zip -d stackoverflow.com-Posts.7z ```bash mkdir posts cd posts -# 以下命令将输入的 XML 文件拆分为每个 10000 行的子文件 +# 以下命令将输入的 XML 文件拆分为每个 10000 行的子文件 {#the-following-splits-the-input-xml-file-into-sub-files-of-10000-rows} tail +3 ../Posts.xml | head -n -1 | split -l 10000 --filter='{ printf "\n"; cat - ; printf "\n"; } > $FILE' - ``` @@ -283,7 +283,7 @@ clickhouse local --query "SELECT * FROM file('posts.json', JSONEachRow, 'Id Int3 下面是一些简单的查询示例,帮助你开始使用。 -### Stack Overflow 上最常用的标签 +### Stack Overflow 上最常用的标签 {#most-popular-tags-on-stack-overflow} ```sql @@ -313,7 +313,7 @@ LIMIT 10 ``` -### 回答数最多的用户(活跃账户) +### 回答数最多的用户(活跃账户) {#user-with-the-most-answers-active-accounts} 账户必须包含 `UserId`。 @@ -340,7 +340,7 @@ LIMIT 5 ``` -### 阅读量最高的 ClickHouse 相关文章 +### 阅读量最高的 ClickHouse 相关文章 {#clickhouse-related-posts-with-the-most-views} ```sql SELECT @@ -371,7 +371,7 @@ LIMIT 10 ``` -### 最具争议的帖子 +### 最具争议的帖子 {#most-controversial-posts} ```sql SELECT diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md index 4344f035678..3df93f349fa 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tpch.md @@ -13,12 +13,12 @@ keywords: ['示例数据集', 'tpch', '基准测试', '示例数据', '性能测 **参考文献** -- [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) -- [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291)(Poess 等,2000) -- [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5)(Boncz 等,2013) -- [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138)(Dresseler 等,2020) +* [TPC-H](https://www.tpc.org/tpc_documents_current_versions/current_specifications5.asp) +* [New TPC Benchmarks for Decision Support and Web Commerce](https://doi.org/10.1145/369275.369291)(Poess 等,2000) +* [TPC-H Analyzed: Hidden Messages and Lessons Learned from an Influential Benchmark](https://doi.org/10.1007/978-3-319-04936-6_5)(Boncz 等,2013) +* [Quantifying TPC-H Choke Points and Their Optimizations](https://doi.org/10.14778/3389133.3389138)(Dresseler 等,2020) -## 数据生成与导入 +## 数据生成与导入 {#data-generation-and-import} 首先,检出 TPC-H 仓库代码并编译数据生成器: @@ -61,7 +61,6 @@ make (例如 `Identifier`、`Variable text, size N`)。这仅带来更好的可读性,由 `dbgen` 生成的 SQL-92 数据类型 (例如 `INTEGER`、`VARCHAR(40)`) 在 ClickHouse 中同样可以正常工作。 - ```sql CREATE TABLE nation ( n_nationkey Int32, @@ -169,7 +168,6 @@ clickhouse-client --format_csv_delimiter '|' --query "INSERT INTO lineitem FORMA :::note 你也可以选择从公共 S3 存储桶中导入数据,而不是使用 tpch-kit 自行生成这些表。请确保先使用上面的 `CREATE` 语句创建空表。 - ```sql -- 扩展因子 1 INSERT INTO nation SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws.com/h/1/nation.tbl', NOSIGN, CSV) SETTINGS format_csv_delimiter = '|', input_format_defaults_for_omitted_fields = 1, input_format_csv_empty_as_default = 1; @@ -194,8 +192,7 @@ INSERT INTO lineitem SELECT * FROM s3('https://clickhouse-datasets.s3.amazonaws. ::: - -## 查询 +## 查询 {#queries} :::note 应启用 [`join_use_nulls`](../../operations/settings/settings.md#join_use_nulls) 设置,以获得符合 SQL 标准的正确结果。 @@ -348,7 +345,6 @@ ORDER BY **问题 5** - ```sql SELECT n_name, @@ -496,7 +492,6 @@ ORDER BY **Q9** - ```sql SELECT nation, @@ -850,7 +845,6 @@ WHERE **Q20** - ```sql SELECT s_name, diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md index 3feb9f29161..c20b0876e96 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/tw-weather.md @@ -26,7 +26,7 @@ keywords: ['示例数据集', 'weather', 'taiwan', '示例数据', '气候数据 - 为 ClickHouse 准备的[预处理数据版本](#pre-processed-data),已经过清洗、重构和富化。该数据集覆盖 1896 年至 2023 年。 - [下载原始数据](#original-raw-data)并转换为 ClickHouse 所需的格式。希望添加自定义列的用户可以在此基础上探索或完善自己的方案。 -### 预处理数据 +### 预处理数据 {#pre-processed-data} 该数据集也已经从“每行一条测量记录”的结构重组为“每个气象站 ID 与测量日期对应一行”的结构,即: @@ -47,16 +47,16 @@ C0X100,2016-01-01 04:00:00,1021.2,15.8,74,1.7,8.0,,,,,,,,,,,,,,,,,,,,,,, ```bash wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/preprocessed_weather_daily_1896_2023.tar.gz -# 可选:验证校验和 +# 可选:验证校验和 {#option-validate-the-checksum} md5sum preprocessed_weather_daily_1896_2023.tar.gz -# 校验和应为:11b484f5bd9ddafec5cfb131eb2dd008 +# 校验和应为:11b484f5bd9ddafec5cfb131eb2dd008 {#checksum-should-be-equal-to-11b484f5bd9ddafec5cfb131eb2dd008} tar -xzvf preprocessed_weather_daily_1896_2023.tar.gz daily_weather_preprocessed_1896_2023.csv -# 可选:验证校验和 +# 可选:验证校验和 {#option-validate-the-checksum} md5sum daily_weather_preprocessed_1896_2023.csv -# 校验和应为:1132248c78195c43d93f843753881754 +# 校验和应为:1132248c78195c43d93f843753881754 {#checksum-should-be-equal-to-1132248c78195c43d93f843753881754} ``` @@ -64,7 +64,7 @@ md5sum daily_weather_preprocessed_1896_2023.csv 以下内容介绍如何下载原始数据,以便按需进行转换和处理。 -#### 下载 +#### 下载 {#download} 要下载原始数据: @@ -73,9 +73,9 @@ mkdir tw_raw_weather_data && cd tw_raw_weather_data wget https://storage.googleapis.com/taiwan-weather-observaiton-datasets/raw_data_weather_daily_1896_2023.tar.gz -# 可选:验证校验和 +# 可选:验证校验和 {#option-validate-the-checksum} md5sum raw_data_weather_daily_1896_2023.tar.gz -# 校验和应为:b66b9f137217454d655e3004d7d1b51a +# 校验和应为:b66b9f137217454d655e3004d7d1b51a {#checksum-should-be-equal-to-b66b9f137217454d655e3004d7d1b51a} tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1928.csv @@ -84,23 +84,23 @@ tar -xzvf raw_data_weather_daily_1896_2023.tar.gz 466920_1931.csv ... -# 可选:验证校验和 +# 可选:验证校验和 {#option-validate-the-checksum} cat *.csv | md5sum -# 校验和应为:b26db404bf84d4063fac42e576464ce1 +# 校验和应为:b26db404bf84d4063fac42e576464ce1 {#checksum-should-be-equal-to-b26db404bf84d4063fac42e576464ce1} ``` -#### 获取台湾地区气象站列表 +#### 获取台湾地区气象站列表 {#retrieve-the-taiwan-weather-stations} ```bash wget -O weather_sta_list.csv https://github.com/Raingel/weather_station_list/raw/main/data/weather_sta_list.csv -# 可选:将 UTF-8-BOM 转换为 UTF-8 编码 +# 可选:将 UTF-8-BOM 转换为 UTF-8 编码 {#option-convert-the-utf-8-bom-to-utf-8-encoding} sed -i '1s/^\xEF\xBB\xBF//' weather_sta_list.csv ``` -## 创建表结构 +## 创建表结构 {#create-table-schema} 使用 ClickHouse 客户端在 ClickHouse 中创建 MergeTree 表。 @@ -144,7 +144,7 @@ ORDER BY (MeasuredDate); ## 向 ClickHouse 插入数据 {#inserting-into-clickhouse} -### 从本地文件插入 +### 从本地文件插入 {#inserting-from-local-file} 可以在 ClickHouse 客户端中通过以下方式从本地文件插入数据: @@ -165,7 +165,7 @@ INSERT INTO tw_weather_data FROM INFILE '/path/to/daily_weather_preprocessed_189 ``` -### 从 URL 插入数据 +### 从 URL 插入数据 {#inserting-from-url} ```sql INSERT INTO tw_weather_data SELECT * @@ -176,7 +176,7 @@ FROM url('https://storage.googleapis.com/taiwan-weather-observaiton-datasets/dai 如需了解如何加快这一过程,请参阅我们关于[优化大规模数据加载](https://clickhouse.com/blog/supercharge-your-clickhouse-data-loads-part2)的博文。 -## 检查数据行和大小 +## 检查数据行和大小 {#check-data-rows-and-sizes} 1. 先查看已插入了多少行: @@ -210,7 +210,7 @@ WHERE (`table` = 'tw_weather_data') AND active ## 查询示例 {#sample-queries} -### Q1: 查询指定年份中每个气象站的最高露点温度 +### Q1: 查询指定年份中每个气象站的最高露点温度 {#q1-retrieve-the-highest-dew-point-temperature-for-each-weather-station-in-the-specific-year} ```sql SELECT @@ -257,7 +257,7 @@ GROUP BY StationId ``` -### Q2: 在特定时间范围内按字段和气象站获取原始数据 +### Q2: 在特定时间范围内按字段和气象站获取原始数据 {#q2-raw-data-fetching-with-the-specific-duration-time-range-fields-and-weather-station} ```sql SELECT diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md index af1ced26910..7a2796ae642 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/uk-price-paid.md @@ -13,7 +13,7 @@ keywords: ['示例数据集', '英国房产', '示例数据', '房地产', '入 - 字段说明: https://www.gov.uk/guidance/about-the-price-paid-data - 包含 HM Land Registry 数据 © Crown copyright and database right 2021。本数据依据 Open Government Licence v3.0 授权许可使用。 -## 创建数据表 +## 创建数据表 {#create-table} ```sql CREATE DATABASE uk; @@ -40,7 +40,7 @@ ORDER BY (postcode1, postcode2, addr1, addr2); ``` -## 预处理并插入数据 +## 预处理并插入数据 {#preprocess-import-data} 我们将使用 `url` 函数将数据流式写入 ClickHouse。首先需要对部分传入数据进行预处理,包括: @@ -95,7 +95,7 @@ FROM url( 等待数据插入完成;根据网络速度,这可能需要一到两分钟。 -## 验证数据 +## 验证数据 {#validate-data} 通过查看插入了多少行来验证是否生效: @@ -119,7 +119,7 @@ WHERE name = 'uk_price_paid' 我们来运行一些查询来分析数据: -### 查询 1:各年份的平均价格 +### 查询 1:各年份的平均价格 {#average-price} ```sql runnable SELECT @@ -133,7 +133,7 @@ ORDER BY year ``` -### 查询 2:伦敦每年的平均价格 +### 查询 2:伦敦每年的平均价格 {#average-price-london} ```sql runnable SELECT @@ -150,7 +150,7 @@ ORDER BY year 2020 年房价发生了点变化!不过这大概不算什么意外…… -### 查询 3:最昂贵的街区 +### 查询 3:最昂贵的街区 {#most-expensive-neighborhoods} ```sql runnable SELECT diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md index 29eb820262b..90beb9a30ed 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/example-datasets/youtube-dislikes.md @@ -241,7 +241,7 @@ keywords: ['示例数据集', 'youtube', '示例数据', '视频分析', '点踩 ## 常见问题 {#questions} -### 如果视频关闭了评论功能,会不会降低观众点点赞或点踩的可能性? +### 如果视频关闭了评论功能,会不会降低观众点点赞或点踩的可能性? {#create-the-table} 当评论被关闭时,观众是否更倾向于通过点赞或点踩来表达他们对视频的看法? @@ -297,7 +297,7 @@ ORDER BY 启用评论似乎与更高的参与度有关。 -### 视频数量随时间如何变化——有哪些值得关注的事件? +### 视频数量随时间如何变化——有哪些值得关注的事件? {#insert-data} ```sql SELECT @@ -336,7 +336,7 @@ ORDER BY month ASC; 可以明显看出,在新冠疫情前后,上传者数量出现了激增([相关现象可见此处](https://www.theverge.com/2020/3/27/21197642/youtube-with-me-style-videos-views-coronavirus-cook-workout-study-home-beauty))。 -### 字幕数量随时间的变化及其出现时间 +### 字幕数量随时间的变化及其出现时间 {#count-row-numbers} 随着语音识别技术的进步,为视频创建字幕比以往任何时候都更容易。YouTube 在 2009 年底推出自动字幕功能——转折点就是那时吗? @@ -374,7 +374,7 @@ ORDER BY month ASC; 这引发了一场非常成功的活动,号召创作者为他们的视频添加字幕,以方便听力障碍和失聪的观众。 -### 各时间段上传量最高的用户 +### 各时间段上传量最高的用户 {#explore-the-data} ```sql WITH uploaders AS @@ -467,7 +467,7 @@ ORDER BY ``` -### 视图是如何分布的? +### 视图是如何分布的? {#if-someone-disables-comments-does-it-lower-the-chance-someone-will-actually-click-like-or-dislike} ```sql SELECT diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/index.md index fbc2cdfe715..75f01c972c0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/index.md @@ -9,9 +9,7 @@ title: '教程和示例数据集' doc_type: 'landing-page' --- - - -# 教程和示例数据集 +# 教程和示例数据集 {#tutorials-and-example-datasets} 我们提供了大量资源,帮助你上手并了解 ClickHouse 的工作原理: @@ -24,7 +22,6 @@ doc_type: 'landing-page' {/* 下表在构建时由脚本 https://github.com/ClickHouse/clickhouse-docs/blob/main/scripts/autogenerate-table-of-contents.sh 自动生成 */ } - {/*AUTOGENERATED_START*/ } | 页面 | 描述 | 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..cec1a762905 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 @@ -60,20 +60,20 @@ sudo apt-get install -y clickhouse-server clickhouse-client sudo service clickhouse-server start # 启动 ClickHouse 命令行客户端 -clickhouse-client # 如果已设置密码,请使用 "clickhouse-client --password"。 +clickhouse-client # 如果已设置密码,请使用 "clickhouse-client --password"。 ``` -## 安装 ClickHouse 服务端和客户端 +## 安装 ClickHouse 服务端和客户端 {#install-clickhouse-server-and-client} ```bash sudo apt-get install -y clickhouse-server clickhouse-client ``` -## 启动 ClickHouse +## 启动 ClickHouse {#start-clickhouse-server} 要启动 ClickHouse 服务器,请运行: @@ -94,7 +94,7 @@ clickhouse-client --password ``` -## 安装独立的 ClickHouse Keeper +## 安装独立的 ClickHouse Keeper {#install-standalone-clickhouse-keeper} :::tip 在生产环境中,我们强烈建议在专用节点上运行 ClickHouse Keeper。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md index 6553cdc7ef6..9ac903655ae 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_docker.md @@ -1,4 +1,4 @@ -# 使用 Docker 安装 ClickHouse +# 使用 Docker 安装 ClickHouse {#install-clickhouse-using-docker} 为方便起见,下面转载了 [Docker Hub](https://hub.docker.com/r/clickhouse/clickhouse-server/) 上的指南。可用的 Docker 镜像使用的是官方提供的 ClickHouse deb 软件包。 @@ -31,9 +31,9 @@ docker pull clickhouse/clickhouse-server -## 如何使用该镜像 +## 如何使用该镜像 {#how-to-use-image} -### 启动服务器实例 +### 启动服务器实例 {#start-server-instance} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickhouse/clickhouse-server @@ -43,18 +43,18 @@ docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 clickh 默认情况下,上面启动的服务器实例将以无密码的 `default` 用户身份运行。 -### 从原生客户端连接到它 +### 从原生客户端连接到它 {#connect-to-it-from-native-client} ```bash docker run -it --rm --network=container:some-clickhouse-server --entrypoint clickhouse-client clickhouse/clickhouse-server -# 或者 +# 或者 {#or} docker exec -it some-clickhouse-server clickhouse-client ``` 有关 ClickHouse 客户端的更多信息,请参阅[ClickHouse 客户端](/interfaces/cli)。 -### 使用 curl 进行连接 +### 使用 curl 进行连接 {#connect-to-it-using-curl} ```bash echo "SELECT 'Hello, ClickHouse!'" | docker run -i --rm --network=container:some-clickhouse-server buildpack-deps:curl curl 'http://localhost:8123/?query=' -s --data-binary @- @@ -62,14 +62,14 @@ echo "SELECT 'Hello, ClickHouse!'" | docker run -i --rm --network=container:some 有关 HTTP 接口的更多信息,请参阅 [ClickHouse HTTP 接口](/interfaces/http)。 -### 停止/移除容器 +### 停止/移除容器 {#stopping-removing-container} ```bash docker stop some-clickhouse-server docker rm some-clickhouse-server ``` -### 网络 +### 网络 {#networking} :::note 预定义用户 `default` 在未设置密码之前不具备网络访问权限, @@ -95,7 +95,7 @@ echo 'SELECT version()' | curl 'http://localhost:8123/' --data-binary @- 上面示例中的用户默认配置仅适用于本机(localhost)请求 ::: -### 卷(Volumes) +### 卷(Volumes) {#volumes} 通常,为了实现持久化,你可能需要在容器内挂载以下目录: @@ -116,7 +116,7 @@ docker run -d \ * `/docker-entrypoint-initdb.d/` - 包含数据库初始化脚本的文件夹(见下文)。 -## Linux 能力 +## Linux 能力 {#linear-capabilities} ClickHouse 提供了一些高级功能,这些功能需要启用若干 [Linux 能力(capabilities)](https://man7.org/linux/man-pages/man7/capabilities.7.html)。 @@ -131,29 +131,29 @@ docker run -d \ 如需了解更多信息,请参阅 ["在 Docker 中配置 CAP_IPC_LOCK 和 CAP_SYS_NICE 权限"](/knowledgebase/configure_cap_ipc_lock_and_cap_sys_nice_in_docker) -## 配置 +## 配置 {#configuration} 该容器对外暴露 8123 端口用于 [HTTP 接口](https://clickhouse.com/docs/interfaces/http_interface/),以及 9000 端口用于 [原生客户端](https://clickhouse.com/docs/interfaces/tcp/)。 ClickHouse 的配置由名为 “config.xml” 的文件进行定义([文档](https://clickhouse.com/docs/operations/configuration_files/))。 -### 使用自定义配置启动服务器实例 +### 使用自定义配置启动服务器实例 {#start-server-instance-with-custom-config} ```bash docker run -d --name some-clickhouse-server --ulimit nofile=262144:262144 -v /path/to/your/config.xml:/etc/clickhouse-server/config.xml clickhouse/clickhouse-server ``` -### 以自定义用户身份启动服务器 +### 以自定义用户身份启动服务器 {#start-server-custom-user} ```bash -# $PWD/data/clickhouse 目录应存在且归当前用户所有 +# $PWD/data/clickhouse 目录应存在且归当前用户所有 {#pwddataclickhouse-should-exist-and-be-owned-by-current-user} docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit nofile=262144:262144 -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` 当你使用挂载本地目录的镜像时,通常需要指定用户以保持正确的文件所有权。使用 `--user` 参数,并在容器内挂载 `/var/lib/clickhouse` 和 `/var/log/clickhouse-server`。否则,镜像会报错,容器将无法启动。 -### 以 root 启动服务器 +### 以 root 启动服务器 {#start-server-from-root} 在启用了用户命名空间的场景下,以 root 用户身份启动服务器会很有用。 要这样做,请运行: @@ -162,7 +162,7 @@ docker run --rm --user "${UID}:${GID}" --name some-clickhouse-server --ulimit no docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v "$PWD/logs/clickhouse:/var/log/clickhouse-server" -v "$PWD/data/clickhouse:/var/lib/clickhouse" clickhouse/clickhouse-server ``` -### 如何在启动时创建默认数据库和用户 +### 如何在启动时创建默认数据库和用户 {#how-to-create-default-db-and-user} 有时你可能希望在容器启动时创建一个用户(系统默认使用名为 `default` 的用户)和一个数据库。你可以通过环境变量 `CLICKHOUSE_DB`、`CLICKHOUSE_USER`、`CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` 和 `CLICKHOUSE_PASSWORD` 来实现: @@ -170,7 +170,7 @@ docker run --rm -e CLICKHOUSE_RUN_AS_ROOT=1 --name clickhouse-server-userns -v " docker run --rm -e CLICKHOUSE_DB=my_database -e CLICKHOUSE_USER=username -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=password -p 9000:9000/tcp clickhouse/clickhouse-server ``` -#### 管理 `default` 用户 +#### 管理 `default` 用户 {#managing-default-user} 当未设置 `CLICKHOUSE_USER`、`CLICKHOUSE_PASSWORD` 或 `CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT` 中任意一个时,`default` 用户默认禁用网络访问。 @@ -181,7 +181,7 @@ docker run --rm -e CLICKHOUSE_SKIP_USER_SETUP=1 -p 9000:9000/tcp clickhouse/clic ``` -## 如何扩展此镜像 +## 如何扩展此镜像 {#how-to-extend-image} 要在基于本镜像的自定义镜像中执行额外的初始化操作,请在 `/docker-entrypoint-initdb.d` 目录下添加一个或多个 `*.sql`、`*.sql.gz` 或 `*.sh` 脚本。入口点脚本调用 `initdb` 之后,会运行所有 `*.sql` 文件、执行所有可执行的 `*.sh` 脚本,并对该目录中所有不可执行的 `*.sh` 脚本执行 `source` 引入操作,以在启动服务前完成进一步初始化。\ 另外,你也可以提供环境变量 `CLICKHOUSE_USER` 和 `CLICKHOUSE_PASSWORD`,它们会在初始化期间被 clickhouse-client 使用。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md index 231282dc539..d0b37f7109c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_linux_tar_install.md @@ -1,4 +1,4 @@ -# 使用 tgz 归档文件安装 ClickHouse +# 使用 tgz 归档文件安装 ClickHouse {#install-clickhouse-using-tgz-archives} > 对于无法安装 `deb` 或 `rpm` 软件包的 Linux 发行版,建议使用官方预编译的 `tgz` 归档文件。 @@ -20,7 +20,7 @@ -## 获取最新的 ClickHouse 版本 +## 获取最新的 ClickHouse 版本 {#get-latest-version} 从 GitHub 获取最新的 ClickHouse 版本,并将其保存到 `LATEST_VERSION` 变量中。 @@ -31,7 +31,7 @@ export LATEST_VERSION ``` -## 检测系统架构 +## 检测系统架构 {#detect-system-architecture} 检测系统架构,并相应设置 ARCH 变量: @@ -44,7 +44,7 @@ esac ``` -## 为每个 ClickHouse 组件下载 tar 包 +## 为每个 ClickHouse 组件下载 tar 包 {#download-tarballs} 为每个 ClickHouse 组件下载 tar 包。该循环会优先尝试特定架构的 软件包,如果不存在则退回到通用软件包。 @@ -66,7 +66,7 @@ done ```bash -# 解压并安装 clickhouse-common-static 软件包 +# 解压并安装 clickhouse-common-static 软件包 {#extract-and-install-clickhouse-common-static-package} tar -xzvf "clickhouse-common-static-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" @@ -76,7 +76,7 @@ sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh" ```bash -# 提取并安装调试符号包 +# 提取并安装调试符号包 {#extract-and-install-debug-symbols-package} tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION.tgz" sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" @@ -86,7 +86,7 @@ sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh" ```bash -# 解压并安装服务器软件包及配置 +# 解压并安装服务器软件包及配置 {#extract-and-install-server-package-with-configuration} tar -xzvf "clickhouse-server-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-server-$LATEST_VERSION.tgz" sudo "clickhouse-server-$LATEST_VERSION/install/doinst.sh" configure @@ -97,7 +97,7 @@ sudo /etc/init.d/clickhouse-server start # 启动服务器 ```bash -# 提取并安装客户端软件包 +# 提取并安装客户端软件包 {#extract-and-install-client-package} tar -xzvf "clickhouse-client-$LATEST_VERSION-${ARCH}.tgz" \ || tar -xzvf "clickhouse-client-$LATEST_VERSION.tgz" sudo "clickhouse-client-$LATEST_VERSION/install/doinst.sh" diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md index b8c0c09030c..e79c70711d2 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_macos.md @@ -5,12 +5,12 @@ import privacy_allow from "@site/static/images/knowledgebase/fix-the-developer-v -# 使用 Homebrew 安装 ClickHouse +# 使用 Homebrew 安装 ClickHouse {#install-clickhouse-using-homebrew} -## 使用社区 Homebrew 配方进行安装 +## 使用社区 Homebrew 配方进行安装 {#install-using-community-homebrew-formula} 要在 macOS 上使用 [Homebrew](https://brew.sh/) 安装 ClickHouse,可以使用 ClickHouse 社区提供的 [Homebrew 配方](https://formulae.brew.sh/cask/clickhouse)。 @@ -19,7 +19,7 @@ brew install --cask clickhouse ``` -## 在 macOS 中修复开发者验证错误 +## 在 macOS 中修复开发者验证错误 {#fix-developer-verification-error-macos} 如果你使用 `brew` 安装 ClickHouse,可能会遇到来自 macOS 的错误提示。 默认情况下,macOS 不会运行由无法验证身份的开发者创建的应用程序或工具。 @@ -30,7 +30,7 @@ brew install --cask clickhouse 要绕过此验证错误,你需要将该应用从 macOS 的隔离区中移除,可以通过以下任一方式完成:在系统设置窗口中找到相应设置、使用终端,或者重新安装 ClickHouse。 -### 系统设置流程 +### 系统设置流程 {#system-settings-process} 将 `clickhouse` 可执行文件从隔离区移除的最简单方式是: @@ -50,7 +50,7 @@ brew install --cask clickhouse 现在你应该可以在终端中运行 `clickhouse` 命令了。 -### 终端流程 +### 终端流程 {#terminal-process} 有时点击 `Allow Anyway` 按钮并不能解决该问题,在这种情况下,你也可以通过命令行来完成这一流程。 或者你可能只是更喜欢使用命令行! diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md index 49e53e4f083..1528b065cce 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_quick_install.md @@ -1,11 +1,11 @@ -# 使用 curl 脚本安装 ClickHouse +# 使用 curl 脚本安装 ClickHouse {#install-clickhouse-via-script-using-curl} 如果无需在生产环境中安装 ClickHouse,最快的安装方式是使用 curl 运行安装脚本。该脚本会自动为您的操作系统选择合适的二进制文件。 -## 使用 curl 安装 ClickHouse +## 使用 curl 安装 ClickHouse {#install-clickhouse-using-curl} 运行以下命令,为你的操作系统下载一个独立的二进制可执行文件。 @@ -18,7 +18,7 @@ Mac 用户:如果你遇到提示无法验证二进制文件开发者的错误 ::: -## 启动 clickhouse-local +## 启动 clickhouse-local {#start-clickhouse-local} `clickhouse-local` 允许使用 ClickHouse 强大的 SQL 语法,在无需任何配置的情况下处理本地和远程文件。表数据会存储在临时位置,这意味着在重启 `clickhouse-local` 之后,先前创建的表将不再可用。 @@ -29,7 +29,7 @@ Mac 用户:如果你遇到提示无法验证二进制文件开发者的错误 ``` -## 启动 clickhouse-server +## 启动 clickhouse-server {#start-clickhouse-server} 如果您希望持久化存储数据,需要运行 `clickhouse-server`。您可以使用以下命令启动 ClickHouse 服务器: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md index 56bedaaca51..1a637e0d893 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_rpm_install.md @@ -5,7 +5,7 @@ -## 配置 RPM 软件源 +## 配置 RPM 软件源 {#setup-the-rpm-repository} 运行以下命令添加官方软件源: @@ -24,7 +24,7 @@ sudo zypper --gpg-auto-import-keys refresh clickhouse-stable 在以下步骤中,您可以根据所使用的包管理器,将 `yum install` 替换为 `zypper install`。 -## 安装 ClickHouse 服务端和客户端 +## 安装 ClickHouse 服务端和客户端 {#install-clickhouse-server-and-client-1} 要安装 ClickHouse,请运行以下命令: @@ -41,7 +41,7 @@ sudo yum install clickhouse-server-22.8.7.34 ``` -## 启动 ClickHouse 服务器 +## 启动 ClickHouse 服务器 {#start-clickhouse-server-1} 要启动 ClickHouse 服务器,运行以下命令: @@ -64,7 +64,7 @@ clickhouse-client --password ``` -## 安装独立的 ClickHouse Keeper +## 安装独立的 ClickHouse Keeper {#install-standalone-clickhouse-keeper-1} :::tip 在生产环境中,我们强烈建议在独立节点上运行 ClickHouse Keeper。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md index db56ce4aee4..94e749b7ee7 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/_snippets/_windows_install.md @@ -1,4 +1,4 @@ -# 在 Windows 上通过 WSL 安装 ClickHouse +# 在 Windows 上通过 WSL 安装 ClickHouse {#install-clickhouse-on-windows-with-wsl} @@ -11,7 +11,7 @@ -## 安装 WSL +## 安装 WSL {#install-wsl} 以管理员身份打开 Windows PowerShell,并运行以下命令: @@ -26,7 +26,7 @@ wsl --install ``` -## 使用 curl 脚本安装 ClickHouse +## 使用 curl 脚本安装 ClickHouse {#install-clickhouse-via-script-using-curl} 运行以下命令,通过 curl 脚本安装 ClickHouse: @@ -42,7 +42,7 @@ curl https://clickhouse.com/ | sh ``` -## 启动 clickhouse-local +## 启动 clickhouse-local {#start-clickhouse-local} `clickhouse-local` 可用于在无需任何配置的情况下,借助 ClickHouse 强大的 SQL 语法处理本地和远程文件。表数据会存储在临时位置,这意味着在重启 `clickhouse-local` 后,此前创建的表将不再可用。 @@ -53,7 +53,7 @@ curl https://clickhouse.com/ | sh ``` -## 启动 clickhouse-server +## 启动 clickhouse-server {#start-clickhouse-server} 若要持久化数据,应运行 `clickhouse-server`。可以使用以下命令启动 ClickHouse 服务器: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md index 2421e3bf855..526cdb70b90 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/advanced.md @@ -10,7 +10,7 @@ doc_type: 'guide' -## 从源码编译 +## 从源码编译 {#compile-from-source} 要手动编译 ClickHouse,请按照 [Linux](/development/build.md) 或 [macOS](/development/build-osx.md) 的说明进行操作。 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/getting-started/install/install.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx index d808bfce012..e9148c3f012 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/install/install.mdx @@ -18,33 +18,24 @@ import Docker from './_snippets/_docker.md' import {CardPrimary} from '@clickhouse/click-ui/bundled'; import {galaxyOnClick} from '@site/src/lib/galaxy/galaxy' - -# 安装指南 +# 安装指南 \{#installation-instructions\} -
+
或者,在下方选择平台、发行版和安装方式,以查看适用于开源 ClickHouse 的安装指南: -} - quickinstall={} - debian_prod={} - rpm_prod={} - tar_prod={} - macos_prod={} - docker={} -/> \ No newline at end of file +} quickinstall={} debian_prod={} rpm_prod={} tar_prod={} macos_prod={} docker={} /> \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/playground.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/playground.md index 6134f5bfb2e..5d5a2bf4928 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/playground.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/playground.md @@ -9,7 +9,7 @@ doc_type: '指南' -# ClickHouse Playground +# ClickHouse Playground {#clickhouse-playground} [ClickHouse Playground](https://sql.clickhouse.com) 允许用户无需自行搭建服务器或集群,即可通过即时运行查询来试用和探索 ClickHouse。 Playground 中提供了若干示例数据集。 @@ -40,7 +40,7 @@ Playground 中提供了若干示例数据集。 -## 示例 +## 示例 {#examples} 使用 `curl` 访问 HTTPS 端点的示例: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx index b58df2ad326..86f37009e0c 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/cloud.mdx @@ -20,15 +20,14 @@ import data_sources from '@site/static/images/_snippets/data_sources.png'; import select_data_source from '@site/static/images/_snippets/select_data_source.png'; import client_details from '@site/static/images/_snippets/client_details.png'; import new_rows_from_csv from '@site/static/images/_snippets/new_rows_from_csv.png'; -import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; +import SQLConsoleDetail from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_launch_sql_console.md'; - -# ClickHouse Cloud 快速开始 +# ClickHouse Cloud 快速开始 \{#clickhouse-cloud-quick-start\} > 使用 ClickHouse 的最快、最简便方式,是在 [ClickHouse Cloud](https://console.clickhouse.cloud) 中创建一个新服务。在本快速入门指南中,我们将通过三个简单步骤帮助您完成设置。 - ## 创建 ClickHouse 服务 + ## 创建 ClickHouse 服务 \{#1-create-a-clickhouse-service\} 要在 [ClickHouse Cloud](https://console.clickhouse.cloud) 中创建免费的 ClickHouse 服务,只需按照以下步骤完成注册: @@ -57,7 +56,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 恭喜!您的 ClickHouse Cloud 服务已启动并运行,初始配置已完成。请继续阅读,了解如何开始摄取和查询数据。 - ## 连接到 ClickHouse + ## 连接到 ClickHouse \{#2-connect-to-clickhouse\} 连接到 ClickHouse 有两种方式: @@ -66,7 +65,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### 使用 SQL 控制台连接 + ### 使用 SQL 控制台连接 \{#connect-using-sql-console\} 为便于快速上手,ClickHouse 提供了基于 Web 的 SQL 控制台,完成初始配置后将自动跳转至该控制台。 @@ -86,7 +85,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 完成了 - 您现在可以开始使用新的 ClickHouse 服务了! - ### 连接您的应用 + ### 连接您的应用 \{#connect-with-your-app\} 从导航菜单中点击连接按钮。将弹出一个对话框,显示您的服务凭据,并提供使用界面或语言客户端进行连接的操作说明。 @@ -96,7 +95,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 如果您找不到所需的语言客户端,请查看我们的[集成列表](/integrations)。 - ## 添加数据 + ## 添加数据 \{#3-add-data\} ClickHouse 需要数据才能发挥最佳性能!添加数据有多种方式,大部分可通过导航菜单中的数据源页面访问。 @@ -112,7 +111,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; * 上传文件 - 接受的格式包括 JSON、CSV 和 TSV * 通过文件 URL 导入数据 - ### ClickPipes + ### ClickPipes \{#clickpipes\} [ClickPipes](http://clickhouse.com/docs/integrations/clickpipes) 是一个托管集成平台,只需点击几下即可轻松完成从各种数据源摄取数据。ClickPipes 专为最苛刻的工作负载而设计,其强大且可扩展的架构确保了一致的性能和可靠性。ClickPipes 既可用于长期流式传输需求,也可用于一次性数据加载作业。 @@ -120,7 +119,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md';
- ### 使用 SQL 控制台添加数据 + ### 使用 SQL 控制台添加数据 \{#add-data-using-the-sql-console\} 与大多数数据库管理系统一样,ClickHouse 在逻辑上将表组织到**数据库**中。使用 [`CREATE DATABASE`](../../sql-reference/statements/create/database.md) 命令在 ClickHouse 中创建新数据库: @@ -161,7 +160,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 有多种表引擎可供选择,但对于单节点 ClickHouse 服务器上的简单表,建议使用 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md)。 ::: - #### 主键简介 + #### 主键简介 \{#a-brief-intro-to-primary-keys\} 在继续操作之前,务必了解 ClickHouse 中主键的工作原理(主键的实现方式可能会出乎意料!): @@ -176,7 +175,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; 如需深入了解 ClickHouse 核心概念,请参阅["核心概念"](../../managing-data/core-concepts/index.md)。 - #### 向表中插入数据 + #### 向表中插入数据 \{#insert-data-into-your-table\} 您可以使用熟悉的 [`INSERT INTO TABLE`](../../sql-reference/statements/insert-into.md) 命令向 ClickHouse 插入数据,但需要注意的是,每次向 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree.md) 表执行插入操作都会在存储中创建一个**数据部分**(part)。 @@ -206,7 +205,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; SELECT * FROM helloworld.my_first_table ``` - ### 使用 ClickHouse 客户端添加数据 + ### 使用 ClickHouse 客户端添加数据 \{#add-data-using-the-clickhouse-client\} 您还可以使用名为 [**clickhouse client**](/interfaces/cli) 的命令行工具连接到 ClickHouse Cloud 服务。点击左侧菜单中的 `Connect` 访问相关详细信息。在弹出的对话框中,从下拉菜单选择 `Native`: @@ -286,7 +285,7 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; exit ``` - ### 上传文件 + ### 上传文件 \{#upload-a-file\} 开始使用数据库时的一项常见任务是插入已有文件中的数据。我们提供了一些在线示例数据供您插入,这些数据代表点击流数据,包括用户 ID、访问的 URL 以及事件时间戳。 @@ -321,9 +320,9 @@ import SQLConsoleDetail from '@site/docs/_snippets/_launch_sql_console.md'; ## 接下来? \{#whats-next\} -- 在 [教程](/tutorial.md) 中,您将向一张表插入 200 万行数据,并编写一些分析查询 -- 我们提供了一份[示例数据集](/getting-started/index.md)列表,并附有插入这些数据集的详细说明 -- 查看我们时长 25 分钟的 [ClickHouse 入门](https://clickhouse.com/company/events/getting-started-with-clickhouse/) 视频 -- 如果您的数据来自外部来源,请查看我们的[集成指南合集](/integrations/index.mdx),了解如何连接消息队列、数据库、数据管道等 -- 如果您在使用 UI/BI 可视化工具,请查看[将 UI 连接到 ClickHouse 的用户指南](/integrations/data-visualization) -- [主键](/guides/best-practices/sparse-primary-indexes.md)用户指南涵盖了您需要了解的所有主键信息及其定义方式 \ No newline at end of file +* 在 [教程](/tutorial.md) 中,您将向一张表插入 200 万行数据,并编写一些分析查询 +* 我们提供了一份[示例数据集](/getting-started/index.md)列表,并附有插入这些数据集的详细说明 +* 查看我们时长 25 分钟的 [ClickHouse 入门](https://clickhouse.com/company/events/getting-started-with-clickhouse/) 视频 +* 如果您的数据来自外部来源,请查看我们的[集成指南合集](/integrations/index.mdx),了解如何连接消息队列、数据库、数据管道等 +* 如果您在使用 UI/BI 可视化工具,请查看[将 UI 连接到 ClickHouse 的用户指南](/integrations/data-visualization) +* [主键](/guides/best-practices/sparse-primary-indexes.md)用户指南涵盖了您需要了解的所有主键信息及其定义方式 \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx index 6c64699fd32..2b3969577e8 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/quick-start/oss.mdx @@ -14,13 +14,12 @@ import TabItem from '@theme/TabItem'; import CodeBlock from '@theme/CodeBlock'; import {VerticalStepper} from '@clickhouse/click-ui/bundled'; - -# ClickHouse OSS 快速入门 +# ClickHouse OSS 快速入门 \{#clickhouse-oss-quick-start\} > 在本快速入门教程中,我们将通过 8 个简单步骤帮助你完成 OSS ClickHouse 的设置。你将下载适用于你操作系统的二进制文件,学习如何运行 ClickHouse server,并使用 ClickHouse client 创建一张表,然后向其中插入数据并运行查询来选取这些数据。 - ## 下载 ClickHouse + ## 下载 ClickHouse \{#download-the-binary\} ClickHouse 原生支持 Linux、FreeBSD 和 macOS,并可通过 [WSL](https://learn.microsoft.com/en-us/windows/wsl/about) 在 Windows 上运行。 在本地下载 ClickHouse 最简单的方式是运行以下 `curl` 命令。 该命令将检测您的操作系统是否受支持,然后下载从 master 分支构建的相应 ClickHouse 二进制文件。 @@ -51,7 +50,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; Mac 用户注意:如果您遇到无法验证二进制文件开发者的错误,请参阅["修复 macOS 中的开发者验证错误"](https://clickhouse.com/docs/knowledgebase/fix-developer-verification-error-in-macos)。 ::: - ## 启动服务器 + ## 启动服务器 \{#start-the-server\} 运行以下命令启动 ClickHouse 服务器: @@ -63,7 +62,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; [默认日志级别](https://clickhouse.com/docs/knowledgebase/why_default_logging_verbose) 设置为 `trace` 而非 `warning`。 - ## 启动客户端 + ## 启动客户端 \{#start-the-client\} 使用 `clickhouse-client` 连接到您的 ClickHouse 服务。打开新终端,切换到 `clickhouse` 二进制文件所在的目录,然后运行以下命令: @@ -77,7 +76,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; my-host :) ``` - ## 创建表 + ## 创建表 \{#create-a-table\} 使用 `CREATE TABLE` 定义新表。常规 SQL DDL 命令在 ClickHouse 中均可使用,但需注意一点——ClickHouse 中的表必须指定 `ENGINE` 子句。使用 [`MergeTree`](/engines/table-engines/mergetree-family/mergetree) 引擎可充分发挥 ClickHouse 的性能优势: @@ -93,7 +92,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; PRIMARY KEY (user_id, timestamp) ``` - ## 插入数据 + ## 插入数据 \{#insert-data\} 您可以使用熟悉的 `INSERT INTO TABLE` 命令操作 ClickHouse,但需要理解的是,每次向 `MergeTree` 表插入数据都会在存储中创建我们所称的 **part**(数据部分)。这些 ^^part^^ 随后会由 ClickHouse 在后台进行合并。 @@ -109,7 +108,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; (101, 'Granule 是数据读取的最小单元', now() + 5, 3.14159 ) ``` - ## 查询您的新表 + ## 查询您的新表 \{#query-your-new-table\} 您可以像在任何 SQL 数据库中一样编写 `SELECT` 查询: @@ -132,7 +131,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; 返回 4 行。耗时:0.008 秒。 ``` - ## 插入您自己的数据 + ## 插入您自己的数据 \{#insert-your-own-data\} 下一步是将您自己的数据导入 ClickHouse。我们提供了大量的[表函数](/sql-reference/table-functions/index.md)和[集成](/integrations)用于摄取数据。您可以参考下方选项卡中的示例,或访问我们的[集成](/integrations)页面查看与 ClickHouse 集成的完整技术列表。 @@ -344,7 +343,7 @@ import {VerticalStepper} from '@clickhouse/click-ui/bundled'; - ## 探索 + ## 探索 \{#explore\} * 查看我们的[核心概念](/managing-data/core-concepts)章节,了解一些 ClickHouse 底层工作原理的基础概念。 * 请查看 [进阶教程](tutorial.md),该教程将更深入地探讨 ClickHouse 的核心概念和功能。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/index.md index ea6c16c91e2..46b317a5a16 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/index.md @@ -7,13 +7,12 @@ keywords: ['性能优化', '最佳实践', '优化指南', 'ClickHouse 性能', doc_type: 'reference' --- -import TableOfContents from '@site/docs/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; +import TableOfContents from '@site/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/_snippets/_performance_optimizations_table_of_contents.md'; - -# 性能与优化 +# 性能与优化 {#performance-and-optimizations} 本节提供有关提升 ClickHouse 性能的建议和最佳实践。 建议读者在阅读本节之前先查阅[核心概念](/parts), 其中介绍了改进性能所需掌握的主要概念。 - \ No newline at end of file + \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md index d2de24829ef..bfce716c5ba 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/prewhere.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/prewhere_05.gif' import Image from '@theme/IdealImage'; -# PREWHERE 优化是如何工作的? +# PREWHERE 优化是如何工作的? {#how-does-the-prewhere-optimization-work} [PREWHERE 子句](/sql-reference/statements/select/prewhere) 是 ClickHouse 中的一种查询执行优化机制。它通过避免不必要的数据读取、在从磁盘读取非过滤列之前先过滤掉无关数据,从而减少 I/O 并提升查询速度。 @@ -109,7 +109,7 @@ ClickHouse 首先通过 ① 从 `town` 列读取选定的 granule,并检查哪 -## 如何衡量 PREWHERE 的影响 +## 如何衡量 PREWHERE 的影响 {#how-to-measure-prewhere-impact} 要验证 PREWHERE 是否提升了查询性能,可以对比在启用和禁用 `optimize_move_to_prewhere` 设置时的查询表现。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md index 882f245d645..42199ebc2f0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-optimization.md @@ -11,7 +11,7 @@ import queryOptimizationDiagram1 from '@site/static/images/guides/best-practices import Image from '@theme/IdealImage'; -# 查询优化简明指南 +# 查询优化简明指南 {#a-simple-guide-for-query-optimization} 本节通过常见场景示例说明如何使用不同的性能优化技术,例如 [analyzer](/operations/analyzer)、[query profiling](/operations/optimizing-performance/sampling-query-profiler) 或 [avoid nullable Columns](/optimize/avoid-nullable-columns),从而提升 ClickHouse 查询性能。 @@ -61,7 +61,7 @@ ClickHouse 提供了一套丰富的工具,帮助你了解查询是如何执行 -## 数据集 +## 数据集 {#dataset} 我们将使用一个真实示例来说明我们是如何处理查询性能的。 @@ -112,9 +112,9 @@ ORDER BY tuple() ``` -## 找出慢查询 +## 找出慢查询 {#spot-the-slow-queries} -### 查询日志 +### 查询日志 {#query-logs} 默认情况下,ClickHouse 会在 [查询日志](/operations/system-tables/query_log) 中收集并记录每条已执行查询的信息。这些数据存储在表 `system.query_log` 中。  @@ -431,7 +431,7 @@ _最后,要留意离群值;某条查询偶尔运行缓慢是很常见的情 -## 基础优化 +## 基础优化 {#basic-optimization} 既然我们已经搭好了用于测试的框架,就可以开始进行优化了。 @@ -439,7 +439,7 @@ _最后,要留意离群值;某条查询偶尔运行缓慢是很常见的情 根据你摄取数据的方式,你可能利用了 ClickHouse 的[功能](/interfaces/schema-inference),基于摄取的数据推断表结构。虽然这在入门阶段非常实用,但如果你希望优化查询性能,就需要重新审视数据表结构,使其尽可能贴合你的具体用例。 -### Nullable +### Nullable {#nullable} 如[最佳实践文档](/best-practices/select-data-types#avoid-nullable-columns)中所述,应尽可能避免使用 Nullable 列。经常使用它们很有诱惑力,因为它们可以让数据摄取机制更加灵活,但每次都需要处理一个额外的列,会对性能产生负面影响。 @@ -485,7 +485,7 @@ dropoff_location_id_nulls: 0 我们只有两列存在 null 值:`mta_tax` 和 `payment_type`。其余字段不应该使用 `Nullable` 列类型。 -### 低基数(Low cardinality) +### 低基数(Low cardinality) {#low-cardinality} 对于 String 类型列,一个简单易行的优化是充分利用 LowCardinality 数据类型。正如低基数[文档](/sql-reference/data-types/lowcardinality)中所述,ClickHouse 会对 LowCardinality 列应用字典编码,从而显著提升查询性能。 @@ -515,7 +515,7 @@ uniq(vendor_id): 3 在基数较低的情况下,这四列 `ratecode_id`、`pickup_location_id`、`dropoff_location_id` 和 `vendor_id` 非常适合使用 LowCardinality 类型。 -### 优化数据类型 +### 优化数据类型 {#optimize-data-type} ClickHouse 支持大量数据类型。请务必在满足用例需求的前提下选择尽可能小的数据类型,以优化性能并减少磁盘上的数据存储空间。  @@ -538,7 +538,7 @@ Query id: 4306a8e1-2a9c-4b06-97b4-4d902d2233eb 对于日期,你应选择既符合数据集特性、又最适合支持你计划执行查询的精度。 -### 应用这些优化 +### 应用这些优化 {#apply-the-optimizations} 让我们创建一个新表来使用优化后的 schema,并重新摄取这些数据。 @@ -604,7 +604,7 @@ ORDER BY size DESC 新表相比之前的表小了很多。可以看到,该表的磁盘空间占用减少了约 34%(从 7.38 GiB 降至 4.89 GiB)。 -## 主键的重要性 +## 主键的重要性 {#the-importance-of-primary-keys} ClickHouse 中的主键与大多数传统数据库系统中的工作方式不同。在那些系统中,主键用于保证唯一性和数据完整性。任何插入重复主键值的尝试都会被拒绝,并且通常会创建基于 B-tree 或哈希的索引用于快速查找。  @@ -616,7 +616,7 @@ ClickHouse 中的主键与大多数传统数据库系统中的工作方式不同 ClickHouse 支持的其他选项,例如 Projection(投影)或物化视图,可以让你在相同数据上使用不同的主键集合。本系列博客的第二部分将更详细地讨论这一点。  -### 选择主键 +### 选择主键 {#choose-primary-keys} 选择正确的主键集合是一个复杂的话题,可能需要权衡和试验,才能找到最佳组合。  diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md index 7f8f25d5b12..2c217926c12 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/query-parallelism.md @@ -17,7 +17,7 @@ import visual05 from '@site/static/images/guides/best-practices/query-parallelis import Image from '@theme/IdealImage'; -# ClickHouse 如何并行执行查询 +# ClickHouse 如何并行执行查询 {#how-clickhouse-executes-a-query-in-parallel} ClickHouse [为速度而生](/concepts/why-clickhouse-is-so-fast)。它以高度并行的方式执行查询,利用所有可用的 CPU 核心,将数据分布到各个处理通道,并且经常将硬件推至其性能极限。 @@ -66,7 +66,7 @@ ClickHouse [为速度而生](/concepts/why-clickhouse-is-so-fast)。它以高度 -## 监控查询并行度 +## 监控查询并行度 {#monitoring-query-parallelism} 使用这些工具来验证你的查询是否充分利用了可用的 CPU 资源,并在没有充分利用时进行诊断。 @@ -126,12 +126,12 @@ ClickHouse 的[内嵌 Web UI](/interfaces/http)(在 `/play` 端点可用)可 注意:请从左到右阅读该可视化。每一行代表一条并行处理通道,它以数据块为单位进行流式处理,并应用过滤、聚合以及最终处理阶段等转换。在本例中,你可以看到与 `max_threads = 4` 设置对应的四条并行通道。 -### 在处理通道之间进行负载均衡 +### 在处理通道之间进行负载均衡 {#load-balancing-across-processing-lanes} 请注意,物理计划中的 `Resize` 算子会[重新分区并重新分发](/academic_overview#4-2-multi-core-parallelization)数据块流到各个处理通道,以保持它们的利用率均衡。当不同数据范围中满足查询谓词的行数相差较大时,这种再平衡尤为重要,否则某些通道可能会过载,而其他通道则处于空闲状态。通过重新分配工作量,较快的通道可以有效帮助较慢的通道,从而优化整体查询执行时间。 -## 为什么 max_threads 并不总是被严格遵守 +## 为什么 max_threads 并不总是被严格遵守 {#why-max-threads-isnt-always-respected} 如上所述,`n` 条并行处理通道的数量由 `max_threads` 参数控制,其默认值等于 ClickHouse 在该服务器上可用的 CPU 内核数量: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md index 55eebac9fd9..63a6c24cd75 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes-examples.md @@ -10,7 +10,7 @@ keywords: ['跳过索引', '数据跳过', '性能', '索引', '最佳实践'] -# 数据跳过索引示例 +# 数据跳过索引示例 {#data-skipping-index-examples} 本文汇总了 ClickHouse 中数据跳过索引的示例,展示如何定义每种类型、在什么场景下使用它们,以及如何验证它们是否已生效。所有功能都适用于 [MergeTree-family 表](/engines/table-engines/mergetree-family/mergetree)。 @@ -33,7 +33,7 @@ ClickHouse 支持五种跳过索引类型: 每一节都会通过示例数据展示用法,并演示如何在查询执行中验证索引是否被使用。 -## MinMax 索引 +## MinMax 索引 {#minmax-index} `minmax` 索引最适合在松散排序的数据上执行范围条件,或用于与 `ORDER BY` 相关联的列。 @@ -64,7 +64,7 @@ SELECT count() FROM events WHERE ts >= now() - 3600; 请参阅一个包含 `EXPLAIN` 和剪枝的[示例](/best-practices/use-data-skipping-indices-where-appropriate#example)。 -## Set 索引 +## Set 索引 {#set-index} 当本地(按块)基数较低时使用 `set` 索引;如果每个数据块中包含许多不同的值,则效果不明显。 @@ -81,7 +81,7 @@ SELECT * FROM events WHERE user_id IN (101, 202); 在[基本操作指南](/optimize/skipping-indexes#basic-operation)中展示了创建/物化流程以及应用前后的效果。 -## 通用 Bloom 过滤器(标量) +## 通用 Bloom 过滤器(标量) {#generic-bloom-filter-scalar} `bloom_filter` 索引非常适合用于“在干草堆里找针”式的等值/`IN` 成员匹配查询。它接受一个可选参数,用于指定假阳性(误报)率(默认值为 0.025)。 @@ -96,7 +96,7 @@ SELECT * FROM events WHERE value IN (7, 42, 99); ``` -## 用于子串搜索的 N-gram Bloom 过滤器(ngrambf_v1) +## 用于子串搜索的 N-gram Bloom 过滤器(ngrambf_v1) {#n-gram-bloom-filter-ngrambf-v1-for-substring-search} `ngrambf_v1` 索引将字符串划分为 n-gram。它非常适用于 `LIKE '%...%'` 查询。它支持 String/FixedString/Map(通过 mapKeys/mapValues),并且可以调节大小、哈希次数和种子。有关更多详细信息,请参阅 [N-gram Bloom 过滤器](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter) 的文档。 @@ -133,7 +133,7 @@ SELECT bfEstimateFunctions(4300, bfEstimateBmSize(4300, 0.0001)) AS k; -- 约 13 有关完整的调优指导,请参阅[参数文档](/engines/table-engines/mergetree-family/mergetree#n-gram-bloom-filter)。 -## 用于基于单词搜索的 Token Bloom 过滤器(tokenbf_v1) +## 用于基于单词搜索的 Token Bloom 过滤器(tokenbf_v1) {#token-bloom-filter-tokenbf-v1-for-word-based-search} `tokenbf_v1` 会为由非字母数字字符分隔的 token 建立索引。你应将其与 [`hasToken`](/sql-reference/functions/string-search-functions#hasToken)、`LIKE` 单词模式或 `=` / `IN` 一起使用。它支持 `String` / `FixedString` / `Map` 类型。 @@ -153,7 +153,7 @@ SELECT count() FROM logs WHERE hasToken(lower(msg), 'exception'); 可在[此处](/use-cases/observability/schema-design#bloom-filters-for-text-search)查看可观测性示例,以及关于 token 与 ngram 的使用指导。 -## 在 CREATE TABLE 时添加索引(多个示例) +## 在 CREATE TABLE 时添加索引(多个示例) {#add-indexes-during-create-table-multiple-examples} 跳过索引也支持组合表达式以及 `Map`/`Tuple`/`Nested` 类型。下面的示例对此进行了演示: @@ -175,7 +175,7 @@ ORDER BY u64; ``` -## 在现有数据上物化并验证 +## 在现有数据上物化并验证 {#materializing-on-existing-data-and-verifying} 你可以使用 `MATERIALIZE` 为现有的数据部分添加索引,并通过 `EXPLAIN` 或跟踪日志来检查裁剪效果,如下所示: @@ -211,7 +211,7 @@ SET send_logs_level = 'trace'; -## 临时忽略或强制使用索引 +## 临时忽略或强制使用索引 {#temporarily-ignore-or-force-indexes} 在测试和故障排查期间,可以针对单个查询按名称禁用特定索引。也可以通过相关设置在需要时强制使用索引。参见 [`ignore_data_skipping_indices`](/operations/settings/settings#ignore_data_skipping_indices)。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md index 5cb47d94066..f90c3848937 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/skipping-indexes.md @@ -13,7 +13,7 @@ import bad_skip from '@site/static/images/guides/best-practices/bad_skip.png'; import Image from '@theme/IdealImage'; -# 深入了解 ClickHouse 数据跳过索引 +# 深入了解 ClickHouse 数据跳过索引 {#understanding-clickhouse-data-skipping-indexes} @@ -29,7 +29,7 @@ import Image from '@theme/IdealImage'; -## 基本操作 +## 基本操作 {#basic-operation} 用户只能在 MergeTree 系列的表上使用数据跳过索引(Data Skipping Indexes)。每个数据跳过索引有四个主要参数: @@ -121,11 +121,11 @@ SET send_logs_level='trace'; default.skip_table (933d4b2c-8cea-4bf9-8c93-c56e900eefd1) (SelectExecutor): 索引 `vix` 已丢弃 6102/6104 个颗粒。 ``` -## 跳过索引类型 +## 跳过索引类型 {#skip-index-types} {/* vale off */ } -### minmax +### minmax {#minmax} {/* vale on */ } @@ -135,7 +135,7 @@ SET send_logs_level='trace'; {/* vale off */ } -### set +### set {#set} {/* vale on */ } @@ -143,7 +143,7 @@ SET send_logs_level='trace'; 此索引的成本、性能和有效性取决于数据块内部的基数。如果每个数据块包含大量唯一值,要么针对一个很大的索引集合评估查询条件会非常昂贵,要么由于超过 `max_size` 导致索引为空而无法应用索引。 -### Bloom filter 类型 +### Bloom filter 类型 {#bloom-filter-types} *Bloom filter*(布隆过滤器)是一种数据结构,它以极高的空间效率实现集合成员测试,但代价是存在一定概率的误报。对于跳过索引而言,误报并不是一个重要问题,因为唯一的劣势是会多读取一些不必要的数据块。然而,存在误报的可能性也意味着被索引的表达式通常应当为 true,否则可能会跳过有效数据。 @@ -184,7 +184,7 @@ SET send_logs_level='trace'; -## Skip 索引最佳实践 +## Skip 索引最佳实践 {#skip-best-practices} Skip 索引并不直观,尤其是对于那些习惯于关系型数据库(RDBMS)中的行式二级索引,或文档存储中的倒排索引的用户而言。要真正获益,在应用 ClickHouse 数据跳过索引时,必须跳过足够多的 granule 读取,以抵消计算索引本身的开销。关键在于,如果某个值在一个已建立索引的数据块(block)中哪怕只出现一次,就意味着整个 block 都必须被读入内存并进行评估,而索引的计算成本在这种情况下就成了多余的开销。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md index 68abe1691cc..fd832422cb6 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/best-practices/sparse-primary-indexes.md @@ -36,7 +36,7 @@ import sparsePrimaryIndexes15b from '@site/static/images/guides/best-practices/s import Image from '@theme/IdealImage'; -# ClickHouse 主索引实用入门指南 +# ClickHouse 主索引实用入门指南 {#a-practical-introduction-to-primary-indexes-in-clickhouse} ## 介绍 {#introduction} @@ -73,7 +73,7 @@ import Image from '@theme/IdealImage'; 本文中给出的所有运行时数据均基于在一台配备 Apple M1 Pro 芯片和 16GB 内存的 MacBook Pro 上本地运行 ClickHouse 22.2.1 所得。 -### 全表扫描 +### 全表扫描 {#a-full-table-scan} 为了了解在没有主键的数据集上查询是如何执行的,我们通过执行以下 SQL DDL 语句来创建一张使用 MergeTree 表引擎的表: @@ -150,7 +150,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 返回了 10 行。耗时:0.022 秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 处理了 887 万行, 70.45 MB (398.53 million rows/s., 3.17 GB/s.) ``` @@ -172,7 +172,7 @@ ClickHouse 客户端的结果输出表明,ClickHouse 执行了一次全表扫 下面将详细说明 ClickHouse 如何构建和使用其稀疏主索引。在本文后续部分,我们还将讨论在构建索引(主键列)时,关于选择、移除和排序相关表列的一些最佳实践。 -### 带主键的表 +### 带主键的表 {#a-table-with-a-primary-key} 创建一个具有复合主键的表,主键列为 UserID 和 URL: @@ -494,7 +494,7 @@ SELECT UserID, URL FROM file('primary-hits_UserID_URL.idx', 'RowBinary', 'UserID 我们将在后面更详细地讨论这对查询执行性能的影响。 -### 主索引用于选择索引颗粒 +### 主索引用于选择索引颗粒 {#the-primary-index-is-used-for-selecting-granules} 现在我们可以在主索引的支持下执行查询。 @@ -526,7 +526,7 @@ LIMIT 10; └────────────────────────────────┴───────┘ 10 rows in set. Elapsed: 0.005 sec. -# highlight-next-line +# highlight-next-line {#highlight-next-line} 已处理 8.19 千行, 740.18 KB (153 万行/秒,138.59 MB/秒) ``` @@ -537,13 +537,13 @@ LIMIT 10; ```response ...Executor): 键条件:(列 0 在 [749927693, 749927693] 范围内) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): 对数据分片 all_1_9_2 的索引范围执行二分查找(1083 个标记) ...Executor): 找到左边界标记:176 ...Executor): 找到右边界标记:177 ...Executor): 经过 19 步找到连续范围 ...Executor): 通过分区键选择了 1/1 个分片,通过主键选择了 1 个分片, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 通过主键选择了 1/1083 个标记,需从 1 个范围读取 1 个标记 ...Reading ...从 1441792 开始读取约 8192 行数据 ``` @@ -592,7 +592,7 @@ LIMIT 10; │ UserID │ │ Condition: (UserID in [749927693, 749927693]) │ │ Parts: 1/1 │ -# highlight-next-line +# highlight-next-line {#highlight-next-line} │ Granules: 1/1083 │ └───────────────────────────────────────────────────────────────────────────────────────┘ @@ -711,7 +711,7 @@ ClickHouse 现在使用索引中选中的标记号(176),在 UserID.mrk 标 -### 次级键列可能(不)高效 +### 次级键列可能(不)高效 {#secondary-key-columns-can-not-be-inefficient} 当查询在一个复合键中、且作为首个键列的列上进行过滤时,[ClickHouse 会在该键列的索引标记上运行二分查找算法](#the-primary-index-is-used-for-selecting-granules)。 @@ -757,7 +757,7 @@ LIMIT 10; └────────────┴───────┘ 10 行结果。耗时:0.086 秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 已处理 881 万行, 799.69 MB(1.0211 亿行/秒,9.27 GB/秒) ``` @@ -769,11 +769,11 @@ LIMIT 10; ```response ...Executor): Key condition: (column 1 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Used generic exclusion search over index for part all_1_9_2 with 1537 steps ...Executor): Selected 1/1 parts by partition key, 1 parts by primary key, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 1076/1083 marks by primary key, 1076 marks to read from 5 ranges ...Executor): Reading approx. 8814592 rows with 10 streams ``` @@ -842,7 +842,7 @@ LIMIT 10; 在我们的示例数据集中,两个键列(UserID、URL)都具有类似的高基数。如前所述,当位于 URL 列之前的键列具有较高或相近的基数时,通用排除搜索算法的效果并不理想。 -### 关于 data skipping index 的说明 +### 关于 data skipping index 的说明 {#note-about-data-skipping-index} 由于 UserID 和 URL 都具有类似的高基数,我们在 URL 上的[查询过滤](/guides/best-practices/sparse-primary-indexes#secondary-key-columns-can-not-be-inefficient),即使在来自我们[复合主键表 (UserID, URL)](#a-table-with-a-primary-key)的 URL 列上创建一个[辅助 data skipping index](./skipping-indexes.md),收益也不会太大。 @@ -906,7 +906,7 @@ ClickHouse 现在创建了一个额外的索引,该索引针对每组 4 个连 -### 选项 1:辅助表 +### 选项 1:辅助表 {#option-1-secondary-tables} @@ -986,7 +986,7 @@ LIMIT 10; └────────────┴───────┘ 10 行数据。耗时: 0.017 秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 处理了 319.49 千行数据, 11.38 MB (18.41 百万行/秒, 655.75 MB/秒) ``` @@ -1002,13 +1002,13 @@ ClickHouse 服务器日志文件中的相应 trace 日志也印证了这一点 ```response ...Executor): 键条件:(列 0 在 ['http://public_search', 'http://public_search'] 中) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): 对数据分片 all_1_9_2 的索引范围执行二分查找(1083 个标记) ...Executor): 找到(左)边界标记:644 ...Executor): 找到(右)边界标记:683 ...Executor): 经过 19 步找到连续范围 ...Executor): 通过分区键选择了 1/1 个分片,通过主键选择了 1 个分片, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 通过主键选择了 39/1083 个标记,需从 1 个范围读取 39 个标记 ...Executor): 使用 2 个流读取约 319488 行数据 ``` @@ -1143,7 +1143,7 @@ LIMIT 10; └────────────┴───────┘ 返回 10 行。耗时:0.026 秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 已处理 33.587 万行, 13.54 MB(1291 万行/秒,520.38 MB/秒)。 ``` @@ -1156,7 +1156,7 @@ ClickHouse 服务器日志文件中的对应跟踪日志确认,ClickHouse 正 ```response ...Executor): Key condition: (column 0 in ['http://public_search', 'http://public_search']) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): Running binary search on index range ... ... ...Executor): Selected 4/4 parts by partition key, 4 parts by primary key, @@ -1233,7 +1233,7 @@ LIMIT 10; └────────────┴───────┘ 返回了 10 行。耗时:0.029 秒。 -# highlight-next-line +# highlight-next-line {#highlight-next-line} 处理了 319.49 千行,1.38 MB(11.05 百万行/秒,393.58 MB/秒) ``` @@ -1245,14 +1245,14 @@ ClickHouse 服务器日志文件中的相应 trace 日志证实 ClickHouse 正 ```response ...Executor): 键条件:(列 0 在 ['http://public_search', 'http://public_search'] 中) -# highlight-next-line +# highlight-next-line {#highlight-next-line} ...Executor): 对数据分片 prj_url_userid 的索引范围执行二分查找(1083 个标记) ...Executor): ... # highlight-next-line ...Executor): 选择完整的普通投影 prj_url_userid ...Executor): 投影所需列:URL、UserID ...Executor): 按分区键选中 1/1 个分片,按主键选中 1 个分片, -# highlight-next-line +# highlight-next-line {#highlight-next-line} 按主键选中 39/1083 个标记,将从 1 个范围读取 39 个标记 ...Executor): 使用 2 个数据流读取约 319488 行 ``` @@ -1444,7 +1444,7 @@ WHERE UserID = 112304 其原因在于,当通过某个次级键列来选择 [granules](#the-primary-index-is-used-for-selecting-granules),且其前一个键列具有更低的基数时,[generic exclusion search algorithm](https://github.com/ClickHouse/ClickHouse/blob/22.3/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp#L1444) 的效果最佳。我们已经在本指南的[前一节](#generic-exclusion-search-algorithm)中对这一点进行了详细说明。 -### 数据文件的最佳压缩率 +### 数据文件的最佳压缩率 {#efficient-filtering-on-secondary-key-columns} 此查询比较了我们在上面创建的两个表中 `UserID` 列的压缩率: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md index 9f2f1556c63..a8cc676f9eb 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/alternative-query-languages.md @@ -19,8 +19,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; 具体使用哪种查询语言由 `dialect` 设置项控制。 - -## 标准 SQL +## 标准 SQL {#standard-sql} 标准 SQL 是 ClickHouse 的默认查询语言。 @@ -28,8 +27,7 @@ import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; SET dialect = 'clickhouse' ``` - -## 管道式关系查询语言(PRQL) +## 管道式关系查询语言(PRQL) {#pipelined-relational-query-language-prql} @@ -52,8 +50,7 @@ aggregate { 在底层,ClickHouse 会先将 PRQL 转译为 SQL,然后再执行 PRQL 查询。 - -## Kusto 查询语言 (KQL) +## Kusto 查询语言 (KQL) {#kusto-query-language-kql} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md index 64ee7988d64..f26b1fb63bd 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/guides/developer/cascading-materialized-views.md @@ -6,13 +6,11 @@ keywords: ['物化视图', '聚合'] doc_type: 'guide' --- - - -# 级联物化视图 +# 级联物化视图 {#cascading-materialized-views} 本示例演示如何创建一个物化视图,然后在其基础上再级联创建第二个物化视图。在本页中,你将看到具体操作步骤、多种可能的使用方式以及相应的限制。针对不同用例,可以通过创建一个以另一个物化视图作为数据源的物化视图来实现。 - + + + + allowfullscreen +/> -
+
ClickHouse 提供了多种处理 JSON 的方法,每种方法都有各自的优缺点和适用场景。本指南将介绍如何加载 JSON,并以最优方式设计 JSON schema。本文包括以下部分: -- [加载 JSON](/integrations/data-formats/json/loading) - 在 ClickHouse 中使用简单 schema 加载和查询结构化与半结构化 JSON。 -- [JSON schema 推断](/integrations/data-formats/json/inference) - 使用 JSON schema 推断来查询 JSON 并创建表的 schema。 -- [设计 JSON schema](/integrations/data-formats/json/schema) - 设计和优化 JSON schema 的步骤。 -- [导出 JSON](/integrations/data-formats/json/exporting) - 如何导出 JSON。 -- [处理其他 JSON 格式](/integrations/data-formats/json/other-formats) - 关于处理非换行分隔(NDJSON)的其他 JSON 格式的一些建议。 -- [建模 JSON 的其他方法](/integrations/data-formats/json/other-approaches) - 旧版 JSON 建模方法。**不推荐使用。** \ No newline at end of file +* [加载 JSON](/integrations/data-formats/json/loading) - 在 ClickHouse 中使用简单 schema 加载和查询结构化与半结构化 JSON。 +* [JSON schema 推断](/integrations/data-formats/json/inference) - 使用 JSON schema 推断来查询 JSON 并创建表的 schema。 +* [设计 JSON schema](/integrations/data-formats/json/schema) - 设计和优化 JSON schema 的步骤。 +* [导出 JSON](/integrations/data-formats/json/exporting) - 如何导出 JSON。 +* [处理其他 JSON 格式](/integrations/data-formats/json/other-formats) - 关于处理非换行分隔(NDJSON)的其他 JSON 格式的一些建议。 +* [建模 JSON 的其他方法](/integrations/data-formats/json/other-approaches) - 旧版 JSON 建模方法。**不推荐使用。** \ No newline at end of file diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md index ca59fc8ce47..e74b561b2e4 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/loading.md @@ -17,7 +17,7 @@ doc_type: 'guide' -## 加载结构化 JSON +## 加载结构化 JSON {#loading-structured-json} 在本节中,我们假定 JSON 数据为 [`NDJSON`](https://github.com/ndjson/ndjson-spec)(以换行分隔的 JSON)格式,在 ClickHouse 中称为 [`JSONEachRow`](/interfaces/formats/JSONEachRow),且结构规范,即列名和类型是固定的。由于 `NDJSON` 简洁且空间利用率高,是加载 JSON 数据的首选格式,但 ClickHouse 也支持其他格式用于[输入和输出](/interfaces/formats/JSON)。 @@ -124,7 +124,7 @@ FORMAT JSONEachRow 这些示例假定使用 `JSONEachRow` 格式。系统同样支持其他常见的 JSON 格式,加载这些格式的示例请参见[此处](/integrations/data-formats/json/other-formats)。 -## 加载半结构化 JSON +## 加载半结构化 JSON {#loading-semi-structured-json} 前面的示例加载的是结构固定、键名和类型都已知的 JSON。现实中往往并非如此——可以新增键,或者键的类型会发生变化。这在可观测性数据等场景中非常常见。 @@ -200,7 +200,7 @@ LIMIT 2 请注意此处在加载数据时的性能差异。`JSON` 列在插入时需要进行类型推断,并且如果某些列中存在多种类型的值,还需要额外的存储空间。尽管可以通过配置 `JSON` 类型(参见 [Designing JSON schema](/integrations/data-formats/json/schema))来获得与显式声明列相当的性能,但它在开箱即用时被刻意设计为更加灵活。不过,这种灵活性也会带来一定的代价。 -### 何时使用 JSON 类型 +### 何时使用 JSON 类型 {#when-to-use-the-json-type} 在以下情况下使用 `JSON` 类型: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md index 95ff9ffb030..a87cad357fb 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/other.md @@ -6,9 +6,7 @@ keywords: ['json', 'formats'] doc_type: 'reference' --- - - -# 对 JSON 建模的其他方法 +# 对 JSON 建模的其他方法 {#other-approaches-to-modeling-json} **以下是在 ClickHouse 中对 JSON 建模的替代方法。这些方法为了文档完整性而被记录下来,主要适用于 JSON 类型尚未出现之前的阶段,因此在大多数用例中通常不推荐使用或不再适用。** @@ -16,9 +14,7 @@ doc_type: 'reference' 在同一个 schema 中,可以对不同对象采用不同的技术。例如,一些对象最适合使用 `String` 类型,另一些则适合使用 `Map` 类型。请注意,一旦使用了 `String` 类型,就不再需要做进一步的 schema 决策。相反,我们也可以在 `Map` 的某个 key 下嵌套子对象——包括用 `String` 表示的 JSON——如下所示: ::: - - -## 使用 String 类型 +## 使用 String 类型 {#using-string} 如果对象高度动态、没有可预测的结构并且包含任意嵌套对象,建议使用 `String` 类型。可以在查询时使用 JSON 函数提取值,如下所示。 @@ -95,7 +91,6 @@ FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/arxiv/arxiv.j 0 rows in set. Elapsed: 25.186 sec. Processed 2.52 million rows, 1.38 GB (99.89 thousand rows/s., 54.79 MB/s.) ``` - 假设我们希望按年份统计论文发表数量。对比如下两条查询语句:一条仅使用字符串,另一条使用该模式的[结构化版本](/integrations/data-formats/json/inference#creating-tables): ```sql @@ -156,7 +151,7 @@ LIMIT 10 这种方法的灵活性带来了显著的性能和语法开销,只应在模式中对象高度动态的情况下使用。 -### 简单 JSON 函数 +### 简单 JSON 函数 {#simple-json-functions} 上面的示例使用了 JSON* 函数族。这些函数使用基于 [simdjson](https://github.com/simdjson/simdjson) 的完整 JSON 解析器,解析严格,并且会区分位于不同嵌套层级的同名字段。这些函数能够处理语法正确但格式不佳的 JSON,例如键之间存在双空格。 @@ -174,7 +169,6 @@ LIMIT 10 而下面的示例将会被正确解析: - ````json {"@timestamp":893964617,"clientip":"40.135.0.0","request":{"method":"GET", "path":"/images/hm_bg.jpg","version":"HTTP/1.0"},"status":200,"size":24736} @@ -209,8 +203,7 @@ LIMIT 10 上述查询使用 `simpleJSONExtractString` 来提取 `created` 键,利用了我们在发布日期上只需要第一个值这一点。在这种情况下,为了获得性能提升,可以接受 `simpleJSON*` 函数带来的局限性。 - -## 使用 Map 类型 +## 使用 Map 类型 {#using-map} 如果对象用于存储任意键,并且这些键大多为同一类型,可以考虑使用 `Map` 类型。理想情况下,唯一键的数量不应超过数百个。对于包含子对象的对象,在这些子对象的类型足够统一的前提下,也可以考虑使用 `Map` 类型。一般来说,我们推荐使用 `Map` 类型来存储标签和标记(labels / tags),例如日志数据中的 Kubernetes pod(容器组)标签。 @@ -224,7 +217,7 @@ LIMIT 10 在将对象建模为 `Map` 时,使用 `String` 键来存储 JSON 键名。因此 map 始终是 `Map(String, T)`,其中 `T` 取决于数据。 ::: -#### 原始类型值 +#### 原始类型值 {#primitive-values} `Map` 最简单的用法是对象将同一种原始类型作为值。在大多数情况下,这意味着对值 `T` 使用 `String` 类型。 @@ -281,13 +274,12 @@ SELECT company.labels['type'] AS type FROM people 完整的 `Map` 函数集可用于对其进行查询,相关说明见[此处](/sql-reference/functions/tuple-map-functions.md)。如果你的数据类型不一致,可以使用相应函数执行[必要的类型强制转换](/sql-reference/functions/type-conversion-functions)。 -#### 对象值 +#### 对象值 {#object-values} 对于具有子对象的对象,只要其子对象的类型保持一致,也可以考虑使用 `Map` 类型。 假设我们的 `persons` 对象中的 `tags` 键需要一个结构一致的子对象,其中每个 `tag` 的子对象都包含 `name` 和 `time` 列。此类 JSON 文档的简化示例如下所示: - ```json { "id": 1, @@ -360,8 +352,7 @@ FORMAT JSONEachRow } ``` - -## 使用 Nested 类型 +## 使用 Nested 类型 {#using-nested} [Nested 类型](/sql-reference/data-types/nested-data-structures/nested) 可用于表示很少发生变化的静态对象,可作为 `Tuple` 和 `Array(Tuple)` 的一种替代方案。我们通常建议避免在处理 JSON 时使用此类型,因为它的行为往往令人困惑。`Nested` 的主要优势在于其子列可以用于排序键。 @@ -396,11 +387,11 @@ CREATE table http ) ENGINE = MergeTree() ORDER BY (status, timestamp); ``` -### flatten_nested +### flatten_nested {#flatten_nested} `flatten_nested` 设置用于控制 `Nested` 类型的行为。 -#### flatten_nested=1 +#### flatten_nested=1 {#flatten_nested1} 当值为 `1`(默认)时,不支持任意深度的嵌套。在该设置下,最简单的理解方式是:将嵌套数据结构视为多个长度相同的 [Array](/sql-reference/data-types/array) 列。字段 `method`、`path` 和 `version` 实际上分别是独立的 `Array(Type)` 列,但有一个关键约束:**`method`、`path` 和 `version` 字段的长度必须相同。** 如果使用 `SHOW CREATE TABLE`,就可以看到这一点: @@ -471,10 +462,9 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth 结果集包含 1 行。执行耗时:0.002 秒。 ``` - 请注意,对子列使用 `Array` 意味着可以充分利用完整的 [Array 函数](/sql-reference/functions/array-functions) 功能集,包括 [`ARRAY JOIN`](/sql-reference/statements/select/array-join) 子句——在列中包含多个值时非常有用。 -#### flatten_nested=0 +#### flatten_nested=0 {#flatten_nested0} 这允许任意级别的嵌套,并意味着嵌套列会保持为一个由 `Tuple` 组成的单个数组——实质上它们与 `Array(Tuple)` 相同。 @@ -546,7 +536,7 @@ SELECT clientip, status, size, `request.method` FROM http WHERE has(request.meth 结果集包含 1 行。执行耗时:0.002 秒。 ``` -### 示例 +### 示例 {#example} 上述数据的更大规模示例可在 S3 的公共存储桶中获取,路径为:`s3://datasets-documentation/http/`。 @@ -584,7 +574,6 @@ size FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/http/doc 要查询这些数据,我们需要以数组形式访问请求字段。下面,我们将在固定时间段内汇总错误和 HTTP 方法。 - ```sql SELECT status, request.method[1] AS method, count() AS c FROM http @@ -604,7 +593,7 @@ ORDER BY c DESC LIMIT 5; 5 rows in set. Elapsed: 0.007 sec. ``` -### 使用成对数组 +### 使用成对数组 {#using-pairwise-arrays} 成对数组在将 JSON 表示为 `String` 的灵活性与更结构化方案的性能之间提供了一种折中。该模式比较灵活,因为可以在根级别添加任意新的字段。不过,这也需要明显更复杂的查询语法,并且与嵌套结构不兼容。 @@ -668,7 +657,6 @@ GROUP BY method, status ORDER BY c DESC LIMIT 5; └────────┴────────┴───────┘ ``` - 5 行结果。耗时:0.383 秒。已处理 8.22 百万行,1.97 GB(21.45 百万行/秒,5.15 GB/秒)。 峰值内存占用:51.35 MiB。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md index 1e388a17bc4..97a7609eb0e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/json/schema.md @@ -13,11 +13,11 @@ import json_offsets from '@site/static/images/integrations/data-ingestion/data-f import shared_json_column from '@site/static/images/integrations/data-ingestion/data-formats/json_shared_column.png'; -# 设计你的 schema +# 设计你的 schema {#designing-your-schema} 虽然可以使用 [schema 推断](/integrations/data-formats/json/inference) 为 JSON 数据建立初始 schema,并直接查询存储在 S3 等位置的 JSON 数据文件,但用户仍应以为其数据建立经过优化的版本化 schema 为目标。下面我们将讨论对 JSON 结构建模的推荐方法。 -## 静态 JSON 与动态 JSON +## 静态 JSON 与动态 JSON {#static-vs-dynamic-json} 为 JSON 定义模式的首要任务是确定每个键的合适值类型。我们建议用户在 JSON 层级结构中的每一个键上递归应用以下规则,以确定每个键的合适类型。 @@ -92,7 +92,7 @@ import shared_json_column from '@site/static/images/integrations/data-ingestion/ 包含数百或数千个静态键的结构也可以视为动态结构,因为在实际场景中很少会为这些键静态声明所有列。不过,在可能的情况下,应[跳过不需要的路径](#using-type-hints-and-skipping-paths),以同时节省存储和推断开销。 ::: -## 处理静态结构 +## 处理静态结构 {#handling-static-structures} 我们建议使用具名元组(即 `Tuple`)来处理静态结构。对象数组可以使用元组数组(即 `Array(Tuple)`)来存储。在元组内部,列及其对应的类型也应按照相同的规则进行定义。这样就可以通过嵌套的 Tuple 来表示嵌套对象,如下所示。 @@ -203,7 +203,7 @@ ORDER BY company.name ``` -### 处理默认值 +### 处理默认值 {#handling-default-values} 即使 JSON 对象是结构化的,它们通常也比较稀疏,只提供部分已知键。好在,`Tuple` 类型并不要求 JSON 载荷中必须包含所有列;如果某些列未提供,将使用默认值。 @@ -282,7 +282,7 @@ FORMAT PrettyJSONEachRow ::: -### 处理新列 +### 处理新列 {#handling-new-columns} 当 JSON 键是固定的时,使用结构化方法是最简单的。但即使可以事先规划模式变更(即预先知道会新增哪些键,并且可以相应修改模式),这种方法仍然适用。 @@ -360,7 +360,7 @@ SELECT id, nickname FROM people ``` -## 处理半结构化/动态结构 +## 处理半结构化/动态结构 {#handling-semi-structured-dynamic-structures} 如果 JSON 数据是半结构化的,其中的键可以动态增加和/或具有多种类型,则推荐使用 [`JSON`](/sql-reference/data-types/newjson) 类型。 @@ -491,7 +491,7 @@ SELECT id, nickname FROM people - **避免列爆炸风险** - 尽管 JSON 类型可以扩展到潜在的数千个列(其中子列作为独立列存储),但这可能导致列文件数量爆炸,产生过多的列文件,从而影响性能。为缓解这一问题,JSON 所使用的底层 [Dynamic type](/sql-reference/data-types/dynamic) 提供了 [`max_dynamic_paths`](/sql-reference/data-types/newjson#reading-json-paths-as-sub-columns) 参数,用于限制以独立列文件形式存储的唯一路径数量。一旦达到阈值,额外的路径将存储在一个共享的列文件中,并使用紧凑的编码格式,从而在支持灵活数据摄取的同时保持性能和存储效率。但需要注意的是,访问这个共享列文件的性能会略低一些。另请注意,JSON 列可以结合使用[类型提示](#using-type-hints-and-skipping-paths)。带有“提示”的列在性能上将与独立列相当。 - **更简单的路径和类型自省** - 虽然 JSON 类型支持用于确定已推断类型和路径的[自省函数](/sql-reference/data-types/newjson#introspection-functions),但静态结构在探索时(例如使用 `DESCRIBE`)可能更为简单。 -### 单一 JSON 列 +### 单一 JSON 列 {#single-json-column} 此方法适用于原型开发和数据工程任务。对于生产环境,建议仅在确有需要的动态子结构中使用 `JSON`。 @@ -667,7 +667,7 @@ FROM people ``` -### 专用 JSON 列 +### 专用 JSON 列 {#targeted-json-column} 尽管在原型设计和数据工程场景中很有用,但在生产环境中我们建议在可能的情况下使用显式的 schema(模式)定义。 @@ -767,7 +767,7 @@ FORMAT PrettyJsonEachRow ``` -### 使用类型提示和跳过路径 +### 使用类型提示和跳过路径 {#using-type-hints-and-skipping-paths} 类型提示允许我们为某个路径及其子列显式指定类型,从而避免不必要的类型推断。来看下面这个示例,我们为 JSON 列 `company.labels` 中的 JSON 键 `dissolved`、`employees` 和 `founded` 指定了类型。 @@ -934,7 +934,7 @@ FORMAT PrettyJSONEachRow 因此,对于大体结构一致、但仍希望保留 JSON 灵活性的数据集,类型提示提供了一种便利方式,从而在无需重构 schema 或摄取流水线的前提下,保持良好的性能表现。 -### 配置动态路径 +### 配置动态路径 {#configuring-dynamic-paths} ClickHouse 将每个 JSON 路径作为一个子列存储在真正的列式存储布局中,从而能够享受到与传统列相同的性能优势——例如压缩、SIMD 加速处理以及最小化磁盘 I/O。JSON 数据中每个唯一的路径与类型组合都可以在磁盘上对应到自己的列文件。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md index f0a71427883..002182988ca 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/parquet.md @@ -10,7 +10,7 @@ keywords: ['parquet', '列式格式', '数据格式', '压缩', 'Apache Parquet' -# 在 ClickHouse 中使用 Parquet +# 在 ClickHouse 中使用 Parquet {#working-with-parquet-in-clickhouse} Parquet 是一种高效的文件格式,用于以列式方式存储数据。 ClickHouse 支持读取和写入 Parquet 文件。 @@ -24,7 +24,7 @@ ClickHouse 支持读取和写入 Parquet 文件。 -## 从 Parquet 导入 +## 从 Parquet 导入 {#importing-from-parquet} 在加载数据之前,我们可以使用 [file()](/sql-reference/functions/files.md/#file) 函数来查看[示例 Parquet 文件](assets/data.parquet)的结构: @@ -64,7 +64,7 @@ LIMIT 3; ::: -## 导入到现有表 +## 导入到现有表 {#importing-to-an-existing-table} 我们先创建一个用于导入 Parquet 数据的表: @@ -103,7 +103,7 @@ LIMIT 5; 请注意 ClickHouse 如何自动将 Parquet 字符串(`date` 列中的值)转换为 `Date` 类型。这是因为 ClickHouse 会根据目标表中的列类型自动进行类型转换。 -## 将本地文件插入到远程服务器 +## 将本地文件插入到远程服务器 {#inserting-a-local-file-to-remote-server} 如果您想将本地 Parquet 文件插入到远程 ClickHouse 服务器,可以像下面这样通过管道将文件内容传递给 `clickhouse-client`: @@ -112,7 +112,7 @@ clickhouse client -q "INSERT INTO sometable FORMAT Parquet" < data.parquet ``` -## 基于 Parquet 文件创建新表 +## 基于 Parquet 文件创建新表 {#creating-new-tables-from-parquet-files} 由于 ClickHouse 能读取 Parquet 文件的 schema,我们可以动态创建表: @@ -141,7 +141,7 @@ DESCRIBE TABLE imported_from_parquet; 默认情况下,ClickHouse 对列名、类型和值要求非常严格。但在某些情况下,我们可以在导入时跳过不存在的列或不支持的值。可以通过 [Parquet 设置](/interfaces/formats/Parquet#format-settings) 来控制这一行为。 -## 导出为 Parquet 格式 +## 导出为 Parquet 格式 {#exporting-to-parquet-format} :::tip 在 ClickHouse Cloud 中使用 `INTO OUTFILE` 时,需要在将要写入该文件的那台机器上,通过 `clickhouse client` 来运行这些命令。 @@ -159,7 +159,7 @@ FORMAT Parquet 这将在当前工作目录中创建 `export.parquet` 文件。 -## ClickHouse 与 Parquet 数据类型 +## ClickHouse 与 Parquet 数据类型 {#clickhouse-and-parquet-data-types} ClickHouse 与 Parquet 的数据类型在大多数情况下是相同的,但仍然[存在一些差异](/interfaces/formats/Parquet#data-types-matching-parquet)。例如,ClickHouse 会将 `DateTime` 类型导出为 Parquet 的 `int64`。如果我们随后再将该数据导入回 ClickHouse,看到的将是一串数字([time.parquet 文件](assets/time.parquet)): diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md index b4030b84c1c..c841be3c06a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/sql.md @@ -9,13 +9,13 @@ keywords: ['SQL 格式', '数据导出', '数据导入', '备份', 'SQL 转储'] -# 在 ClickHouse 中插入和导出 SQL 数据 +# 在 ClickHouse 中插入和导出 SQL 数据 {#inserting-and-dumping-sql-data-in-clickhouse} ClickHouse 可以通过多种方式轻松集成到 OLTP 数据库基础架构中。其中一种方式是使用 SQL 转储文件在其他数据库与 ClickHouse 之间传输数据。 -## 创建 SQL 转储 +## 创建 SQL 转储 {#creating-sql-dumps} 可以使用 [SQLInsert](/interfaces/formats/SQLInsert) 以 SQL 格式导出数据。ClickHouse 会以 `INSERT INTO VALUES(...` 的形式输出数据,并使用 [`output_format_sql_insert_table_name`](/operations/settings/settings-formats.md/#output_format_sql_insert_table_name) 设置项作为表名: @@ -46,7 +46,7 @@ mysql some_db < dump.sql SET output_format_sql_insert_max_batch_size = 1000; ``` -### 导出一组值 +### 导出一组值 {#exporting-a-set-of-values} ClickHouse 提供了一种 [Values](/interfaces/formats/Values) 格式,类似于 SQL INSERT,但会省略 `INSERT INTO table VALUES` 部分,仅返回一组值: @@ -59,7 +59,7 @@ SELECT * FROM some_data LIMIT 3 FORMAT Values ``` -## 从 SQL 转储中插入数据 +## 从 SQL 转储中插入数据 {#inserting-data-from-sql-dumps} 要读取 SQL 转储文件,使用 [MySQLDump](/interfaces/formats/MySQLDump): diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md index 6bb64f7a4e3..7be91425d62 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-formats/templates-regex.md @@ -10,13 +10,13 @@ keywords: ['数据格式', '模板', '正则表达式', '自定义格式', '解 -# 在 ClickHouse 中使用 Templates 和 Regex 导入与导出自定义文本数据 +# 在 ClickHouse 中使用 Templates 和 Regex 导入与导出自定义文本数据 {#importing-and-exporting-custom-text-data-using-templates-and-regex-in-clickhouse} 我们经常需要处理自定义文本格式的数据,这些数据可能是非标准格式、无效的 JSON,或损坏的 CSV。在这些情况下,使用 CSV 或 JSON 等标准解析器并不总是可行。好在 ClickHouse 提供了功能强大的 Template 和 Regex 格式,可以很好地应对这些场景。 -## 基于模板导入 +## 基于模板导入 {#importing-based-on-a-template} 假设我们要从以下[日志文件](assets/error.log)中导入数据: @@ -88,7 +88,7 @@ GROUP BY request └──────────────────────────────────────────────────┴─────────┘ ``` -### 跳过空白字符 +### 跳过空白字符 {#skipping-whitespaces} 建议使用 [TemplateIgnoreSpaces](/interfaces/formats/TemplateIgnoreSpaces),它可以忽略模板中分隔符之间的空白字符: @@ -98,7 +98,7 @@ TemplateIgnoreSpaces --> "p1:${p1:CSV}, p2:${p2:CSV}" ``` -## 使用模板导出数据 +## 使用模板导出数据 {#exporting-data-using-templates} 我们也可以使用模板将数据导出为任何文本格式。在这种情况下,我们需要创建两个文件: @@ -142,7 +142,7 @@ FORMAT Template SETTINGS format_template_resultset = 'output.results', --- 已读取 1000 行,用时 0.001380604 秒 --- ``` -### 导出为 HTML 文件 +### 导出为 HTML 文件 {#exporting-to-html-files} 基于模板的结果也可以使用 [`INTO OUTFILE`](/sql-reference/statements/select/into-outfile.md) 子句导出到文件。我们来基于给定的 [结果集](assets/html.results) 和 [行](assets/html.row) 格式生成 HTML 文件: @@ -157,7 +157,7 @@ SETTINGS format_template_resultset = 'html.results', format_template_row = 'html.row' ``` -### 导出为 XML +### 导出为 XML {#exporting-to-xml} 模板格式可用于生成几乎所有可以想象的文本格式文件,包括 XML。只需准备相应的模板并执行导出即可。 @@ -203,7 +203,7 @@ FORMAT XML ``` -## 基于正则表达式导入数据 +## 基于正则表达式导入数据 {#importing-data-based-on-regular-expressions} [Regexp](/interfaces/formats/Regexp) 格式适用于需要以更复杂方式解析输入数据的场景。我们再次解析 [error.log](assets/error.log) 示例文件,不过这次要提取文件名和协议,并将它们保存到单独的列中。首先,为此准备一张新表: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md index 7f4be496488..6d9f3a41102 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-ingestion-index.md @@ -6,7 +6,7 @@ description: '数据摄取部分的概览页' doc_type: 'landing-page' --- -# 数据摄取 +# 数据摄取 {#data-ingestion} ClickHouse 集成了多种用于数据集成和转换的解决方案。 如需更多信息,请参阅以下页面: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md index 584f01f48e8..2e87aaa4323 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/data-sources-index.md @@ -6,7 +6,7 @@ title: '数据源' doc_type: 'landing-page' --- -# 数据源 +# 数据源 {#data-sources} ClickHouse 允许你轻松地从多种数据源将数据摄取到数据库中。 有关更多信息,请参阅下列页面: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md index 72a9df5f46f..f3f334d2f6d 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/dynamodb/index.md @@ -17,7 +17,7 @@ import dynamodb_map_columns from '@site/static/images/integrations/data-ingestio import Image from '@theme/IdealImage'; -# 从 DynamoDB 到 ClickHouse 的 CDC +# 从 DynamoDB 到 ClickHouse 的 CDC {#cdc-from-dynamodb-to-clickhouse} @@ -50,9 +50,9 @@ import Image from '@theme/IdealImage'; -## 3. 将快照加载到 ClickHouse 中 +## 3. 将快照加载到 ClickHouse 中 {#3-load-the-snapshot-into-clickhouse} -### 创建必要的表 +### 创建必要的表 {#create-necessary-tables} 来自 DynamoDB 的快照数据大致如下所示: @@ -115,7 +115,7 @@ ORDER BY id; * 表应使用分区键作为排序键(通过 `ORDER BY` 指定) * 具有相同排序键的行会基于 `version` 列进行去重。 -### 创建快照 ClickPipe +### 创建快照 ClickPipe {#create-the-snapshot-clickpipe} 现在可以创建一个 ClickPipe,将来自 S3 的快照数据加载到 ClickHouse 中。请按照 S3 ClickPipe 指南[此处](/integrations/clickpipes/object-storage)的说明进行操作,但使用以下设置: @@ -146,7 +146,7 @@ https://{bucket}.s3.amazonaws.com/{prefix}/AWSDynamoDB/{export-id}/data/* -## 5. 清理(可选) +## 5. 清理(可选) {#5-cleanup-optional} 当快照 ClickPipe 运行完成后,可以删除快照表和物化视图。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md index 78a19ef372b..c55d0e6bc8b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/jdbc-with-clickhouse.md @@ -16,7 +16,7 @@ import Jdbc02 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-02 import Jdbc03 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-03.png'; -# 使用 JDBC 将 ClickHouse 连接到外部数据源 +# 使用 JDBC 将 ClickHouse 连接到外部数据源 {#connecting-clickhouse-to-external-data-sources-with-jdbc} :::note 使用 JDBC 需要 ClickHouse JDBC Bridge,因此您需要在本地机器上使用 `clickhouse-local`,将数据库中的数据以流式方式传输到 ClickHouse Cloud。请访问文档 **Migrate** 部分中的 [**Using clickhouse-local**](/cloud/migration/clickhouse-local#example-2-migrating-from-mysql-to-clickhouse-cloud-with-the-jdbc-bridge) 页面了解详细信息。 @@ -44,7 +44,7 @@ import Jdbc03 from '@site/static/images/integrations/data-ingestion/dbms/jdbc-03 -## 在本地安装 ClickHouse JDBC Bridge +## 在本地安装 ClickHouse JDBC Bridge {#install-the-clickhouse-jdbc-bridge-locally} 使用 ClickHouse JDBC Bridge 最简单的方式,是将其安装并运行在与 ClickHouse 相同的主机上: @@ -107,7 +107,7 @@ java -jar clickhouse-jdbc-bridge-2.0.7-shaded.jar ::: -## 在 ClickHouse 中使用 JDBC 连接 +## 在 ClickHouse 中使用 JDBC 连接 {#use-the-jdbc-connection-from-within-clickhouse} ClickHouse 现在可以通过使用 [jdbc 表函数](/sql-reference/table-functions/jdbc.md) 或 [JDBC 表引擎](/engines/table-engines/integrations/jdbc.md) 来访问 MySQL 数据。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md index a26143f7d74..f4308b7d8e5 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/dbms/postgresql/connecting-to-postgresql.md @@ -10,27 +10,24 @@ doc_type: 'guide' import CloudNotSupportedBadge from '@theme/badges/CloudNotSupportedBadge'; import ExperimentalBadge from '@theme/badges/ExperimentalBadge'; - -# 将 ClickHouse 连接到 PostgreSQL +# 将 ClickHouse 连接到 PostgreSQL {#connecting-clickhouse-to-postgresql} 本页介绍以下几种将 PostgreSQL 与 ClickHouse 集成的方式: -- 使用 `PostgreSQL` 表引擎,从 PostgreSQL 表中读取数据 -- 使用试验性的 `MaterializedPostgreSQL` 数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库进行同步 +* 使用 `PostgreSQL` 表引擎,从 PostgreSQL 表中读取数据 +* 使用试验性的 `MaterializedPostgreSQL` 数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库进行同步 :::tip 我们推荐使用由 PeerDB 提供支持的 [ClickPipes](/integrations/clickpipes/postgres),这是一项 ClickHouse Cloud 的托管集成服务。 或者,你也可以使用 [PeerDB](https://github.com/PeerDB-io/peerdb),它是一个专门为将 PostgreSQL 数据库复制到自托管 ClickHouse 和 ClickHouse Cloud 而设计的开源 CDC 工具。 ::: - - -## 使用 PostgreSQL 表引擎 +## 使用 PostgreSQL 表引擎 {#using-the-postgresql-table-engine} `PostgreSQL` 表引擎允许 ClickHouse 对存储在远程 PostgreSQL 服务器上的数据执行 **SELECT** 和 **INSERT** 操作。 本文将通过单个表来演示基本的集成方法。 -### 1. 设置 PostgreSQL +### 1. 设置 PostgreSQL {#1-setting-up-postgresql} 1. 在 `postgresql.conf` 中添加以下条目,以便让 PostgreSQL 监听网络接口: @@ -93,7 +90,7 @@ psql -U clickhouse_user -W -d db_in_psg -h <你的_postgresql_主机地址> 有关出站流量的详细信息,请查看 ClickHouse 的 [Cloud Endpoints API](/cloud/get-started/query-endpoints)。 ::: -### 2. 在 ClickHouse 中定义一张表 +### 2. 在 ClickHouse 中定义一张表 {#2-define-a-table-in-clickhouse} 1. 登录 `clickhouse-client`: @@ -131,7 +128,7 @@ ENGINE = PostgreSQL('postgres-host.domain.com:5432', 'db_in_psg', 'table1', 'cli 查看 [PostgreSQL 表引擎](/engines/table-engines/integrations/postgresql) 文档页面以获取完整的参数列表。 ::: -### 3 测试集成 +### 3 测试集成 {#3-test-the-integration} 1. 在 ClickHouse 中查看初始数据行: @@ -166,7 +163,6 @@ VALUES SELECT * FROM db_in_ch.table1 ``` - 响应应如下: ```response @@ -209,8 +205,7 @@ id | column1 请参阅 [PostgreSQL 表引擎的文档页面](/engines/table-engines/integrations/postgresql),了解更多功能,例如指定 schema、仅返回部分列以及连接到多个副本。另请参阅博客文章:[ClickHouse and PostgreSQL - a match made in data heaven - part 1](https://clickhouse.com/blog/migrating-data-between-clickhouse-postgres)。 - -## 使用 MaterializedPostgreSQL 数据库引擎 +## 使用 MaterializedPostgreSQL 数据库引擎 {#using-the-materializedpostgresql-database-engine} @@ -221,7 +216,7 @@ PostgreSQL 数据库引擎利用 PostgreSQL 的复制功能来创建该数据库 ***在以下步骤中,将使用 PostgreSQL 命令行客户端 (`psql`) 和 ClickHouse 命令行客户端 (`clickhouse-client`)。PostgreSQL 服务器安装在 Linux 上。下面给出的配置是针对全新测试安装的 PostgreSQL 数据库的最小配置。*** -### 1. 在 PostgreSQL 中 +### 1. 在 PostgreSQL 中 {#1-in-postgresql} 1. 在 `postgresql.conf` 中,设置基本的监听参数、WAL 复制级别以及复制槽: @@ -276,7 +271,6 @@ VALUES 7. 配置 PostgreSQL,允许使用新用户连接到新数据库以进行复制。下面是在 `pg_hba.conf` 文件中需要添加的最小必要条目: - ```text # TYPE DATABASE USER ADDRESS METHOD host db1 clickhouse_user 192.168.1.0/24 password @@ -350,7 +344,7 @@ Query id: df2381ac-4e30-4535-b22e-8be3894aaafc └────┴─────────┘ ``` -### 3. 测试基本复制 +### 3. 测试基本复制 {#2-in-clickhouse} 1. 在 PostgreSQL 中添加新行: @@ -386,7 +380,7 @@ Query id: b0729816-3917-44d3-8d1a-fed912fb59ce └────┴─────────┘ ``` -### 4. 总结 +### 4. 总结 {#3-test-basic-replication} 本集成指南重点通过一个简单示例说明如何复制一个包含单个表的数据库,不过也有更高级的选项,例如复制整个数据库,或在现有复制基础上新增表和模式(schema)。虽然此复制方式不支持 DDL 命令,但可以将引擎配置为在发生结构性变更时检测更改并重新加载表。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md index 6f13040568f..0e022f79bf0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/emqx/index.md @@ -40,7 +40,7 @@ import clickhouse_result from '@site/static/images/integrations/data-ingestion/e import Image from '@theme/IdealImage'; -# 将 EMQX 与 ClickHouse 集成 +# 将 EMQX 与 ClickHouse 集成 {#integrating-emqx-with-clickhouse} @@ -63,7 +63,7 @@ import Image from '@theme/IdealImage'; -## 获取 ClickHouse Cloud 服务 +## 获取 ClickHouse Cloud 服务 {#get-your-clickhouse-cloudservice} 在本次部署过程中,我们在 AWS 美国北弗吉尼亚(us-east-1)区域部署了一个 ClickHouse 实例,并在同一地区部署了一个 EMQX Cloud 实例。 @@ -153,7 +153,7 @@ EMQX Cloud 默认不允许匿名连接,所以你需要添加一个客户端凭 -## 将 EMQX Cloud 与 ClickHouse Cloud 集成 +## 将 EMQX Cloud 与 ClickHouse Cloud 集成 {#integration-emqx-cloud-with-clickhouse-cloud} [EMQX Cloud Data Integrations](https://docs.emqx.com/en/cloud/latest/rule_engine/introduction.html#general-flow) 用于配置处理和响应 EMQX 消息流与设备事件的规则。Data Integrations 不仅提供了清晰且灵活的可配置架构方案,还简化了开发流程、提升了用户体验,并降低了业务系统与 EMQX Cloud 之间的耦合度。同时,它还为 EMQX Cloud 专有能力的定制化提供了完善的基础设施。 @@ -163,7 +163,7 @@ EMQX Cloud 为常见数据系统提供了 30 多种原生集成方案,ClickHou -### 创建 ClickHouse 资源 +### 创建 ClickHouse 资源 {#create-clickhouse-resource} 点击左侧菜单中的 “Data Integrations”,然后点击 “View All Resources”。您可以在 Data Persistence 部分找到 ClickHouse,或者直接搜索 ClickHouse。 @@ -177,7 +177,7 @@ EMQX Cloud 为常见数据系统提供了 30 多种原生集成方案,ClickHou -### 创建新规则 +### 创建新规则 {#create-a-new-rule} 在创建资源的过程中,您会看到一个弹窗,点击 “New” 会跳转到规则创建页面。 @@ -212,7 +212,7 @@ FROM 现在点击 "NEXT" 按钮。此步骤是告诉 EMQX Cloud 如何将处理后的数据写入你的 ClickHouse 数据库。 -### 添加响应操作 +### 添加响应操作 {#add-a-response-action} 如果你只有一个资源,则无需修改 'Resource' 和 'Action Type'。 你只需要设置 SQL 模板。以下是本教程中使用的示例: @@ -225,7 +225,7 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ 这是一个用于向 ClickHouse 写入数据的模板,可以看到这里使用了变量。 -### 查看规则详情 +### 查看规则详情 {#view-rules-details} 点击 “Confirm” 和 “View Details”。现在一切都已配置就绪。你可以在规则详情页面看到数据集成的运行情况。 @@ -234,13 +234,13 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ 发送到 `temp_hum/emqx` 主题的所有 MQTT 消息都会被持久化到你的 ClickHouse Cloud 数据库中。 -## 将数据保存到 ClickHouse +## 将数据保存到 ClickHouse {#saving-data-into-clickhouse} 我们将模拟温度和湿度数据,通过 MQTT X 将这些数据上报到 EMQX Cloud,然后使用 EMQX Cloud 的数据集成功能将数据保存到 ClickHouse Cloud 中。 -### 向 EMQX Cloud 发布 MQTT 消息 +### 向 EMQX Cloud 发布 MQTT 消息 {#publish-mqtt-messages-to-emqx-cloud} 你可以使用任意 MQTT 客户端或 SDK 发布消息。在本教程中,我们将使用 [MQTT X](https://mqttx.app/),这是由 EMQ 提供的一款用户友好的 MQTT 客户端应用程序。 @@ -274,13 +274,13 @@ INSERT INTO temp_hum (client_id, timestamp, topic, temp, hum) VALUES ('${client_ -### 查看规则监控 +### 查看规则监控 {#view-rules-monitoring} 检查规则监控,确认成功次数已增加 1。 -### 检查持久化数据 +### 检查持久化数据 {#check-the-data-persisted} 现在是时候查看 ClickHouse Cloud 上的数据了。理想情况下,你使用 MQTTX 发送的数据会进入 EMQX Cloud,并在原生数据集成的帮助下持久化到 ClickHouse Cloud 的数据库中。 @@ -293,6 +293,6 @@ SELECT * FROM emqx.temp_hum; -### 总结 +### 总结 {#summary} 你无需编写任何代码,就已经让 MQTT 数据从 EMQX Cloud 流转到了 ClickHouse Cloud。借助 EMQX Cloud 和 ClickHouse Cloud,你无需自行管理基础设施,只需专注于编写物联网 (IoT) 应用,而数据会安全地存储在 ClickHouse Cloud 中。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md index 9c9b98a987d..78681183269 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/airbyte-and-clickhouse.md @@ -25,7 +25,7 @@ import airbyte09 from '@site/static/images/integrations/data-ingestion/etl-tools import PartnerBadge from '@theme/badges/PartnerBadge'; -# 将 Airbyte 连接到 ClickHouse +# 将 Airbyte 连接到 ClickHouse {#connect-airbyte-to-clickhouse} @@ -70,7 +70,7 @@ import PartnerBadge from '@theme/badges/PartnerBadge'; -## 将 ClickHouse 添加为目标 +## 将 ClickHouse 添加为目标 {#2-add-clickhouse-as-a-destination} 在本节中,我们将展示如何将一个 ClickHouse 实例添加为目标。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md index 441455abc73..b56dbf2cfe0 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/apache-beam.md @@ -13,7 +13,7 @@ keywords: ['apache beam', 'stream processing', 'batch processing', 'jdbc connect import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# 集成 Apache Beam 与 ClickHouse +# 集成 Apache Beam 与 ClickHouse {#integrating-apache-beam-and-clickhouse} @@ -29,9 +29,9 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## 设置 Apache Beam ClickHouse 包 +## 设置 Apache Beam ClickHouse 包 {#setup-of-the-apache-beam-clickhouse-package} -### 安装包 +### 安装包 {#package-installation} 将以下依赖添加到你的包管理工具中: @@ -50,7 +50,7 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; 相关构件可以在[官方 Maven 仓库](https://mvnrepository.com/artifact/org.apache.beam/beam-sdks-java-io-clickhouse)中找到。 -### 代码示例 +### 代码示例 {#code-example} 以下示例将名为 `input.csv` 的 CSV 文件读取为 `PCollection`,将其转换为 Row 对象(基于已定义的 schema),并使用 `ClickHouseIO` 将其插入到本地 ClickHouse 实例中: diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md index b712370db52..34a438409e6 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/bladepipe-and-clickhouse.md @@ -21,7 +21,7 @@ import bp_ck_9 from '@site/static/images/integrations/data-ingestion/etl-tools/b import PartnerBadge from '@theme/badges/PartnerBadge'; -# 将 BladePipe 连接到 ClickHouse +# 将 BladePipe 连接到 ClickHouse {#connect-bladepipe-to-clickhouse} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md index f281fbe18cd..314e8685fad 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/features-and-configurations.md @@ -12,7 +12,7 @@ import TOCInline from '@theme/TOCInline'; import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# 功能和配置 +# 功能和配置 {#features-and-configurations} @@ -22,7 +22,7 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## Profile.yml 配置 +## Profile.yml 配置 {#profile-yml-configurations} 要使用 dbt 连接到 ClickHouse,需在 `profiles.yml` 文件中添加一个 [profile](https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles)。ClickHouse 的 profile 遵循以下语法: @@ -65,16 +65,16 @@ your_profile_name: compress_block_size: [1048576] # 启用压缩时的压缩块大小 ``` -### 模式与数据库 +### 模式与数据库 {#schema-vs-database} dbt 模型关系标识符 `database.schema.table` 与 ClickHouse 不兼容,因为 ClickHouse 不支持 `schema`。 因此我们采用简化形式 `schema.table`,其中 `schema` 实际上就是 ClickHouse 的 database。不推荐使用 `default` 数据库。 -### SET 语句警告 +### SET 语句警告 {#set-statement-warning} 在许多环境中,使用 SET 语句在所有 dbt 查询之间持久化 ClickHouse 设置并不可靠,并可能导致意外失败。对于通过负载均衡器使用 HTTP 连接并将查询分发到多个节点的场景(例如 ClickHouse Cloud),这一点尤为明显;在某些情况下,这种问题在原生 ClickHouse 连接中也可能出现。因此,我们建议将所有必需的 ClickHouse 设置配置在 dbt profile 的 "custom_settings" 属性中,作为最佳实践,而不是依赖在 pre-hook 中执行 "SET" 语句(这一做法曾被偶尔建议过)。 -### 设置 `quote_columns` +### 设置 `quote_columns` {#setting-quote_columns} 为避免出现警告,请务必在 `dbt_project.yml` 中明确设置 `quote_columns` 的值。更多信息请参阅[有关 `quote_columns` 的文档](https://docs.getdbt.com/reference/resource-configs/quote_columns)。 @@ -84,14 +84,14 @@ seeds: +quote_columns: false #若 CSV 列标题含有空格,则设为 `true` ``` -### 关于 ClickHouse 集群 +### 关于 ClickHouse 集群 {#about-the-clickhouse-cluster} 在使用 ClickHouse 集群时,需要考虑两点: * 设置 `cluster` 参数。 * 确保写入后的读取一致性,尤其是在使用多个 `threads` 时。 -#### 集群设置 +#### 集群设置 {#cluster-setting} 配置文件中的 `cluster` 参数允许 dbt-clickhouse 在 ClickHouse 集群上运行。若在配置文件中设置了 `cluster`,则**所有模型默认都会使用 `ON CLUSTER` 子句进行创建**——使用 **Replicated** 引擎的模型除外。这包括: @@ -120,7 +120,7 @@ Replicated 引擎**不会**包含 `ON CLUSTER` 子句,因为它们被设计为 如果某个模型是在没有 `cluster` 设置的情况下创建的,dbt-clickhouse 会识别这一情况,并在对该模型执行所有 DDL/DML 时不使用 `on cluster` 子句。 -#### 写后读一致性 +#### 写后读一致性 {#read-after-write-consistency} dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无法保证所有操作都发送到同一个副本,那么对于具有多个副本的 ClickHouse 集群,这种一致性模型就不兼容。在你日常使用 dbt 的过程中,可能不会遇到问题,但可以根据集群情况采用一些策略来保证这一点: @@ -128,9 +128,9 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 * 如果你使用的是自托管集群,请确保所有 dbt 请求都发送到同一个 ClickHouse 副本。如果其前面有负载均衡器,尝试使用 `replica aware routing` / `sticky sessions` 等机制,以始终访问同一副本。在 ClickHouse Cloud 之外的集群中添加设置 `select_sequential_consistency = 1`[是不推荐的](https://clickhouse.com/docs/operations/settings/settings#select_sequential_consistency)。 -## 功能概览 +## 功能概览 {#general-information-about-features} -### 通用表配置 +### 通用表配置 {#general-table-configurations} | Option | Description | Default if any | | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------- | -------------- | @@ -148,7 +148,7 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 | definer | 如果 `sql_security` 设置为 `definer`,则必须在 `definer` 子句中指定某个已存在的用户或 `CURRENT_USER`。 | | | projections | 要创建的[投影(projections)列表](/data-modeling/projections)。详细信息参见[关于投影](#projections)。 | | -#### 关于数据跳过索引 +#### 关于数据跳过索引 {#data-skipping-indexes} 数据跳过索引仅适用于 `table` 物化方式。要为表添加数据跳过索引列表,请使用 `indexes` 配置: @@ -162,7 +162,7 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 ) }} ``` -#### 关于投影 +#### 关于投影 {#projections} 你可以通过 `projections` 配置为 `table` 和 `distributed_table` 物化方式添加[投影](/data-modeling/projections): @@ -180,7 +180,7 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 **注意**:对于分布式表,投影会应用到 `_local` 表,而不是分布式代理表。 -### 支持的表引擎 +### 支持的表引擎 {#supported-table-engines} | 类型 | 详情 | | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -191,7 +191,7 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 | EmbeddedRocksDB | [https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb](https://clickhouse.com/docs/en/engines/table-engines/integrations/embedded-rocksdb) | | Hive | [https://clickhouse.com/docs/en/engines/table-engines/integrations/hive](https://clickhouse.com/docs/en/engines/table-engines/integrations/hive) | -### 实验性支持的表引擎 +### 实验性支持的表引擎 {#experimental-supported-table-engines} | 类型 | 详情 | @@ -201,13 +201,13 @@ dbt 依赖写入后读取(read-after-insert)的一致性模型。如果无 如果你在使用上述任一引擎时,从 dbt 连接 ClickHouse 遇到问题,请在[这里](https://github.com/ClickHouse/dbt-clickhouse/issues)提交 issue。 -### 关于模型设置的说明 +### 关于模型设置的说明 {#a-note-on-model-settings} ClickHouse 有多种类型/级别的“设置(settings)”。在上面的模型配置中,其中两类是可配置的。`settings` 指的是在 `CREATE TABLE/VIEW` 这类 DDL 语句中使用的 `SETTINGS` 子句,因此通常是特定于某个 ClickHouse 表引擎的设置。新的 `query_settings` 用于在用于模型物化的 `INSERT` 和 `DELETE` 查询中添加 `SETTINGS` 子句(包括增量物化)。 ClickHouse 中有数百个设置,而且并不总是很清楚哪些是“表”级设置,哪些是“用户”级设置(尽管后者通常可以在 `system.settings` 表中查看)。通常推荐使用默认值,若要使用这些属性,应进行充分的调研和测试。 -### 列配置 +### 列配置 {#column-configuration} > ***注意:*** 下列列配置选项要求启用并强制执行[模型契约(model contracts)](https://docs.getdbt.com/docs/collaborate/govern/model-contracts)。 @@ -216,7 +216,7 @@ ClickHouse 中有数百个设置,而且并不总是很清楚哪些是“表” | codec | 一个字符串,由传递给列 DDL 中 `CODEC()` 的参数组成。例如:`codec: "Delta, ZSTD"` 会被编译为 `CODEC(Delta, ZSTD)`。 | | | ttl | 一个字符串,由[TTL(time-to-live)表达式](https://clickhouse.com/docs/guides/developer/ttl)组成,用于在列的 DDL 中定义 TTL 规则。例如:`ttl: ts + INTERVAL 1 DAY` 会被编译为 `TTL ts + INTERVAL 1 DAY`。 | | -#### Schema 配置示例 +#### Schema 配置示例 {#example-of-schema-configuration} ```yaml models: @@ -234,7 +234,7 @@ models: ttl: ts + INTERVAL 1 DAY ``` -#### 添加复杂类型 +#### 添加复杂类型 {#adding-complex-types} dbt 会通过分析用于创建模型的 SQL,自动推断每一列的数据类型。然而,在某些情况下,此过程可能无法准确确定数据类型,进而与契约中 `data_type` 属性指定的类型产生冲突。为了解决这一问题,我们建议在模型 SQL 中使用 `CAST()` 函数显式指定所需类型。例如: @@ -259,9 +259,9 @@ group by event_type ``` -## 功能 +## 功能 {#features} -### 物化类型:view +### 物化类型:view {#materialization-view} 可以将 dbt 模型创建为 [ClickHouse view](https://clickhouse.com/docs/en/sql-reference/table-functions/view/), 并使用以下语法进行配置: @@ -280,7 +280,7 @@ models: {{ config(materialized = "view") }} ``` -### 物化:table +### 物化:table {#materialization-table} 可以将 dbt 模型物化为 [ClickHouse 表](https://clickhouse.com/docs/en/operations/system-tables/tables/),并使用以下语法进行配置: @@ -308,7 +308,7 @@ models: ) }} ``` -### 物化方式:增量(incremental) +### 物化方式:增量(incremental) {#materialization-incremental} 每次执行 dbt 时,表模型都会被重新构建。对于较大的结果集或复杂的转换,这可能不可行且代价极高。为了解决这一问题并减少构建时间,可以将 dbt 模型创建为 ClickHouse 增量表,并使用以下语法进行配置: @@ -340,7 +340,7 @@ models: ) }} ``` -#### 配置 +#### 配置 {#configurations} 针对此物化类型的特定配置如下所示: @@ -351,11 +351,11 @@ models: | `incremental_strategy` | 用于增量物化的策略。支持 `delete+insert`、`append`、`insert_overwrite` 或 `microbatch`。有关各策略的更多详细信息,请参见[此处](/integrations/dbt/features-and-configurations#incremental-model-strategies)。 | 可选(默认:'default') | | `incremental_predicates` | 需要应用于增量物化的附加条件(仅适用于 `delete+insert` 策略) | 可选 | -#### 增量模型策略 +#### 增量模型策略 {#incremental-model-strategies} `dbt-clickhouse` 支持三种增量模型策略。 -##### 默认(传统)策略 +##### 默认(传统)策略 {#default-legacy-strategy} 一直以来,ClickHouse 仅通过异步的 “mutations” 形式有限支持更新和删除操作。 为了模拟预期的 dbt 行为, @@ -363,7 +363,7 @@ dbt-clickhouse 默认会创建一个新的临时表,该表包含所有未受 记录,以及所有新增或更新的记录, 然后将此临时表与现有的增量模型关系进行交换。这是唯一一种在操作完成之前如果出现问题仍能保留原始关系的策略;但是,由于它需要对原始表进行完整拷贝,因此执行代价较高且速度较慢。 -##### Delete+Insert 策略 +##### Delete+Insert 策略 {#delete-insert-strategy} ClickHouse 在 22.8 版本中新增了实验性功能 “lightweight deletes(轻量级删除)”。与 `ALTER TABLE ... DELETE` @@ -437,7 +437,7 @@ ClickHouse 在 22.8 版本中新增了实验性功能 “lightweight deletes( 该策略要求在模型配置中设置 `partition_by`,并会忽略模型配置中所有其他特定于策略的参数。 -### 物化:materialized_view(实验性) +### 物化:materialized_view(实验性) {#materialized-view} `materialized_view` 物化应为对现有(源)表的 `SELECT`。适配器会创建一个名称为模型名的目标表, 以及一个名为 `_mv` 的 ClickHouse MATERIALIZED VIEW。与 PostgreSQL 不同,ClickHouse 的物化视图不是“静态的”(且 @@ -466,7 +466,7 @@ select a,b,c from {{ source('raw', 'table_2') }} > 将会看到如下警告: > `Warning - Table was detected with the same pattern as model name but was not found in this run. In case it is a renamed mv that was previously part of this model, drop it manually (!!!) ` -#### 数据补齐 +#### 数据补齐 {#data-catch-up} 目前,在创建物化视图(MV)时,目标表会先使用历史数据进行填充,然后才创建 MV 本身。 @@ -483,7 +483,7 @@ select a,b,c from {{ source('raw', 'table_2') }} )}} ``` -#### 可刷新物化视图 +#### 可刷新物化视图 {#refreshable-materialized-views} 要使用 [Refreshable Materialized View](https://clickhouse.com/docs/en/materialized-view/refreshable-materialized-view), 请在 MV 模型中按需调整以下配置(所有这些配置都应在一个 refreshable 配置对象中进行设置): @@ -514,7 +514,7 @@ select a,b,c from {{ source('raw', 'table_2') }} }} ``` -#### 限制 +#### 限制 {#limitations} * 在 ClickHouse 中创建具有依赖项的可刷新的物化视图(MV)时,如果在创建时指定的依赖项不存在,ClickHouse 不会抛出错误。 相反,该可刷新 MV 会保持在未激活状态,等待依赖项被满足之后,才会开始处理更新或刷新。 @@ -523,7 +523,7 @@ select a,b,c from {{ source('raw', 'table_2') }} * 截至目前,MV 与其依赖项之间并没有真正的 “dbt 链接(dbt linkage)”,因此无法保证创建顺序。 * 尚未对多个 MV 指向同一目标模型场景下的可刷新特性进行测试。 -### 物化:dictionary(实验性) +### 物化:dictionary(实验性) {#materialization-dictionary} 请参阅 [https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py](https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/dictionary/test_dictionary.py) @@ -531,7 +531,7 @@ select a,b,c from {{ source('raw', 'table_2') }} 以获取如何为 ClickHouse dictionaries 实现物化的示例。 -### 物化:distributed_table(实验性) +### 物化:distributed_table(实验性) {#materialization-distributed-table} 通过以下步骤创建 Distributed 表: @@ -545,7 +545,7 @@ select a,b,c from {{ source('raw', 'table_2') }} * 为了确保下游增量物化操作能够正确执行,dbt-clickhouse 查询现在会自动包含设置 `insert_distributed_sync = 1`。 这可能会导致某些 Distributed 表插入操作比预期更慢。 -#### Distributed 表模型示例 +#### Distributed 表模型示例 {#distributed-table-model-example} ```sql {{ @@ -561,7 +561,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### 自动生成的迁移 +#### 自动生成的迁移 {#distributed-table-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -581,7 +581,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### materialization: distributed_incremental(实验性) +### materialization: distributed_incremental(实验性) {#materialization-distributed-incremental} 基于与 Distributed 表相同理念的增量模型,主要难点在于要正确处理所有增量策略。 @@ -592,7 +592,7 @@ CREATE TABLE db.table on cluster cluster ( 只会替换各分片上的本地表,因为 Distributed 表本身不存储数据。 Distributed 表仅在启用 full_refresh 模式或表结构可能发生变化时才会重新加载。 -#### 分布式增量模型示例 +#### 分布式增量模型示例 {#distributed-incremental-model-example} ```sql @@ -609,7 +609,7 @@ select id, created_at, item from {{ source('db', 'table') }} ``` -#### 自动生成的迁移 +#### 自动生成的迁移 {#distributed-incremental-generated-migrations} ```sql CREATE TABLE db.table_local on cluster cluster ( @@ -628,7 +628,7 @@ CREATE TABLE db.table on cluster cluster ( ENGINE = Distributed ('cluster', 'db', 'table_local', cityHash64(id)); ``` -### 快照 +### 快照 {#snapshot} dbt 快照允许对可变模型随时间发生的变更进行记录。这样一来,就可以在模型上执行按时间点的查询,使分析人员能够“回到过去”查看模型之前的状态。ClickHouse 连接器支持此功能,并可通过以下语法进行配置: @@ -647,15 +647,15 @@ dbt 快照允许对可变模型随时间发生的变更进行记录。这样一 有关配置的更多信息,请查看 [snapshot configs](https://docs.getdbt.com/docs/build/snapshots#snapshot-configs) 参考页面。 -### 合约与约束 +### 合约与约束 {#contracts-and-constraints} 仅支持精确匹配的列类型合约。例如,如果合约中列类型为 UInt32,而模型返回 UInt64 或其他整数类型,则会失败。 ClickHouse *仅* 支持在整个表/模型上的 `CHECK` 约束。不支持主键、外键、唯一键以及列级别的 `CHECK` 约束。 (参见 ClickHouse 关于 primary/ORDER BY 键的文档。) -### 其他 ClickHouse 宏 +### 其他 ClickHouse 宏 {#additional-clickhouse-macros} -#### 模型物化辅助宏 +#### 模型物化辅助宏 {#model-materialization-utility-macros} 包含以下宏,用于简化创建 ClickHouse 特定的表和视图: @@ -672,7 +672,7 @@ ClickHouse *仅* 支持在整个表/模型上的 `CHECK` 约束。不支持主 * `ttl_config` -- 使用 `ttl` 模型配置属性来指定 ClickHouse 表的 TTL 表达式。 默认不设置 TTL。 -#### s3Source 辅助宏 +#### s3Source 辅助宏 {#s3source-helper-macro} `s3source` 宏简化了使用 ClickHouse S3 表函数直接从 S3 中选择 ClickHouse 数据的流程。其工作方式是 从具名配置字典(字典名称必须以 `s3` 结尾)中填充 S3 表函数参数。该宏会 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md index da92b149a67..840f49d5dba 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/guides.md @@ -20,7 +20,7 @@ import dbt_07 from '@site/static/images/integrations/data-ingestion/etl-tools/db import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# 指南 +# 指南 {#guides} @@ -39,13 +39,13 @@ import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -## 设置 +## 设置 {#setup} 请按照[设置 dbt 和 ClickHouse 适配器](/integrations/dbt)部分中的说明来准备环境。 **重要:以下内容已在 Python 3.9 环境下测试通过。** -### 准备 ClickHouse +### 准备 ClickHouse {#prepare-clickhouse} dbt 在对高度关系型的数据进行建模时表现出色。作为示例,我们提供了一个包含如下关系型模式的小型 IMDb 数据集。该数据集来源于[关系型数据集仓库](https://relational.fit.cvut.cz/dataset/IMDb)。与 dbt 常见的模式相比,这个示例非常简单,但可以作为一个便于上手的示例样本: @@ -672,7 +672,7 @@ SELECT * FROM imdb_dbt.actor_summary ORDER BY num_movies DESC LIMIT 2; +------+-------------------+----------+------------------+------+---------+-------------------+ ``` -### 内部实现 +### 内部实现 {#internals} 我们可以通过查询 ClickHouse 的查询日志,找出为完成上述增量更新而执行的语句。 @@ -694,7 +694,7 @@ AND event_time > subtractMinutes(now(), 15) ORDER BY event_time LIMIT 100; 这种策略在非常大的模型上可能会遇到挑战。更多细节请参见 [Limitations](/integrations/dbt#limitations)。 -### 追加策略(仅插入模式) +### 追加策略(仅插入模式) {#append-strategy-inserts-only-mode} 为克服在大数据集上使用增量模型的限制,适配器使用 dbt 配置参数 `incremental_strategy`。该参数可以设置为 `append`。设置后,更新的行会被直接插入到目标表(即 `imdb_dbt.actor_summary`)中,而不会创建临时表。 注意:仅追加模式要求你的数据是不可变的,或者可以接受重复数据。如果你需要一个支持已修改行的增量表模型,请不要使用此模式! @@ -796,7 +796,7 @@ WHERE id > (SELECT max(id) FROM imdb_dbt.actor_summary) OR updated_at > (SELECT 在本次运行中,只有新增的行会直接添加到 `imdb_dbt.actor_summary` 表中,不会涉及创建新表。 -### 删除并插入模式(实验性) +### 删除并插入模式(实验性) {#deleteinsert-mode-experimental} 一直以来,ClickHouse 仅通过异步的 [变更(Mutations)](/sql-reference/statements/alter/index.md) 对更新和删除提供有限支持。这些操作对 IO 消耗极大,通常应尽量避免。 @@ -821,7 +821,7 @@ ClickHouse 22.8 引入了[轻量级删除](/sql-reference/statements/delete.md) -### insert_overwrite 模式(实验性) +### insert_overwrite 模式(实验性) {#insert_overwrite-mode-experimental} 执行以下步骤: @@ -840,7 +840,7 @@ ClickHouse 22.8 引入了[轻量级删除](/sql-reference/statements/delete.md) -## 创建快照 +## 创建快照 {#creating-a-snapshot} dbt 快照允许随着时间推移记录可变模型的变更。这使得可以在模型上执行时间点查询,从而让分析人员“回溯”查看模型先前的状态。其通过使用[类型 2 缓慢变化维度](https://en.wikipedia.org/wiki/Slowly_changing_dimension#Type_2:_add_new_row)实现,其中 from 和 to 日期列用于记录某一行数据在什么时间段内有效。ClickHouse 适配器支持此功能,下面将进行演示。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md index 5d664753e77..52588aa666a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dbt/index.md @@ -95,9 +95,9 @@ dbt 提供 4 种物化方式: -## 配置 dbt 和 ClickHouse 适配器 +## 配置 dbt 和 ClickHouse 适配器 {#setup-of-dbt-and-the-clickhouse-adapter} -### 安装 dbt-core 和 dbt-clickhouse +### 安装 dbt-core 和 dbt-clickhouse {#install-dbt-core-and-dbt-clickhouse} dbt 提供了多种安装命令行界面(CLI)的方法,详细说明见 [此处](https://docs.getdbt.com/dbt-cli/install/overview)。我们建议使用 `pip` 安装 dbt 和 dbt-clickhouse。 @@ -105,7 +105,7 @@ dbt 提供了多种安装命令行界面(CLI)的方法,详细说明见 [ pip install dbt-core dbt-clickhouse ``` -### 为 dbt 提供 ClickHouse 实例的连接详细信息。 +### 为 dbt 提供 ClickHouse 实例的连接详细信息。 {#provide-dbt-with-the-connection-details-for-our-clickhouse-instance} 在 `~/.dbt/profiles.yml` 文件中配置名为 `clickhouse-service` 的 profile,并提供 schema、host、port、user 和 password 属性。完整的连接配置选项列表请参见 [功能与配置](/integrations/dbt/features-and-configurations) 页面: @@ -125,7 +125,7 @@ clickhouse-service: secure: True # 使用 TLS(原生协议)或 HTTPS(HTTP 协议) ``` -### 创建 dbt 项目 +### 创建 dbt 项目 {#create-a-dbt-project} 现在你可以在现有项目中使用此配置,或使用以下命令创建新项目: @@ -139,17 +139,17 @@ dbt init <项目名称> profile: 'clickhouse-service' ``` -### 测试连接 +### 测试连接 {#test-connection} 使用 CLI 工具执行 `dbt debug`,以确认 dbt 是否能够连接到 ClickHouse。确认输出中包含 `Connection test: [OK connection ok]`,这表示连接成功。 前往[指南页面](/integrations/dbt/guides)以了解更多关于如何在 ClickHouse 中使用 dbt 的信息。 -### 测试和部署你的模型(CI/CD) +### 测试和部署你的模型(CI/CD) {#testing-and-deploying-your-models-ci-cd} 有多种方式可以测试和部署你的 dbt 项目。dbt 提供了一些关于[最佳实践工作流](https://docs.getdbt.com/best-practices/best-practice-workflows#pro-tips-for-workflows)和[CI 作业](https://docs.getdbt.com/docs/deploy/ci-jobs)的建议。我们将讨论几种策略,但请记住,这些策略可能需要进行较大幅度的调整以适配你的具体用例。 -#### 使用简单数据测试和单元测试的 CI/CD +#### 使用简单数据测试和单元测试的 CI/CD {#ci-with-simple-data-tests-and-unit-tests} 启动 CI 流水线的一种简单方式,是在作业内部运行一个 ClickHouse 集群,然后在其上运行你的模型。在运行模型之前,你可以向该集群插入演示数据。你可以直接使用一个 [seed](https://docs.getdbt.com/reference/commands/seed) 来用生产数据的一个子集填充暂存环境(staging 环境)。 @@ -157,7 +157,7 @@ profile: 'clickhouse-service' 你的 CD 步骤可以非常简单,只需针对生产 ClickHouse 集群运行 `dbt build` 即可。 -#### 更完整的 CI/CD 阶段:使用最新数据,仅测试受影响的模型 +#### 更完整的 CI/CD 阶段:使用最新数据,仅测试受影响的模型 {#more-complete-ci-stage} 一种常见策略是使用 [Slim CI](https://docs.getdbt.com/best-practices/best-practice-workflows#run-only-modified-models-to-test-changes-slim-ci) 作业,只重新部署被修改的模型(以及其上下游依赖)。这种方法利用生产运行生成的制品(例如 [dbt manifest](https://docs.getdbt.com/reference/artifacts/manifest-json))来缩短项目运行时间,并确保各环境之间的模式不会发生漂移。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md index e0a73d59f69..e5069e15042 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/dlt-and-clickhouse.md @@ -10,7 +10,7 @@ doc_type: 'guide' import PartnerBadge from '@theme/badges/PartnerBadge'; -# 将 dlt 连接到 ClickHouse +# 将 dlt 连接到 ClickHouse {#connect-dlt-to-clickhouse} @@ -18,9 +18,9 @@ import PartnerBadge from '@theme/badges/PartnerBadge'; -## 安装适用于 ClickHouse 的 dlt +## 安装适用于 ClickHouse 的 dlt {#install-dlt-with-clickhouse} -### 安装包含 ClickHouse 依赖的 `dlt` 库: +### 安装包含 ClickHouse 依赖的 `dlt` 库: {#to-install-the-dlt-library-with-clickhouse-dependencies} ```bash pip install "dlt[clickhouse]" @@ -99,7 +99,7 @@ dataset_table_separator = "___" # 数据集表名与数据集之间的 ```bash -# 将此配置保持在 toml 文件的顶部,在任何节(section)开始之前。 +# 将此配置保持在 toml 文件的顶部,在任何节(section)开始之前。 {#keep-it-at-the-top-of-your-toml-file-before-any-section-starts} destination.clickhouse.credentials="clickhouse://dlt:Dlt*12345789234567@localhost:9000/dlt?secure=1" ``` @@ -156,7 +156,7 @@ ClickHouse 支持以下GCS table function 自动处理,dlt 在内部会调用该函数。 @@ -240,10 +240,10 @@ dlt 会将这些凭据传递给 ClickHouse,由 ClickHouse 处理认证并访 * 使 filesystem 目标在 s3 兼容模式下与 gcs 正常工作 * Google Cloud Storage staging 区域 支持 -### Dbt 支持 +### Dbt 支持 {#dbt-support} 与 dbt 的集成通常通过 dbt-clickhouse 提供支持。 -### `dlt` 状态同步 +### `dlt` 状态同步 {#syncing-of-dlt-state} 此目标完全支持 dlt 状态同步。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md index cf7fa7d6030..66906e534c6 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/fivetran/index.md @@ -14,7 +14,7 @@ keywords: ['fivetran', '数据迁移', 'etl', 'ClickHouse 目标端', '自动化 import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Fivetran 与 ClickHouse Cloud +# Fivetran 与 ClickHouse Cloud {#fivetran-and-clickhouse-cloud} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md index d5d863f1e5b..e05292332fa 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/nifi-and-clickhouse.md @@ -11,7 +11,7 @@ integration: - category: 'data_ingestion' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; import nifi01 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_01.png'; import nifi02 from '@site/static/images/integrations/data-ingestion/etl-tools/nifi_02.png'; @@ -31,7 +31,7 @@ import nifi15 from '@site/static/images/integrations/data-ingestion/etl-tools/ni import CommunityMaintainedBadge from '@theme/badges/CommunityMaintained'; -# 将 Apache NiFi 连接到 ClickHouse +# 将 Apache NiFi 连接到 ClickHouse {#connect-apache-nifi-to-clickhouse} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md index 885d9368360..9bc648e3edf 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/etl-tools/vector-to-clickhouse.md @@ -18,8 +18,7 @@ import vector01 from '@site/static/images/integrations/data-ingestion/etl-tools/ import vector02 from '@site/static/images/integrations/data-ingestion/etl-tools/vector_02.png'; import PartnerBadge from '@theme/badges/PartnerBadge'; - -# 将 Vector 与 ClickHouse 集成 +# 将 Vector 与 ClickHouse 集成 {#integrating-vector-with-clickhouse} @@ -31,13 +30,11 @@ ClickHouse 在存储和分析日志数据方面表现卓越,这得益于其出 **前置条件:** -- 您已部署并运行 ClickHouse -- 您已安装 Vector +* 您已部署并运行 ClickHouse +* 您已安装 Vector - - -## 创建数据库和表 +## 创建数据库和表 {#1-create-a-database-and-table} 定义一个用于存储日志事件的表: @@ -47,7 +44,7 @@ ClickHouse 在存储和分析日志数据方面表现卓越,这得益于其出 CREATE DATABASE IF NOT EXISTS nginxdb ``` -2. 将整条日志事件作为一个字符串插入。显然,这并不是对日志数据进行分析的理想格式,不过我们会在下文中借助***物化视图***来解决这一问题。 +2. 将整条日志事件作为一个字符串插入。显然,这并不是对日志数据进行分析的理想格式,不过我们会在下文中借助***物化视图***来解决这一问题。 ```sql CREATE TABLE IF NOT EXISTS nginxdb.access_logs ( @@ -61,8 +58,7 @@ ORDER BY tuple() **ORDER BY** 被设置为 **tuple()**(一个空元组),因为当前还不需要主键。 ::: - -## 配置 Nginx +## 配置 Nginx {#2--configure-nginx} 在本步骤中,将演示如何配置 Nginx 日志记录。 @@ -91,13 +87,12 @@ http { 192.168.208.1 - - [12/Oct/2021:03:31:49 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36" ``` - -## 配置 Vector +## 配置 Vector {#3-configure-vector} Vector 会收集、转换并路由日志、指标和追踪数据(统称为 **sources**),将其发送到多个不同的后端目标(统称为 **sinks**),并且开箱即用地兼容 ClickHouse。 Sources 和 sinks 都在名为 **vector.toml** 的配置文件中定义。 -1. 以下 **vector.toml** 文件定义了一个类型为 **file** 的 **source**,用于持续跟踪读取 **my_access.log** 文件末尾的内容,同时还定义了一个 **sink**,即上文定义的 **access_logs** 表: +1. 以下 **vector.toml** 文件定义了一个类型为 **file** 的 **source**,用于持续跟踪读取 **my_access.log** 文件末尾的内容,同时还定义了一个 **sink**,即上文定义的 **access_logs** 表: ```bash [sources.nginx_logs] @@ -124,14 +119,13 @@ SELECT * FROM nginxdb.access_logs - -## 解析日志 +## 解析日志 {#4-parse-the-logs} 将日志存储在 ClickHouse 中固然很好,但如果将每个事件都存储为单个字符串,就很难进行有效的数据分析。 接下来我们将介绍如何使用[物化视图](/materialized-view/incremental-materialized-view)来解析日志事件。 **物化视图**的作用类似于 SQL 中的插入触发器。当数据行被插入到源表时,物化视图会对这些行进行转换,并将结果插入到目标表中。 -我们可以配置物化视图,将 **access_logs** 中的日志事件解析为结构化表示。 +我们可以配置物化视图,将 **access_logs** 中的日志事件解析为结构化表示。 下面是一个此类日志事件的示例: ```bash @@ -180,7 +174,6 @@ SELECT trim(LEADING '"' FROM '"GET') SELECT parseDateTimeBestEffort(replaceOne(trim(LEADING '[' FROM '[12/Oct/2021:15:32:43'), ':', ' ')) ``` - 现在我们可以定义物化视图了。 下面的定义包含 `POPULATE`,这意味着 **access_logs** 中的现有行将立即被处理并插入。 运行以下 SQL 语句: @@ -227,18 +220,12 @@ FROM SELECT * FROM nginxdb.access_logs_view ``` - + :::note 上述示例将数据存储在两个表中,但您可以将初始的 `nginxdb.access_logs` 表更改为使用 [`Null`](/engines/table-engines/special/null) 表引擎。 解析后的数据仍将存储在 `nginxdb.access_logs_view` 表中,但原始数据不会存储在表中。 ::: - > 通过使用 Vector(只需简单安装和快速配置),您可以将 Nginx 服务器的日志发送到 ClickHouse 表中。通过使用物化视图,您可以将这些日志解析为列,以便更轻松地进行分析。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md index 45af2f56446..bf23b97b44b 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/gcs/index.md @@ -8,13 +8,13 @@ doc_type: 'guide' keywords: ['Google Cloud Storage ClickHouse', 'GCS ClickHouse 集成', 'GCS 后端 MergeTree', 'ClickHouse GCS 存储', 'Google Cloud ClickHouse'] --- -import BucketDetails from '@site/docs/_snippets/_GCS_authentication_and_bucket.md'; +import BucketDetails from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_GCS_authentication_and_bucket.md'; import Image from '@theme/IdealImage'; import GCS_examine_bucket_1 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-1.png'; import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestion/s3/GCS-examine-bucket-2.png'; -# 将 Google Cloud Storage 与 ClickHouse 集成 +# 将 Google Cloud Storage 与 ClickHouse 集成 {#integrate-google-cloud-storage-with-clickhouse} :::note 如果您在 [Google Cloud](https://cloud.google.com) 上使用 ClickHouse Cloud,则本页内容不适用,因为您的服务已经在使用 [Google Cloud Storage](https://cloud.google.com/storage)。如果您希望从 GCS 中执行 `SELECT` 或向 GCS 中执行 `INSERT` 操作,请参阅 [`gcs` 表函数](/sql-reference/table-functions/gcs)。 @@ -24,13 +24,13 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio -## 基于 GCS 的 MergeTree +## 基于 GCS 的 MergeTree {#gcs-backed-mergetree} -### 创建磁盘 +### 创建磁盘 {#creating-a-disk} 要将 GCS 存储桶用作磁盘,首先必须在 `conf.d` 目录下的文件中,在 ClickHouse 配置中声明它。下面展示了一个 GCS 磁盘声明示例。该配置包含多个部分,用于配置 GCS “磁盘”、缓存,以及在需要在 GCS 磁盘上创建表时在 DDL 查询中指定的策略。下面分别对这些部分进行说明。 -#### Storage configuration > disks > gcs +#### Storage configuration > disks > gcs {#storage_configuration--disks--gcs} 配置中高亮显示的这部分内容表示: @@ -68,7 +68,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio ``` -#### Storage configuration > disks > cache +#### Storage configuration > disks > cache {#storage_configuration--disks--cache} 下方高亮显示的示例配置为磁盘 `gcs` 启用了 10Gi 内存缓存。 @@ -106,7 +106,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio ``` -#### Storage configuration > policies > gcs_main +#### Storage configuration > policies > gcs_main {#storage_configuration--policies--gcs_main} 存储配置中的策略用于选择数据的存放位置。下面高亮的策略通过指定策略 `gcs_main`,允许将数据存储在名为 `gcs` 的磁盘上。例如 `CREATE TABLE ... SETTINGS storage_policy='gcs_main'`。 @@ -141,7 +141,7 @@ import GCS_examine_bucket_2 from '@site/static/images/integrations/data-ingestio 与此磁盘配置相关的设置完整列表可在[此处](/engines/table-engines/mergetree-family/mergetree.md/#table_engine-mergetree-s3)中找到。 -### 创建表 +### 创建表 {#creating-a-table} 假设你已经将磁盘配置为使用具有写权限的存储桶,现在应该可以创建如下示例中的表。为简洁起见,我们只使用 NYC taxi 数据集中的部分列,并将数据直接流式写入由 GCS 作为后端存储的表中: @@ -179,11 +179,11 @@ INSERT INTO trips_gcs SELECT trip_id, pickup_date, pickup_datetime, dropoff_date SELECT passenger_count, avg(tip_amount) AS avg_tip, avg(total_amount) AS avg_amount FROM trips_gcs GROUP BY passenger_count; ``` -### 处理复制 +### 处理复制 {#handling-replication} 使用 GCS 磁盘时,可以通过 `ReplicatedMergeTree` 表引擎来实现复制。有关详细信息,请参阅[使用 GCS 在两个 GCP 区域之间复制单个分片](#gcs-multi-region)指南。 -### 了解更多 +### 了解更多 {#learn-more} [Cloud Storage XML API](https://cloud.google.com/storage/docs/xml-api/overview) 可与某些适用于 Amazon Simple Storage Service(Amazon S3)等服务的工具和库互操作。 @@ -305,13 +305,13 @@ ClickHouse Keeper 至少需要两个节点才能工作,因此为了实现高 ``` -### 配置 ClickHouse 服务器 +### 配置 ClickHouse 服务器 {#configure-clickhouse-server} :::note best practice 本指南中的某些步骤会要求你将配置文件放置在 `/etc/clickhouse-server/config.d/` 中。这是 Linux 系统上用于放置覆盖默认配置文件的默认位置。当你将这些文件放入该目录时,ClickHouse 会将其内容与默认配置进行合并。通过将这些文件放在 `config.d` 目录中,你可以在升级过程中避免丢失自己的配置。 ::: -#### 网络 +#### 网络 {#networking} 默认情况下,ClickHouse 监听回环接口;在副本部署环境中,机器之间需要进行网络通信。要监听所有接口: @@ -321,7 +321,7 @@ ClickHouse Keeper 至少需要两个节点才能工作,因此为了实现高 ``` -#### 远程 ClickHouse Keeper 服务器 +#### 远程 ClickHouse Keeper 服务器 {#remote-clickhouse-keeper-servers} 副本复制由 ClickHouse Keeper 协调完成。此配置文件通过主机名和端口号来标识 ClickHouse Keeper 节点。 @@ -346,7 +346,7 @@ ClickHouse Keeper 至少需要两个节点才能工作,因此为了实现高 ``` -#### 远程 ClickHouse 服务器 +#### 远程 ClickHouse 服务器 {#remote-clickhouse-servers} 此文件用于配置集群中每个 ClickHouse 服务器的主机名和端口。默认配置文件包含示例集群定义。为了只显示已完全配置的集群,会在 `remote_servers` 条目中添加标签 `replace="true"`,这样当此配置与默认配置合并时,会替换 `remote_servers` 部分,而不是在其基础上追加内容。 @@ -372,7 +372,7 @@ ClickHouse Keeper 至少需要两个节点才能工作,因此为了实现高 ``` -#### 副本标识 +#### 副本标识 {#replica-identification} 此文件用于配置与 ClickHouse Keeper 路径相关的设置,尤其是用于标识数据属于哪个副本的宏。在一台服务器上,应将副本指定为 `replica_1`,在另一台服务器上指定为 `replica_2`。这些名称可以修改,例如在我们的示例中,一个副本存储在南卡罗来纳州,另一个存储在北弗吉尼亚州,则可以分别命名为 `carolina` 和 `virginia`;只需确保每台机器上的名称彼此不同即可。 @@ -390,7 +390,7 @@ ClickHouse Keeper 至少需要两个节点才能工作,因此为了实现高 ``` -#### 在 GCS 中配置存储 +#### 在 GCS 中配置存储 {#storage-in-gcs} ClickHouse 的存储配置包括 `disks` 和 `policies`。下面配置的磁盘名为 `gcs`,其 `type` 为 `s3`。之所以使用 s3 类型,是因为 ClickHouse 访问 GCS bucket 的方式与访问 AWS S3 bucket 相同。此配置需要准备两份,分别应用于两个 ClickHouse 服务器节点。 @@ -438,7 +438,7 @@ ClickHouse 的存储配置包括 `disks` 和 `policies`。下面配置的磁盘 ``` -### 启动 ClickHouse Keeper +### 启动 ClickHouse Keeper {#start-clickhouse-keeper} 根据所使用的操作系统运行相应的命令,例如: @@ -448,7 +448,7 @@ sudo systemctl start clickhouse-keeper sudo systemctl status clickhouse-keeper ``` -#### 检查 ClickHouse Keeper 状态 +#### 检查 ClickHouse Keeper 状态 {#check-clickhouse-keeper-status} 通过 `netcat` 向 ClickHouse Keeper 发送命令。例如,`mntr` 会返回 ClickHouse Keeper 集群的状态。如果你在每个 Keeper 节点上执行该命令,你会看到其中一个是 leader,另外两个是 follower: @@ -464,11 +464,11 @@ zk_max_latency 11 zk_min_latency 0 zk_packets_received 1783 zk_packets_sent 1783 -# highlight-start +# highlight-start {#highlight-start} zk_num_alive_connections 2 zk_outstanding_requests 0 zk_server_state leader -# highlight-end +# highlight-end {#highlight-end} zk_znode_count 135 zk_watch_count 8 zk_ephemerals_count 3 @@ -477,13 +477,13 @@ zk_key_arena_size 28672 zk_latest_snapshot_size 0 zk_open_file_descriptor_count 182 zk_max_file_descriptor_count 18446744073709551615 -# highlight-start +# highlight-start {#highlight-start} zk_followers 2 zk_synced_followers 2 -# highlight-end +# highlight-end {#highlight-end} ``` -### 启动 ClickHouse 服务器 +### 启动 ClickHouse 服务器 {#start-clickhouse-server} 在 `chnode1` 和 `chnode` 上运行: @@ -495,9 +495,9 @@ sudo service clickhouse-server start sudo service clickhouse-server status ``` -### 验证 +### 验证 {#verification} -#### 验证磁盘配置 +#### 验证磁盘配置 {#verify-disk-configuration} `system.disks` 中应包含每个磁盘对应的一条记录: @@ -565,7 +565,7 @@ cache_path: 3 行数据,耗时 0.002 秒。 ```` -#### 验证在集群上创建的表已在两个节点上创建 +#### 验证在集群上创建的表已在两个节点上创建 {#verify-that-tables-created-on-the-cluster-are-created-on-both-nodes} ```sql -- highlight-next-line create table trips on cluster 'cluster_1S_2R' ( @@ -600,7 +600,7 @@ SETTINGS storage_policy='gcs_main' 2 rows in set. Elapsed: 0.641 sec. ``` -#### 验证数据能否插入 +#### 验证数据能否插入 {#verify-that-data-can-be-inserted} ```sql INSERT INTO trips SELECT @@ -621,7 +621,7 @@ FROM s3('https://ch-nyc-taxi.s3.eu-west-3.amazonaws.com/tsv/trips_{0..9}.tsv.gz' LIMIT 1000000 ``` -#### 验证该表是否使用了存储策略 `gcs_main`。 +#### 验证该表是否使用了存储策略 `gcs_main`。 {#verify-that-the-storage-policy-gcs_main-is-used-for-the-table} ```sql SELECT @@ -647,14 +647,14 @@ formatReadableSize(total_bytes): 36.42 MiB 返回 1 行。用时:0.002 秒。 ``` -#### 在 Google Cloud 控制台中验证 +#### 在 Google Cloud 控制台中验证 {#verify-in-google-cloud-console} 查看这些 bucket,你会发现每个 bucket 中都创建了一个文件夹,文件夹名称与 `storage.xml` 配置文件中使用的名称相同。展开这些文件夹,你会看到许多文件,对应各个数据分区。 -#### 副本一的 Bucket +#### 副本一的 Bucket {#bucket-for-replica-one} -#### 副本二的 Bucket +#### 副本二的 Bucket {#bucket-for-replica-two} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md index 93aaf4a8927..1e20936a9ce 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/dataflow.md @@ -11,7 +11,7 @@ keywords: ['Google Dataflow ClickHouse', 'Dataflow ClickHouse integration', 'Apa import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# 将 Google Dataflow 与 ClickHouse 集成 +# 将 Google Dataflow 与 ClickHouse 集成 {#integrating-google-dataflow-with-clickhouse} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md index 526ce4ae60b..efd68be8a6e 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/java-runner.md @@ -11,7 +11,7 @@ keywords: ['Dataflow Java Runner', 'Google Dataflow ClickHouse', 'Apache Beam Ja import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Dataflow Java 运行器 +# Dataflow Java 运行器 {#dataflow-java-runner} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md index 636f1d19107..12e84e30270 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates.md @@ -11,7 +11,7 @@ keywords: ['Google Dataflow', 'GCP', '数据管道', '模板', '批处理'] import ClickHouseSupportedBadge from '@theme/badges/ClickHouseSupported'; -# Google Dataflow 模板 +# Google Dataflow 模板 {#google-dataflow-templates} diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md index 8ae6a40e99b..80defca71f1 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/google-dataflow/templates/bigquery-to-clickhouse.md @@ -19,7 +19,7 @@ import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; -# Dataflow BigQuery 到 ClickHouse 模板 +# Dataflow BigQuery 到 ClickHouse 模板 {#dataflow-bigquery-to-clickhouse-template} BigQuery 到 ClickHouse 模板是一个批处理管道,用于将 BigQuery 表中的数据摄取到 ClickHouse 表中。 该模板可以读取整个表,或使用提供的 SQL 查询筛选特定记录。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md index 8662a276f66..62dee8a883a 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/insert-local-files.md @@ -9,7 +9,7 @@ doc_type: 'guide' keywords: ['插入本地文件 ClickHouse', 'ClickHouse 本地文件导入', 'clickhouse-client 文件上传'] --- -# 插入本地文件 +# 插入本地文件 {#insert-local-files} 你可以使用 `clickhouse-client` 将本地文件以流方式导入到你的 ClickHouse 服务中。这样你就可以在插入前利用众多强大且便捷的 ClickHouse 函数对数据进行预处理。下面来看一个示例…… @@ -79,7 +79,6 @@ LIMIT 7 结果如下: - ```response │ 488 │ comment │ mynameishere │ 2007-02-22 14:48:18 │ "It's too bad. Javascript-in-the-browser and Ajax are both nasty hacks that force programmers to do all sorts of shameful things. And the result is--wanky html tricks. Java, for its faults, is fairly clean when run in the applet environment. It has every superiority over JITBAJAX, except for install issues and a chunky load process. Yahoo games seems like just about the only applet success story. Of course, back in the day, non-trivial Applets tended to be too large for the dial-up accounts people had. At least that is changed." │ [454927] │ ['It','s','too','bad','Javascript','in','the','browser','and','Ajax','are','both','nasty','hacks','that','force','programmers','to','do','all','sorts','of','shameful','things','And','the','result','is','wanky','html','tricks','Java','for','its','faults','is','fairly','clean','when','run','in','the','applet','environment','It','has','every','superiority','over','JITBAJAX','except','for','install','issues','and','a','chunky','load','process','Yahoo','games','seems','like','just','about','the','only','applet','success','story','Of','course','back','in','the','day','non','trivial','Applets','tended','to','be','too','large','for','the','dial','up','accounts','people','had','At','least','that','is','changed'] │ │ 575 │ comment │ leoc │ 2007-02-23 00:09:49 │ "I can't find the reference now, but I *think* I've just read something suggesting that the install process for an Apollo applet will involve an "install-this-application?" confirmation dialog followed by a download of 30 seconds or so. If so then Apollo's less promising than I hoped. That kind of install may be low-friction by desktop-app standards but it doesn't compare to the ease of starting a browser-based AJAX or Flash application. (Consider how easy it is to use maps.google.com for the first time.)

Surely it will at least be that Apollo applications will run untrusted by default, and that an already-installed app will start automatically whenever you take your browser to the URL you downloaded it from?" │ [455071] │ ['I','can','t','find','the','reference','now','but','I','think','I','ve','just','read','something','suggesting','that','the','install','process','for','an','Apollo','applet','will','involve','an','34','install','this','application','34','confirmation','dialog','followed','by','a','download','of','30','seconds','or','so','If','so','then','Apollo','s','less','promising','than','I','hoped','That','kind','of','install','may','be','low','friction','by','desktop','app','standards','but','it','doesn','t','compare','to','the','ease','of','starting','a','browser','based','AJAX','or','Flash','application','Consider','how','easy','it','is','to','use','maps','google','com','for','the','first','time','p','Surely','it','will','at','least','be','that','Apollo','applications','will','run','untrusted','by','default','and','that','an','already','installed','app','will','start','automatically','whenever','you','take','your','browser','to','the','URL','you','downloaded','it','from'] │ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md index aa96e925a0c..b74dde6ea29 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/integrations/data-ingestion/kafka/confluent/confluent-cloud.md @@ -12,11 +12,11 @@ integration: - website: 'https://clickhouse.com/cloud/clickpipes' --- -import ConnectionDetails from '@site/docs/_snippets/_gather_your_details_http.mdx'; +import ConnectionDetails from '@site/i18n/zh/docusaurus-plugin-content-docs/current/_snippets/_gather_your_details_http.mdx'; import Image from '@theme/IdealImage'; -# 将 Confluent Cloud 与 ClickHouse 集成 +# 将 Confluent Cloud 与 ClickHouse 集成 {#integrating-confluent-cloud-with-clickhouse}

\ No newline at end of file +