Merge branch 'master' into sparsity-filter-trivial-count

This commit is contained in:
Raúl Marín
2026-07-07 17:14:27 +02:00
committed by GitHub
484 changed files with 15203 additions and 6479 deletions
+1
View File
@@ -103,6 +103,7 @@ WHAT TO REVIEW VS WHAT TO IGNORE
**Documentation:**
- Structured ClickHouse surfaces are documented from source registrations: SQL functions and aggregate functions (`FunctionDocumentation`), settings (`DECLARE` doc strings), table functions, table engines, formats, system tables, and similar components. Do not ask for a separate `docs/` page when this source-level documentation is present and adequate.
- Flag documentation only when source-level structured docs are missing or weak, or when the change needs non-structured user guidance that belongs under `docs/` (guides, tutorials, architecture, operations/admin, integrations).
- Documentation updates in the /docs directory should be made only to the files in /docs/en. These are used to build the current Docusaurus site. Other files in this repository will be used to build the documentation on Mintlify, but should not be edited yet. Do not flag a PR for editing only `/docs/en` and not the Mintlify files.
**Explicitly ignore (do not comment on these unless they indicate a bug):**
- Pure formatting (whitespace, brace style, minor naming preferences).
+45 -32
View File
@@ -372,18 +372,14 @@ struct integer<Bits, Signed>::_impl
self.items[little(0)] = _impl::to_Integral(rhs);
/// Sign-extend with a value select instead of a branch: a data-dependent branch here
/// mispredicts on mixed-sign data and prevents vectorization of columnar conversion loops.
base_type extension = 0;
if constexpr (std::is_signed_v<Integral>)
{
if (rhs < 0)
{
for (unsigned i = 1; i < item_count; ++i)
self.items[little(i)] = -1;
return;
}
}
extension = rhs < 0 ? base_type(-1) : base_type(0);
for (unsigned i = 1; i < item_count; ++i)
self.items[little(i)] = 0;
self.items[little(i)] = extension;
}
template <typename TupleLike, size_t i = 0>
@@ -531,18 +527,13 @@ struct integer<Bits, Signed>::_impl
if constexpr (Bits > Bits2)
{
/// See the rationale in wide_integer_from_builtin.
base_type extension = 0;
if constexpr (std::is_signed_v<Signed2>)
{
if (rhs < 0)
{
for (unsigned i = to_copy; i < item_count; ++i)
self.items[little(i)] = -1;
return;
}
}
extension = rhs < 0 ? base_type(-1) : base_type(0);
for (unsigned i = to_copy; i < item_count; ++i)
self.items[little(i)] = 0;
self.items[little(i)] = extension;
}
}
@@ -933,19 +924,31 @@ public:
{
if constexpr (should_keep_size<T>())
{
if (std::numeric_limits<T>::is_signed && (is_negative(lhs) != is_negative(rhs)))
return is_negative(rhs);
integer<Bits, Signed> t = rhs;
for (unsigned i = 0; i < item_count; ++i)
/// Branchless lexicographic comparison from the most significant limb: no early-out, so the
/// columnar comparison kernels stay branchless and vectorize (e.g. to AVX-512 vpcmpq). The top
/// limb is compared as signed for signed types, which subsumes the sign check; lower limbs unsigned.
base_type lhs_top = lhs.items[big(0)];
base_type rhs_top = get_item(t, big(0));
bool greater;
if constexpr (std::is_same_v<Signed, signed>)
greater = static_cast<signed_base_type>(lhs_top) > static_cast<signed_base_type>(rhs_top);
else
greater = lhs_top > rhs_top;
bool equal = lhs_top == rhs_top;
for (unsigned i = 1; i < item_count; ++i)
{
base_type lhs_item = lhs.items[big(i)];
base_type rhs_item = get_item(t, big(i));
if (lhs.items[big(i)] != rhs_item)
return lhs.items[big(i)] > rhs_item;
greater = greater | (equal & (lhs_item > rhs_item));
equal = equal & (lhs_item == rhs_item);
}
return false;
return greater;
}
else
{
@@ -959,19 +962,29 @@ public:
{
if constexpr (should_keep_size<T>())
{
if (std::numeric_limits<T>::is_signed && (is_negative(lhs) != is_negative(rhs)))
return is_negative(lhs);
integer<Bits, Signed> t = rhs;
for (unsigned i = 0; i < item_count; ++i)
/// See the rationale in operator_greater.
base_type lhs_top = lhs.items[big(0)];
base_type rhs_top = get_item(t, big(0));
bool less;
if constexpr (std::is_same_v<Signed, signed>)
less = static_cast<signed_base_type>(lhs_top) < static_cast<signed_base_type>(rhs_top);
else
less = lhs_top < rhs_top;
bool equal = lhs_top == rhs_top;
for (unsigned i = 1; i < item_count; ++i)
{
base_type lhs_item = lhs.items[big(i)];
base_type rhs_item = get_item(t, big(i));
if (lhs.items[big(i)] != rhs_item)
return lhs.items[big(i)] < rhs_item;
less = less | (equal & (lhs_item < rhs_item));
equal = equal & (lhs_item == rhs_item);
}
return false;
return less;
}
else
{
@@ -25,6 +25,18 @@
a false-positive oracle mismatch. (`IS TRUE` itself is only accepted since
https://github.com/ClickHouse/ClickHouse/pull/99997; before that the
unpatched oracle was a guaranteed `SYNTAX_ERROR`.)
4. Stop `GeneralQueryPartitioningWhere.check` from turning an `IgnoreMeException`
into an `AssertionError`. When the WHERE-stripped baseline query hits an
expected (whitelisted) error, `ComparatorHelper.getResultSetFirstColumnAsString`
sees a `null` result set and throws `IgnoreMeException` - a "skip this
iteration" control-flow signal, not a bug. The upstream oracle catches it in
`catch (Exception e)` and, for simple queries (no joins, <= 2 tables),
re-throws it as `AssertionError: null` ("You probably triggered an error in
the DBMS ..."). Against ClickHouse that fires constantly, so the WHERE oracle
(and the QUERY_PARTITIONING composite, which contains it) is a guaranteed
false-positive failure. Let the `IgnoreMeException` propagate instead; genuine
unexpected errors (a re-thrown `SQLException`, or an `AssertionError` with a
message) are unaffected and still reported.
"""
import argparse
@@ -105,6 +117,39 @@ def patch_norec_oracle(repo: pathlib.Path) -> None:
src.write_text(text.replace(old_postfix, new_postfix))
def patch_where_oracle(repo: pathlib.Path) -> None:
src = (
repo / "src" / "sqlancer" / "general" / "oracle"
/ "GeneralQueryPartitioningWhere.java"
)
text = src.read_text()
# The baseline (WHERE-stripped) query's catch block escalates any exception
# to an AssertionError for simple queries. An IgnoreMeException here is the
# benign "expected error, skip this iteration" signal and must propagate
# instead - otherwise every whitelisted error on a simple select becomes a
# false-positive `AssertionError: null`.
anchor = (
" } catch (Exception e) {\n"
" if (select.getJoinList().size() == 0 && select.getFromList().size() <= 2) {\n"
)
replacement = (
" } catch (Exception e) {\n"
" // ClickHouse patch: an IgnoreMeException means the baseline query hit an\n"
" // expected/whitelisted error and was skipped (null result set); it is a\n"
" // skip-this-iteration signal, not a DBMS bug, so propagate it instead of\n"
" // escalating it into a false-positive AssertionError below.\n"
" if (e instanceof sqlancer.IgnoreMeException) {\n"
" throw e;\n"
" }\n"
" if (select.getJoinList().size() == 0 && select.getFromList().size() <= 2) {\n"
)
if anchor not in text:
sys.exit(f"failed to locate the WHERE-oracle catch block in {src}")
if text.count(anchor) != 1:
sys.exit(f"expected exactly one WHERE-oracle catch block in {src}")
src.write_text(text.replace(anchor, replacement))
def main() -> None:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("repo", help="Path to the SQLancer++ checkout")
@@ -122,6 +167,7 @@ def main() -> None:
patch_pom(repo, version)
patch_jdbc_properties(repo)
patch_norec_oracle(repo)
patch_where_oracle(repo)
if __name__ == "__main__":
+1 -41
View File
@@ -1,11 +1,7 @@
import argparse
from ci.jobs.scripts.docs.check_readonly_copies import check_readonly_copies
from ci.jobs.scripts.docs.mintlify_docs_check import (
DEFAULT_CHECKS,
LOCALE_CHECKS,
QUICKSTARTS_CHECK,
)
from ci.jobs.scripts.docs.mintlify_docs_check import DEFAULT_CHECKS, LOCALE_CHECKS
from ci.praktika.info import Info
from ci.praktika.result import Result
from ci.praktika.utils import Utils
@@ -30,20 +26,6 @@ LOCALE_CHECK_TRIGGERS = tuple(f"docs/{d}/" for d in LOCALE_DIRS) + (
"docs/_site/redirects.json",
)
# The quickstarts check (frontmatter tags + generated explorer data freshness)
# runs only when a PR touches a quickstarts tree, the generated data modules,
# the generator, or the checker itself.
QUICKSTARTS_CHECK_TRIGGERS = (
("docs/get-started/quickstarts/",)
+ tuple(f"docs/{d}/get-started/quickstarts/" for d in LOCALE_DIRS)
+ ("docs/snippets/components/QuickStartsGrid/",)
+ tuple(f"docs/snippets/{d}/components/QuickStartsGrid/" for d in LOCALE_DIRS)
+ (
"docs/_site/scripts/update_quickstarts.py",
"ci/jobs/scripts/docs/quickstarts_check.py",
)
)
def parse_args():
parser = argparse.ArgumentParser(description="Mintlify Docs Check Job")
@@ -61,16 +43,6 @@ def _locale_check_should_run():
return any(f.startswith(LOCALE_CHECK_TRIGGERS) for f in changed_files)
def _quickstarts_check_should_run():
# Same gating idea as the locale checks: run only when the PR touches the
# quickstarts content or its tooling; fail open toward coverage when the
# changed-file list is unavailable.
changed_files = Info().get_changed_files()
if changed_files is None:
return True
return any(f.startswith(QUICKSTARTS_CHECK_TRIGGERS) for f in changed_files)
def _readonly_copies_guard():
# One-way sync: fail edits to docs folders whose canonical source lives in
# another repo (declared in ci/jobs/scripts/docs/readonly_copies.json). This
@@ -119,18 +91,6 @@ if __name__ == "__main__":
)
)
# Quickstarts check: blocking, but only when the PR touches the quickstarts
# trees or their tooling. Validates frontmatter tags and fails when the
# generated explorer data was not regenerated and committed.
if _quickstarts_check_should_run():
qs_name, qs_command = QUICKSTARTS_CHECK
if selected(qs_name):
results.append(
Result.from_commands_run(
name=qs_name, command=qs_command, workdir=docs_dir
)
)
# The read-only guard runs from the repo root (not the docs root), so keep
# it out of the docs_dir loop above.
if selected("No direct edits to read-only copied docs"):
+26 -14
View File
@@ -23,7 +23,9 @@ the full set (``DEFAULT_CHECKS`` plus, when a locale tree changed,
``LOCALE_CHECKS``); this client driver runs only ``CLIENT_CHECKS`` -- the checks
a consuming repo can act on for the slice it owns (validate + internal links).
Redirects, external links, and the locale checks are aggregator-global and are
left to the aggregator job.
left to the aggregator job. With ``--scoped``, ``mint validate`` is replaced by
``scoped_validate.mjs`` over the replaced folders plus every out-of-scope file
that imports into them.
A check can be any shell command, including ``python3 <script>``. Checks run
from the docs root, so a Python check script committed at
@@ -74,6 +76,16 @@ DEFAULT_CHECKS = [
# trees), so the client driver does not run them.
CLIENT_CHECKS = [VALIDATE_CHECK, INTERNAL_LINKS_CHECK]
# Swaps the full `mint validate` (which MDX-parses the whole site, ~13 minutes)
# for scoped_validate.mjs over just the replaced folders -- see that script's
# header for what it covers.
def scoped_validate_check(scopes):
command = "node ../ci/jobs/scripts/docs/scoped_validate.mjs " + " ".join(
f"--scope {shlex.quote(scope)}" for scope in scopes
)
return ("Validate docs.json and the replaced folders (scoped)", command + " .")
# Locale-only checks, kept out of DEFAULT_CHECKS: the Praktika job runs them only
# when a PR touches the locale folders (top-level or snippets/<locale>/) -- they
# are large and change independently via the GT translation bot. The client
@@ -92,18 +104,6 @@ LOCALE_COMPONENTS_CHECK = (
)
LOCALE_CHECKS = [LOCALE_LINKS_CHECK, LOCALE_COMPONENTS_CHECK]
# Quickstarts-only check, kept out of DEFAULT_CHECKS: the Praktika job runs it
# only when a PR touches the quickstarts trees, the generator, or the checker.
# Validates the quickstart pages' `useCases`/`products` frontmatter against the
# allowed tag sets and fails if the generated explorer data
# (snippets/[<locale>/]components/QuickStartsGrid/quickstarts-data.jsx and the
# in-page badge blocks) was not regenerated and committed after a frontmatter
# change. Authoring guide: docs/get-started/quickstarts/README.md.
QUICKSTARTS_CHECK = (
"Check quickstarts",
"python3 ../ci/jobs/scripts/docs/quickstarts_check.py .",
)
def run(cmd, **kw):
print("+ " + " ".join(shlex.quote(c) for c in cmd), flush=True)
@@ -184,9 +184,16 @@ def main(argv=None):
p.add_argument("--replace", action="append", default=[], metavar="SRC:DEST",
help="Replace DEST (relative to docs root) with the local folder "
"SRC, wiping DEST first; repeatable.")
p.add_argument("--scoped", action="store_true",
help="Validate only the --replace destinations instead of running "
"the full (slow) `mint validate` over the whole site. "
"Requires at least one --replace.")
p.add_argument("--workdir", help="Where to clone (default: a temp dir).")
args = p.parse_args(argv)
if args.scoped and not args.replace:
p.error("--scoped requires at least one --replace")
base = args.workdir or tempfile.mkdtemp(prefix="docs-check-")
clone_dir = os.path.abspath(os.path.join(base, "aggregator"))
sparse = args.sparse or [args.docs_root, "ci/jobs/scripts/docs"]
@@ -196,18 +203,23 @@ def main(argv=None):
if not os.path.isfile(os.path.join(docs_root, "docs.json")):
raise FileNotFoundError(f"No docs.json in docs root: {docs_root}")
replace_dests = []
for spec in args.replace:
parts = spec.split(":")
if len(parts) != 2:
raise ValueError(f"Invalid --replace '{spec}'. Expected SRC:DEST.")
replace(parts[0], resolve_replace_dest(docs_root, parts[1]))
replace_dests.append(parts[1])
# A consuming client repo owns only its docs slice, so it runs just the
# checks it can act on (see CLIENT_CHECKS): validate + internal links. The
# aggregator-global checks -- redirects, external links, and the locale
# checks -- are run by the aggregator's own Praktika job, not here.
checks = list(CLIENT_CHECKS)
if args.scoped:
checks[0] = scoped_validate_check(replace_dests)
results = [(name, run_check(docs_root, name, command))
for name, command in CLIENT_CHECKS]
for name, command in checks]
print("\n=== Summary ===", flush=True)
for name, ok in results:
-199
View File
@@ -1,199 +0,0 @@
#!/usr/bin/env python3
"""
Validate the quickstart pages and the generated explorer data.
Run from the docs root (the directory containing docs.json):
python3 ../ci/jobs/scripts/docs/quickstarts_check.py .
Two checks (see docs/get-started/quickstarts/README.md for the authoring
guide):
1. Frontmatter tags and badge markers. Every English quickstart page must
declare `products` (exactly one of ALLOWED_PRODUCTS) and `useCases` (one
or more of ALLOWED_USE_CASES). The QuickStartsGrid explorer filters match
on slugs derived from these values, so an unknown value produces a card
that no filter can find. Every page must also contain the
`AUTOGENERATED_START`/`AUTOGENERATED_END` marker pair: the generator
rewrites the badge block between them, so a page without markers keeps
stale badges that the freshness check below cannot detect.
2. Generated data freshness. The explorer card data
(snippets/[<locale>/]components/QuickStartsGrid/quickstarts-data.jsx) and
the badge blocks on the English pages are produced by
_site/scripts/update_quickstarts.py from the page frontmatter. This check
runs the generator and fails if it changes anything — meaning the PR
author edited a quickstart without re-running the generator and committing
its output. The working tree is restored afterwards; the failure message
names the exact command to run.
"""
import re
import subprocess
import sys
from pathlib import Path
ALLOWED_USE_CASES = [
"All",
"Real-time analytics",
"Data warehousing",
"Observability",
"AI/ML",
]
ALLOWED_PRODUCTS = [
"Cloud",
"OSS",
"ClickPipes",
"Language clients",
"ClickStack",
"chDB",
]
SKIP_FILES = {"home.mdx", "README.md"}
# The badge block the generator rewrites, same pattern as
# update_quickstart_badges in _site/scripts/update_quickstarts.py.
AUTOGENERATED_BLOCK = re.compile(
r"\{/\* AUTOGENERATED_START \*/\}.*?\{/\* AUTOGENERATED_END \*/\}", re.DOTALL
)
def parse_tag_list(frontmatter: str, key: str):
"""Return the list value of `key: [a, b]` from frontmatter, or None."""
m = re.search(rf"^{key}:\s*\[(.*?)\]\s*$", frontmatter, re.M)
if not m:
return None
return [v.strip().strip("'\"") for v in m.group(1).split(",") if v.strip()]
def quickstart_pages(docs_root: Path):
qs_dir = docs_root / "get-started" / "quickstarts"
for p in sorted(qs_dir.glob("*.mdx")) + sorted(qs_dir.glob("*.md")):
# underscore-prefixed files are templates (e.g. _TEMPLATE.mdx), not pages
if p.name in SKIP_FILES or p.name.startswith("_"):
continue
yield p
def check_frontmatter(docs_root: Path) -> list:
errors = []
for page in quickstart_pages(docs_root):
src = page.read_text(encoding="utf-8")
m = re.match(r"^---\n(.*?)\n---\n", src, re.DOTALL)
if not m:
errors.append(f"{page.name}: no frontmatter block")
continue
fm = m.group(1)
products = parse_tag_list(fm, "products")
if products is None:
errors.append(f"{page.name}: missing `products` frontmatter")
elif len(products) != 1:
errors.append(
f"{page.name}: `products` must contain exactly one value, "
f"got {products}"
)
elif products[0] not in ALLOWED_PRODUCTS:
errors.append(
f"{page.name}: unknown product {products[0]!r} "
f"(allowed: {', '.join(ALLOWED_PRODUCTS)})"
)
use_cases = parse_tag_list(fm, "useCases")
if not use_cases:
errors.append(f"{page.name}: missing or empty `useCases` frontmatter")
else:
for uc in use_cases:
if uc not in ALLOWED_USE_CASES:
errors.append(
f"{page.name}: unknown use case {uc!r} "
f"(allowed: {', '.join(ALLOWED_USE_CASES)})"
)
if not AUTOGENERATED_BLOCK.search(src):
errors.append(
f"{page.name}: missing the "
"`{/* AUTOGENERATED_START */}`/`{/* AUTOGENERATED_END */}` "
"marker pair; the generator rewrites the badge block between "
"them, so without markers the page keeps stale badges (copy "
"the block from _TEMPLATE.mdx)"
)
return errors
def generated_paths(docs_root: Path) -> list:
"""Every file the generator may rewrite."""
paths = list(quickstart_pages(docs_root)) # badge blocks on English pages
paths += sorted(docs_root.glob("snippets/components/QuickStartsGrid/quickstarts-data.jsx"))
paths += sorted(docs_root.glob("snippets/*/components/QuickStartsGrid/quickstarts-data.jsx"))
return paths
GENERATOR_COMMAND = "python3 _site/scripts/update_quickstarts.py"
def check_freshness(docs_root: Path) -> list:
generator = docs_root / "_site" / "scripts" / "update_quickstarts.py"
# Snapshot the content of everything the generator may rewrite, so the
# working tree can be restored to exactly its pre-check state.
before = {p: p.read_bytes() for p in generated_paths(docs_root)}
proc = subprocess.run(
[sys.executable, str(generator)],
capture_output=True,
text=True,
)
after = generated_paths(docs_root)
stale = [p for p in after if before.get(p) != p.read_bytes()]
# Restore the tree: rewrite changed files, drop files the generator created.
# This must happen even when the generator failed — it may have rewritten
# some files before hitting the error.
for p in stale:
if p in before:
p.write_bytes(before[p])
else:
p.unlink()
if proc.returncode != 0:
return [
f"generator failed with exit code {proc.returncode}:\n"
f"{proc.stdout[-2000:]}\n{proc.stderr[-2000:]}"
]
if stale:
listing = "\n".join(f" {p.relative_to(docs_root)}" for p in stale)
return [
"the quickstarts index is not up to date, please run:\n"
f" {GENERATOR_COMMAND}\n"
"from the docs/ directory and commit the changes, or ask a "
"maintainer to help update it for you "
"(see get-started/quickstarts/README.md). Out-of-date files:\n"
+ listing
]
return []
def main() -> int:
docs_root = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
if not (docs_root / "docs.json").is_file():
print(f"Error: no docs.json in {docs_root}; pass the docs root.")
return 2
errors = check_frontmatter(docs_root)
# Only bother running the generator when the tags are valid — invalid tags
# would just produce garbage slugs in the regenerated data.
if not errors:
errors += check_freshness(docs_root)
if errors:
print(f"FAIL: {len(errors)} quickstart problem(s):")
for e in errors:
print(f"- {e}")
return 1
print("OK: quickstart frontmatter valid, generated data up to date")
return 0
if __name__ == "__main__":
sys.exit(main())
+354
View File
@@ -0,0 +1,354 @@
#!/usr/bin/env node
// Scoped replacement for `mint validate`, for client repos that own one slice
// of the aggregated docs site (e.g. clickhouse-connect owns
// integrations/language-clients/python). Full validate MDX-parses every page
// of the site (~13 minutes, single-threaded); this checks only what a client
// PR can break, in seconds:
//
// 1. docs.json passes Mintlify's schema validation.
// 2. Navigation entries pointing into the slice resolve to files.
// 3. Every page inside the slice parses (via Mintlify's own `createPage`,
// so the errors match what `mint validate` would print).
// 4. Every snippet file inside the slice parses, whether or not anything
// imports it -- full prebuild parses all snippet files unconditionally,
// so a slice of shared components (e.g. snippets/<something>) is covered
// even when no in-scope page imports them.
// 5. Imports resolve, via Mintlify's own import pipeline
// (`findAndRemoveImports` + `resolveAllImports`): path validity, file
// existence, and named-export resolution, followed transitively through
// imported snippets. This runs for the in-scope pages AND for every
// out-of-scope file whose imports (transitively) reach into the slice --
// the reverse dependency closure over the site-wide import map that
// Mintlify's `categorizeFilePaths` builds -- so deleting an in-scope file
// or removing an export that an out-of-scope page imports still fails.
// Out-of-scope pages are not themselves re-validated (their content is
// not changed by the replacement; any parse error there is pre-existing
// aggregator breakage the client cannot fix), only their imports are.
//
// Site-wide link/anchor integrity is left to the lychee check that runs
// alongside, and the aggregator's own CI still runs the full validate.
//
// Usage: node scoped_validate.mjs --scope <dir-relative-to-docs-root> [--scope ...] [docs-root]
// MINT_PACKAGES_DIR overrides package resolution (for testing outside the docs image).
import { execFileSync } from 'node:child_process';
import { existsSync } from 'node:fs';
import { readFile } from 'node:fs/promises';
import { createRequire } from 'node:module';
import { extname, isAbsolute, join, relative, resolve, sep } from 'node:path';
import { pathToFileURL } from 'node:url';
// The Mintlify packages come from the `mint` CLI installed globally in the
// docs image (`npm install -g mint` flattens them under
// <npm root -g>/mint/node_modules), so they cannot drift from the version the
// full check uses. They have plain `main` entries, no `exports` maps, so
// createRequire resolution works.
function importMintlifyPackage(name)
{
const candidates = [];
if (process.env.MINT_PACKAGES_DIR)
candidates.push(process.env.MINT_PACKAGES_DIR);
try
{
const npmRoot = execFileSync('npm', ['root', '-g'], { encoding: 'utf8' }).trim();
candidates.push(join(npmRoot, 'mint', 'node_modules'));
candidates.push(npmRoot);
}
catch
{
}
for (const dir of candidates)
{
try
{
const resolved = createRequire(join(dir, 'noop.js')).resolve(name);
return import(pathToFileURL(resolved).href);
}
catch
{
}
}
throw new Error(
`Cannot resolve ${name}. Expected a global \`mint\` install ` +
`(npm install -g mint) or MINT_PACKAGES_DIR pointing at a node_modules ` +
`directory that contains it. Tried: ${candidates.join(', ') || '(nothing)'}`);
}
function parseArgs(argv)
{
const scopes = [];
let docsRoot = '.';
for (let i = 0; i < argv.length; i++)
{
if (argv[i] === '--scope')
{
const value = argv[++i];
if (!value)
throw new Error('--scope requires a value');
scopes.push(value.replace(/^\/+|\/+$/g, ''));
}
else
{
docsRoot = argv[i];
}
}
if (scopes.length === 0)
throw new Error('At least one --scope is required');
return { scopes, docsRoot: resolve(docsRoot) };
}
// Collect page references (strings in `pages` arrays and `root` keys) from the
// navigation. Subtrees with an `openapi` key are skipped: their page strings
// can refer to pages generated from the spec, which have no source file.
function collectNavPages(node, acc)
{
if (typeof node === 'string')
{
acc.push(node);
return;
}
if (Array.isArray(node))
{
for (const item of node)
collectNavPages(item, acc);
return;
}
if (node && typeof node === 'object')
{
if ('openapi' in node)
return;
for (const [key, value] of Object.entries(node))
{
if (key === 'pages' || key === 'root')
collectNavPages(value, acc);
else if (typeof value === 'object' && value !== null)
collectNavPages(value, acc);
}
}
}
// Case-insensitive, because it must also classify entries of Mintlify's
// fileImportsMap, whose keys and values are lowercased paths.
function isInScope(pagePath, lowerScopes)
{
const cleaned = pagePath.toLowerCase().replace(/^\/+/, '');
return lowerScopes.some(scope => cleaned === scope || cleaned.startsWith(scope + '/'));
}
function navEntryExists(docsRoot, page)
{
const cleaned = page.replace(/^\/+/, '');
return ['.mdx', '.md'].some(ext => existsSync(join(docsRoot, cleaned + ext)));
}
async function main()
{
const { scopes, docsRoot } = parseArgs(process.argv.slice(2));
const lowerScopes = scopes.map(scope => scope.toLowerCase());
const errors = [];
const docsJsonPath = join(docsRoot, 'docs.json');
if (!existsSync(docsJsonPath))
throw new Error(`No docs.json in docs root: ${docsRoot}`);
const [{ validateDocsConfig }, prebuild, common] = await Promise.all([
importMintlifyPackage('@mintlify/validation'),
importMintlifyPackage('@mintlify/prebuild'),
importMintlifyPackage('@mintlify/common'),
]);
const { categorizeFilePaths, createPage, getConfigObj, getMintIgnore, preparseMdxTree } = prebuild;
const { findAndRemoveImports, hasImports, resolveAllImports, resolveImportPath,
isSnippetExtension, topologicalSort } = common;
// getConfigObj resolves `$ref` includes (the redirects map, per-slice
// navigation fragments) before the schema sees the config.
const docsConfig = await getConfigObj(docsRoot, 'docs');
const configResult = validateDocsConfig(docsConfig);
if (!configResult.success)
{
for (const issue of configResult.error.issues)
errors.push(`docs.json: ${issue.path.join('.')}: ${issue.message}`);
}
const navPages = [];
collectNavPages(docsConfig.navigation, navPages);
const scopedNavPages = navPages.filter(page => isInScope(page, lowerScopes));
for (const page of scopedNavPages)
{
if (!navEntryExists(docsRoot, page))
errors.push(
`docs.json navigation references "${page}" but no such page exists ` +
`under the scope (looked for ${page}.mdx and ${page}.md)`);
}
for (const scope of scopes)
{
if (isAbsolute(scope) || relative(docsRoot, join(docsRoot, scope)).startsWith('..' + sep))
throw new Error(`--scope must be a relative path inside the docs root: ${scope}`);
if (!existsSync(join(docsRoot, scope)))
errors.push(`Scope directory does not exist in the docs root: ${scope}`);
}
// The same site-wide scan full prebuild starts with: classifies every file
// (page vs snippet, .mintignore-aware) and extracts every file's import
// targets with a cheap line scan (lazyPages), no MDX parsing. All paths it
// returns are docs-root-relative with a leading slash; fileImportsMap keys
// and values are additionally lowercased.
const mintIgnore = await getMintIgnore(docsRoot);
const { contentFilenames, snippets, snippetsV2, fileImportsMap } =
await categorizeFilePaths(docsRoot, mintIgnore, /*disableOpenApi*/ true, /*lazyPages*/ true);
const snippetFilenames = [...snippets, ...snippetsV2];
// Reverse dependency closure: every out-of-scope file whose imports
// (transitively) reach into a scope. Seeds are the import *targets* under
// the scopes rather than the files present there, so an import of a file
// the replacement deleted still marks its importers as affected.
const importersOf = new Map();
for (const [file, imports] of fileImportsMap)
for (const target of imports)
{
if (!importersOf.has(target))
importersOf.set(target, []);
importersOf.get(target).push(file);
}
const affectedLower = new Set();
const queue = [...importersOf.keys()].filter(target => isInScope(target, lowerScopes));
while (queue.length > 0)
{
for (const importer of importersOf.get(queue.pop()) ?? [])
{
if (affectedLower.has(importer) || isInScope(importer, lowerScopes))
continue;
affectedLower.add(importer);
queue.push(importer);
}
}
const byLower = new Map();
for (const filename of [...contentFilenames, ...snippetFilenames])
byLower.set(filename.toLowerCase(), filename);
const pageSetLower = new Set(contentFilenames.map(filename => filename.toLowerCase()));
const affectedPages = [];
const affectedSnippets = [];
for (const lower of affectedLower)
{
const original = byLower.get(lower);
if (original !== undefined)
(pageSetLower.has(lower) ? affectedPages : affectedSnippets).push(original);
}
// The import graph reachable from the scope. Filenames use the same
// leading-slash docs-root-relative form full prebuild uses, which is what
// resolveAllImports matches import paths against. A missing entry is left
// out so resolveAllImports reports it as a missing file, like full validate.
const importedEntries = new Map();
async function loadImportedFile(filename)
{
if (importedEntries.has(filename))
return;
importedEntries.set(filename, null);
const absPath = join(docsRoot, filename);
if (!isSnippetExtension(extname(filename).toLowerCase()) || !existsSync(absPath))
return;
const content = await readFile(absPath, 'utf8');
const tree = await preparseMdxTree(content, docsRoot, absPath, message => errors.push(message.trim()));
if (!tree)
return;
const entry = { ...(await findAndRemoveImports(tree)), filename };
importedEntries.set(filename, entry);
for (const source of Object.keys(entry.importMap))
{
const resolved = resolveImportPath(source, filename);
if (resolved)
await loadImportedFile(resolved);
}
}
// In-scope pages get the full page validation; affected out-of-scope pages
// only feed the import-resolution pass below (createPage skipped, parse
// errors suppressed -- the replacement did not change their content).
const scopePages = contentFilenames.filter(filename => isInScope(filename, lowerScopes));
const pagesWithImports = [];
async function processPage(filename, inScope)
{
const relPath = filename.replace(/^\/+/, '');
const content = await readFile(join(docsRoot, filename), 'utf8');
if (inScope)
{
try
{
await createPage(relPath, content, docsRoot, [], [], message => errors.push(message.trim()));
}
catch (error)
{
errors.push(`${relPath}: ${error.message}`);
}
}
// In-scope parse errors were already reported by createPage above.
const tree = await preparseMdxTree(content, docsRoot, join(docsRoot, filename), () => {});
if (!tree)
return;
const fileWithImports = { ...(await findAndRemoveImports(tree)), filename };
if (hasImports(fileWithImports))
pagesWithImports.push(fileWithImports);
}
await Promise.all([
...scopePages.map(filename => processPage(filename, true)),
...affectedPages.map(filename => processPage(filename, false)),
]);
// Snippet files to parse and resolve: everything under the scopes (full
// prebuild parses every snippet file, imported or not), plus the affected
// out-of-scope ones, plus everything the pages import (loadImportedFile
// follows nested imports transitively from all of these).
const scopeSnippets = snippetFilenames.filter(filename => isInScope(filename, lowerScopes));
for (const filename of [...scopeSnippets, ...affectedSnippets])
await loadImportedFile(filename);
for (const page of pagesWithImports)
for (const source of Object.keys(page.importMap))
{
const resolved = resolveImportPath(source, page.filename);
if (resolved)
await loadImportedFile(resolved);
}
// Resolve imports the way full prebuild does (resolveImportsAndWriteFiles):
// snippets first, in reverse topological order so nested imports are
// already inlined, then the pages. Every problem -- invalid path, missing
// file, unresolvable named export -- arrives via onWarning, which strict
// mode turns into failures.
const snippetEntries = [...importedEntries.values()].filter(entry => entry !== null);
const graph = {};
for (const entry of snippetEntries)
graph[entry.filename] = Object.keys(entry.importMap)
.map(source => resolveImportPath(source, entry.filename))
.filter(resolved => resolved !== null);
const onWarning = warning => errors.push(warning.message);
for (const filename of topologicalSort(graph).reverse())
{
const entry = importedEntries.get(filename);
if (entry && hasImports(entry))
entry.tree = await resolveAllImports({ snippets: snippetEntries, fileWithImports: entry, onWarning });
}
for (const page of pagesWithImports)
await resolveAllImports({ snippets: snippetEntries, fileWithImports: page, onWarning });
console.log(
`Scoped validate: checked docs.json, ${scopedNavPages.length} in-scope navigation ` +
`entries, ${scopePages.length} pages and ${scopeSnippets.length} snippet files in ` +
`scope, ${affectedPages.length + affectedSnippets.length} out-of-scope importers, ` +
`and ${snippetEntries.length} imported files under: ${scopes.join(', ')}`);
if (errors.length > 0)
{
console.error(`\n${errors.length} error(s):`);
for (const error of errors)
console.error(` - ${error}`);
process.exit(1);
}
console.log('scoped validation passed');
}
main().catch(error =>
{
console.error(error.message);
process.exit(1);
});
+16
View File
@@ -240,6 +240,22 @@ else
RESULT_INFO="Server is not responding before SQLancer run"
fi
# On failure, attach the per-database reproducer logs as an artifact. With
# `--log-each-select true` SQLancer writes every statement of each generated
# database to `logs/<dbms>/databaseN.log` (+ `databaseN-cur.log` for the
# in-progress one), so the failing database's log is the exact
# CREATE/INSERT/.../SELECT sequence needed to reproduce the bug - far easier
# than reconstructing it from the interleaved, multi-threaded stdout. Only on
# failure and as a single `.tar` (write_result gzips it if it exceeds 10 MB),
# to avoid uploading a multi-hundred-MB log on clean runs.
SQLANCER_LOG_DIR="/sqlancer/sqlancer-main/logs"
if [ "$OVERALL_STATUS" != "OK" ] && [ -d "$SQLANCER_LOG_DIR" ]; then
reproducer_archive="$OUTPUT_PATH/sqlancer_reproducer_logs.tar"
if tar -C "$(dirname "$SQLANCER_LOG_DIR")" -cf "$reproducer_archive" "$(basename "$SQLANCER_LOG_DIR")"; then
ATTACHED_FILES_ARRAY+=("$reproducer_archive")
fi
fi
ls "$OUTPUT_PATH"
if [ -f "$PID_FILE" ]; then
+39 -5
View File
@@ -11,16 +11,36 @@
# clickhouse-server's HTTP port (8123).
#
# Mirrors `sqlancer_job.sh` in shape so the praktika report consumer remains
# happy: emits a `result.json` with one entry per oracle plus attached log
# files.
# happy: emits a `result_<normalized_job_name>.json` with one entry per oracle
# plus attached log files.
set -exu
# Capture the job start timestamp so the result file can report a real
# `start_time`/`duration`. Praktika's CIDB inserter rejects a `null` `start_time`
# (it calls `datetime.utcfromtimestamp(start_time)`, which fails on `None`).
JOB_START_TIME=$(date +%s)
TMP_PATH=$(readlink -f ./ci/tmp/)
OUTPUT_PATH="$TMP_PATH/sqlancer_pp_output"
PID_FILE="$TMP_PATH/clickhouse-server.pid"
CLICKHOUSE_BIN="$TMP_PATH/clickhouse"
RESULT_FILE="$TMP_PATH/result.json"
# Praktika reads the job result from `./ci/tmp/result_<normalized_job_name>.json`,
# where the normalization matches `Utils.normalize_string` in `ci/praktika/utils.py`
# (see `sqlancer_job.sh`, which does the same). Writing a plain `result.json` here
# is what made Praktika report ERROR "Job killed or terminated, no Result provided"
# and drop every oracle result and attached log - the job's real FAIL/OK status
# was written to a file Praktika never reads. `JOB_NAME` is not propagated into
# the docker container, so read it from the serialized environment Praktika dumps.
NORMALIZED_JOB_NAME=$(python3 -c '
import sys
sys.path.insert(0, ".")
from ci.praktika._environment import _Environment
from ci.praktika.utils import Utils
print(Utils.normalize_string(_Environment.get().JOB_NAME))
')
RESULT_FILE="$TMP_PATH/result_${NORMALIZED_JOB_NAME}.json"
mkdir -p "$OUTPUT_PATH"
@@ -142,12 +162,26 @@ done
ATTACHED_FILES_ARRAY+=("$OUTPUT_PATH/clickhouse-server.log" "$OUTPUT_PATH/clickhouse-server.log.err")
# On failure, attach the per-database reproducer logs as an artifact. With
# `--log-each-select true` SQLancer++ writes every statement of each generated
# database to `logs/<dbms>/databaseN-cur.log`; the failing database's log is the
# exact CREATE/INSERT/.../SELECT sequence to reproduce the bug (the oracle's own
# "Check the *-cur.log" hint points here). Only on failure, and gzip-compressed,
# to avoid uploading a large log on clean runs.
SQLANCER_PP_LOG_DIR="/sqlancer-pp/logs"
if [[ "$OVERALL_STATUS" != "success" && -d "$SQLANCER_PP_LOG_DIR" ]]; then
reproducer_archive="$OUTPUT_PATH/sqlancer_pp_reproducer_logs.tar.gz"
if tar -C "$(dirname "$SQLANCER_PP_LOG_DIR")" -czf "$reproducer_archive" "$(basename "$SQLANCER_PP_LOG_DIR")"; then
ATTACHED_FILES_ARRAY+=("$reproducer_archive")
fi
fi
{
printf '{\n'
printf ' "name": "SQLancerPP",\n'
printf ' "status": "%s",\n' "$OVERALL_STATUS"
printf ' "start_time": null,\n'
printf ' "duration": null,\n'
printf ' "start_time": %d,\n' "$JOB_START_TIME"
printf ' "duration": %d,\n' "$(( $(date +%s) - JOB_START_TIME ))"
printf ' "results": [\n'
for i in "${!TEST_RESULTS[@]}"; do
+1 -14
View File
@@ -1,9 +1,8 @@
import copy
import hashlib
import json
import os
from dataclasses import dataclass, field
from pathlib import Path, PurePosixPath
from pathlib import PurePosixPath
from typing import Any, List, Optional
from . import Artifact
@@ -312,15 +311,3 @@ class Job:
print(f"Warning: failed to check git submodules: {e}")
return False
def __post_init__(self):
if self.timeout_shell_cleanup:
return
if self.run_in_docker:
container_name = (
"praktika_"
+ hashlib.sha1(
(Path(os.getcwd()).resolve().as_posix() + ":" + self.name).encode()
).hexdigest()[:12]
)
self.timeout_shell_cleanup = f"docker rm -f {container_name}"
+41 -14
View File
@@ -19,7 +19,7 @@ from contextlib import contextmanager
from datetime import datetime
from pathlib import Path
from shlex import quote
from threading import Thread
from threading import Event, Thread
from types import SimpleNamespace
from typing import Any, Dict, Iterator, List, Optional, Type, TypeVar, Union
@@ -1044,20 +1044,42 @@ class TeePopen:
self.terminated_by_sigkill = False
self.log_rolling_buffer = deque(maxlen=100)
self.preserve_stdio = preserve_stdio
# Set as soon as the child is reaped, so the watchdog wakes immediately
# and skips signalling when the process finished before the timeout.
self.finished = Event()
def _check_timeout(self) -> None:
if self.timeout is None:
return
time.sleep(self.timeout)
# Wait for the timeout, but wake as soon as the child finishes. A blind
# sleep would fire the watchdog even for a job that already succeeded --
# flipping timeout_exceeded, running cleanup, and, in a long-lived
# process, issuing a late killpg against an already-reaped (possibly
# PID-recycled) process group that may now belong to an unrelated job.
if self.finished.wait(self.timeout):
return
# Backstop for the race between the wait timing out and the child
# exiting: if the process is already gone, enforce nothing.
if self.process.poll() is not None:
return
print(f"WARNING: Timeout exceeded [{self.timeout}] for [{self.process.pid}]")
self.timeout_exceeded = True
if self.timeout_shell_cleanup:
Shell.check(self.timeout_shell_cleanup, verbose=True)
return
# Terminate the launched process group first: timeout enforcement must
# never depend on the external cleanup returning. Best-effort teardown
# (e.g. `docker rm -f <container>`) then runs in a bounded daemon thread,
# so a cleanup that wedges on a hung daemon cannot re-introduce the hang.
self.send_signal(signal.SIGTERM)
print(f"Send SIGTERM to [{self.process.pid}]")
if self.timeout_shell_cleanup:
Thread(
target=Shell.check,
args=(self.timeout_shell_cleanup,),
kwargs={"verbose": True, "timeout": 120},
daemon=True,
).start()
time_wait = 0
while self.process.poll() is None and time_wait < 100:
@@ -1119,15 +1141,20 @@ class TeePopen:
self.log_file.close()
def wait(self) -> int:
# If preserving stdio, we don't have our own stdout pipe; just wait
if not self.preserve_stdio and self.process.stdout is not None:
for line in self.process.stdout:
sys.stdout.write(line)
try:
# If preserving stdio, we don't have our own stdout pipe; just wait
if not self.preserve_stdio and self.process.stdout is not None:
for line in self.process.stdout:
sys.stdout.write(line)
if self.log_file:
self.log_file.write(line)
self.log_rolling_buffer.append(line)
return self.process.wait()
if self.log_file:
self.log_file.write(line)
self.log_rolling_buffer.append(line)
return self.process.wait()
finally:
# The child is reaped: wake the watchdog so it does not mark a
# timeout or signal a process group that no longer exists.
self.finished.set()
def poll(self):
return self.process.poll()
@@ -0,0 +1,170 @@
"""
Regression test for the praktika watchdog (TeePopen._check_timeout).
Background
----------
`Stateless tests (amd_tsan, s3 storage, parallel, 2/2)` jobs intermittently
finished with a job-level ERROR (exit code 125) and `results: []`. The job.log
showed the 9000s watchdog firing, running a `docker rm -f <container>` that
removed nothing ("No such container"), and then the job hanging for another ~2h
until an unrelated docker-daemon event closed the pipe.
Root cause: when `timeout_shell_cleanup` was set, `_check_timeout` ran that
command and `return`ed early -- it never signalled the launched process group.
So if the cleanup command missed (which it did: the container was launched with
one name and `docker rm -f` targeted a different, stale name) the inner process
was never terminated and the whole job hung past its timeout. A second failure
mode: even when the signal was sent, running the cleanup synchronously first
meant a cleanup that wedged on a hung docker daemon still stalled the watchdog
before it could terminate the group.
The watchdog now signals the launched process group FIRST, then runs the
best-effort cleanup in a bounded daemon thread, so timeout enforcement never
depends on the cleanup returning.
A third failure mode: the watchdog slept the full timeout unconditionally, so a
child that exited early still tripped it -- it marked timeout_exceeded, ran the
cleanup, and, in a long-lived process, issued a late killpg against an
already-reaped (possibly PID-recycled) process group. The watchdog now waits on
an event set when the child is reaped and re-checks poll() before enforcing, so
an early-exiting child cancels it and no stray signal is sent.
These tests drive `_check_timeout` directly. Two of them launch a child that
sleeps far longer than the watchdog timeout (so a working watchdog must
terminate it promptly regardless of the cleanup); the fast-exit test launches a
child that finishes well before the timeout (so the watchdog must not fire).
"""
import os
import signal
import sys
import time
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../.."))
from ci.praktika.utils import TeePopen
# Child sleeps much longer than the 1s watchdog timeout. A default `sleep`
# terminates on SIGTERM, so a working watchdog stops it in ~1s; a broken one
# (no signal sent) lets it run the full CHILD_SLEEP seconds.
CHILD_SLEEP = 30
# Generous ceiling: comfortably above the watchdog's ~1s reaction, far below
# CHILD_SLEEP so an un-killed child is unambiguously detected.
MAX_ELAPSED = 15
def _run_with_watchdog(timeout_shell_cleanup):
start = time.monotonic()
with TeePopen(
f"sleep {CHILD_SLEEP}",
timeout=1,
timeout_shell_cleanup=timeout_shell_cleanup,
) as p:
rc = p.wait()
return p, rc, time.monotonic() - start
def test_timeout_terminates_process_when_cleanup_is_a_noop():
"""The exit-125 scenario: cleanup command removes nothing (no-op `true`)."""
p, rc, elapsed = _run_with_watchdog(timeout_shell_cleanup="true")
assert p.timeout_exceeded, "watchdog did not mark timeout_exceeded"
# The launched process must have been terminated by the watchdog, not left
# to run its full sleep. Pre-fix, the early return after the no-op cleanup
# sent no signal, so the child ran all CHILD_SLEEP seconds (elapsed ~= 30,
# rc == 0) -- the hang that ended in exit 125. We assert on the reaped exit
# status and wall-clock, which are deterministic; the internal
# `terminated_by_*` flags are set by the watchdog thread only after its
# poll loop and lag behind the child's actual reaping, so are not asserted.
assert rc == -signal.SIGTERM, (
f"process was not SIGTERM-terminated (rc={rc}); the watchdog returned "
"without signalling the launched process (the exit-125 hang)"
)
assert elapsed < MAX_ELAPSED, (
f"watchdog took {elapsed:.1f}s to stop the process (>= {MAX_ELAPSED}s) -- "
"it did not terminate promptly after the no-op cleanup"
)
def test_timeout_terminates_process_without_cleanup_command():
"""The plain path (no cleanup command) must still terminate the group."""
p, rc, elapsed = _run_with_watchdog(timeout_shell_cleanup=None)
assert p.timeout_exceeded
assert rc == -signal.SIGTERM, f"process was not SIGTERM-terminated (rc={rc})"
assert elapsed < MAX_ELAPSED, f"watchdog took {elapsed:.1f}s (>= {MAX_ELAPSED}s)"
def test_slow_cleanup_does_not_gate_the_kill():
"""A cleanup that blocks (a wedged `docker rm -f`) must not delay the kill.
The cleanup sleeps almost as long as the child. If the watchdog ran cleanup
synchronously before signalling (the pre-fix ordering), the child would only
be terminated after the cleanup returned -- elapsed >= SLOW_CLEANUP. Because
the group is now signalled first and cleanup runs in a background thread, the
child is stopped in ~1s while the cleanup keeps running detached.
"""
slow_cleanup = f"sleep {CHILD_SLEEP - 5}"
p, rc, elapsed = _run_with_watchdog(timeout_shell_cleanup=slow_cleanup)
assert p.timeout_exceeded, "watchdog did not mark timeout_exceeded"
assert rc == -signal.SIGTERM, (
f"process was not SIGTERM-terminated (rc={rc}); a blocking cleanup "
"gated the timeout kill"
)
assert elapsed < MAX_ELAPSED, (
f"watchdog took {elapsed:.1f}s (>= {MAX_ELAPSED}s) -- the blocking "
"cleanup delayed termination instead of running in the background"
)
def test_early_exit_does_not_trip_the_watchdog():
"""A child that finishes before the timeout must not trip the watchdog.
The child exits in ~1s; the watchdog timeout is FAST_TIMEOUT. Pre-fix, the
watchdog slept the full timeout and then unconditionally marked
timeout_exceeded, ran the cleanup, and signalled the (already-reaped,
possibly recycled) process group. Now it waits on an event set when the
child is reaped and re-checks poll(), so it bails without enforcing.
We wait past the timeout before asserting, giving a broken watchdog time to
(wrongly) fire. cleanup_ran flips only if the watchdog reached the cleanup
branch -- a direct probe that the watchdog did not act on a finished child.
"""
cleanup_marker = f"/tmp/ch-slot-teepopen-cleanup-{os.getpid()}"
if os.path.exists(cleanup_marker):
os.remove(cleanup_marker)
fast_timeout = 2
child_sleep = 1
with TeePopen(
f"sleep {child_sleep}",
timeout=fast_timeout,
timeout_shell_cleanup=f"touch {cleanup_marker}",
) as p:
rc = p.wait()
# Give a broken (blind-sleep) watchdog time to wake and (wrongly) enforce.
time.sleep(fast_timeout + 2)
assert rc == 0, f"child should exit cleanly (rc={rc})"
assert not p.timeout_exceeded, (
"watchdog marked timeout_exceeded for a child that exited before the "
"timeout -- the blind sleep fired instead of cancelling on early exit"
)
assert not os.path.exists(cleanup_marker), (
"watchdog ran timeout_shell_cleanup for an early-exiting child -- it "
"did not cancel when the process finished before the timeout"
)
assert not p.terminated_by_sigterm and not p.terminated_by_sigkill, (
"watchdog signalled a process that had already exited"
)
if __name__ == "__main__":
t0 = time.monotonic()
test_timeout_terminates_process_when_cleanup_is_a_noop()
test_timeout_terminates_process_without_cleanup_command()
test_slow_cleanup_does_not_gate_the_kill()
test_early_exit_does_not_trip_the_watchdog()
print(f"ok in {time.monotonic() - t0:.1f}s")
+16
View File
@@ -208,6 +208,22 @@ else()
set(RUST_RELEASE_PROFILE_EXTRA "")
endif()
# The vendored Rust crates otherwise build with cargo's default dev profile (full DWARF debug=2 +
# incremental). debug=1 is cargo's "limited" level: line tables plus function/scope info - so Rust
# backtraces still resolve file:line - but no type or variable-level info; and dropping the
# incremental cache stops target/debug/incremental growing unbounded across rebuilds. On by default
# to keep Debug build dirs lean; set -DREDUCE_RUST_DEBUG_INFO=OFF for full DWARF + incremental when
# stepping into the crates. Affects Debug only (Release uses profile.release, where this is inert).
option(REDUCE_RUST_DEBUG_INFO "Build vendored Rust crates with reduced debug info (cargo debug=1, the \"limited\" level) and no incremental caches" ON)
if (REDUCE_RUST_DEBUG_INFO)
set(RUST_DEV_PROFILE "[profile.dev]
debug = 1
incremental = false
")
else()
set(RUST_DEV_PROFILE "")
endif()
# We now prepare a custom config.toml with all the flags and add it to cargo via flags
configure_file("config.toml.in" "config.toml" @ONLY)
set(RUST_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/config.toml" CACHE INTERNAL "Rust config")
+1
View File
@@ -8,6 +8,7 @@ strip = true
inherits = "release"
lto = true
@RUST_DEV_PROFILE@
[source.vendored-sources]
directory = "@RUST_VENDOR_DIR@"
+8 -1
View File
@@ -30,7 +30,7 @@ endif()
# * default-engine: Needed for its s3 client (we can't pass our own s3 client via ffi)
clickhouse_import_crate(
MANIFEST_PATH "${DELTA_KERNEL_RS_SOURCE_DIR}/ffi/Cargo.toml"
FEATURES "default-engine-native-tls, test-ffi, tracing"
FEATURES "default-engine-native-tls, test-ffi, tracing, arrow"
)
clickhouse_config_crate_flags(delta_kernel_ffi)
@@ -48,6 +48,13 @@ corrosion_set_env_vars(delta_kernel_ffi
# but the CMake build for OpenSSL results in headers in two different places
"CFLAGS=${RUST_CFLAGS} -I ${ClickHouse_SOURCE_DIR}/contrib/openssl/include/")
# aws-lc-sys's memcmp_check links a small test binary via cc; clang adds
# -lgcc_s / -lgcc_eh by default but the bundled Linux sysroot ships only
# libgcc.a.
if (OS_LINUX)
corrosion_set_env_vars(delta_kernel_ffi "LDFLAGS=-nodefaultlibs -lc -lgcc")
endif()
target_include_directories(delta_kernel_ffi INTERFACE "${DELTA_KERNEL_TARGET_PATH}/")
target_link_libraries(delta_kernel_ffi INTERFACE OpenSSL::Crypto OpenSSL::SSL)
add_dependencies(_cargo-build_delta_kernel_ffi OpenSSL::Crypto OpenSSL::SSL)
-1
View File
@@ -31,4 +31,3 @@ _site/styles/
/_description_templates/
/changelogs/
/en/
/get-started/quickstarts/_TEMPLATE.mdx
+3 -2
View File
@@ -52,9 +52,10 @@
var btn = document.createElement('button');
btn.id = BTN_ID;
btn.type = 'button';
btn.className = 'group/ai flex-none hidden lg:flex items-center justify-center gap-1.5 h-9 rounded-xl shadow-sm bg-background-light dark:bg-background-dark dark:brightness-[1.1] dark:ring-1 dark:hover:brightness-[1.25] ring-1 ring-gray-400/20 hover:ring-gray-600/25 dark:ring-gray-600/30 dark:hover:ring-gray-500/30 w-9 p-0 ml-2';
btn.className = 'flex-none hidden lg:flex items-center justify-center gap-1.5 pl-3 pr-3.5 h-9 shadow-none bg-gray-950/[0.03] dark:bg-white/[0.03] hover:bg-gray-950/10 dark:hover:bg-white/10 border border-white/10 rounded ml-2';
btn.setAttribute('aria-label', 'Ask AI');
btn.innerHTML = sparkleSvg;
btn.innerHTML = sparkleSvg
+ '<span class="text-sm text-gray-500 dark:text-white/50 whitespace-nowrap">Ask</span>';
btn.addEventListener('click', function (e) {
e.stopPropagation();
openKapa();
+123 -154
View File
@@ -1,18 +1,10 @@
#!/usr/bin/env python3
"""
Script to automatically extract quick-start metadata and regenerate the
quickstarts-data.jsx modules
Script to automatically extract quick-start metadata and update home.mdx
This script scans the docs/get-started/quickstarts/ directory for .mdx files,
extracts metadata from their frontmatter, and writes it to
snippets/components/QuickStartsGrid/quickstarts-data.jsx, which home.mdx
imports. It does the same for every locale tree (docs/<locale>/get-started/
quickstarts/ -> snippets/<locale>/components/QuickStartsGrid/
quickstarts-data.jsx), so the cards pick up the translated titles and
descriptions from the locale pages' frontmatter. The data lives in a snippets
module rather than inline in home.mdx because the translation pipeline
translates snippet modules but not `export const` literals inside pages
(same layout as KBExplorer's kb-data.jsx).
extracts metadata from their frontmatter, and updates the quickStartsData array
in home.mdx.
Usage:
python scripts/update_quickstarts.py
@@ -21,7 +13,7 @@ Usage:
import re
import json
from pathlib import Path
from typing import Dict, List, Any, Optional, Tuple
from typing import Dict, List, Any
def parse_frontmatter(content: str) -> Dict[str, Any]:
"""
@@ -68,17 +60,6 @@ def parse_frontmatter(content: str) -> Dict[str, Any]:
return frontmatter
def slugify_tag(value: str) -> str:
"""
Normalize a frontmatter tag value to the stable slug the QuickStartsGrid
filter options match against ('AI/ML' -> 'ai-ml'). Slugs survive the
translation pipeline (which localizes display labels but leaves
identifier-like strings alone), so filtering keeps working on locale pages.
"""
slug = re.sub(r'[^a-z0-9]+', '-', value.lower()).strip('-')
# 'OSS' means self-managed; the grid exposes only the latter as an option.
return {'oss': 'self-managed'}.get(slug, slug)
def extract_quickstart_data(file_path: Path, base_dir: Path) -> Dict[str, Any]:
"""
Extract quick-start metadata from an MDX file.
@@ -133,11 +114,10 @@ def find_quickstart_files(quickstarts_dir: Path) -> List[Path]:
# Find both .md and .mdx files
for pattern in ['**/*.mdx', '**/*.md']:
for file_path in quickstarts_dir.glob(pattern):
# Skip home.mdx, the README, and anything underscore-prefixed
# (templates like _TEMPLATE.mdx and helper directories)
if file_path.name in ('home.mdx', 'README.md'):
# Skip home.mdx and files in underscore-prefixed directories
if file_path.name == 'home.mdx':
continue
if any(part.startswith('_') for part in file_path.relative_to(quickstarts_dir).parts):
if any(part.startswith('_') for part in file_path.relative_to(quickstarts_dir).parts[:-1]):
continue
files.append(file_path)
@@ -158,16 +138,8 @@ def generate_badges(use_cases: List[str], products: List[str]) -> str:
Badge components as a string
"""
# First line: muted text back-link (arrow icon + label), styled to match the
# homepage links. The href is root-relative and the onClick prepends the
# /docs base path on the production deploy (a bare relative href like
# "home" breaks under the subpath mount).
first_line = (
'<a href="/get-started/quickstarts/home" '
"onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} "
'className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline">'
'<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>'
'All quickstarts</a>'
)
# homepage links (e.g. "Read the quickstart" / "Set up docs MCP server").
first_line = '<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>'
# Second line: all other badges
second_line_badges = []
@@ -182,11 +154,10 @@ def generate_badges(use_cases: List[str], products: List[str]) -> str:
display_text = use_case.title() if use_case.lower() != 'ai/ml' else 'AI/ML'
second_line_badges.append(f'<Badge size="lg" color="blue">{display_text}</Badge>')
# Add product badges (orange). Brand/acronym names must not be title-cased
# ('OSS'.title() == 'Oss').
product_labels = {'oss': 'OSS', 'chdb': 'chDB', 'clickpipes': 'ClickPipes', 'clickstack': 'ClickStack'}
# Add product badges (orange)
for product in products:
display_text = product_labels.get(product.lower(), product.title())
# Capitalize properly
display_text = product.title()
second_line_badges.append(f'<Badge size="lg" color="orange">{display_text}</Badge>')
# Combine with line break and add margin
@@ -194,14 +165,9 @@ def generate_badges(use_cases: List[str], products: List[str]) -> str:
return f'{first_line}\n<div className="mt-2 flex flex-wrap gap-2">\n{second_line}\n</div>'
def update_quickstart_badges(file_path: Path, use_cases: List[str], products: List[str]) -> Optional[str]:
def update_quickstart_badges(file_path: Path, use_cases: List[str], products: List[str]) -> None:
"""
Refresh the autogenerated badges section of a quick-start MDX file.
Returns the updated page content, or None when the badge block is already
up to date. Nothing is written here: the caller stages the content and
flushes it only after the whole scan has succeeded, so a failure on a
later page cannot leave the tree half-regenerated.
Update the autogenerated badges section in a quick-start MDX file.
Args:
file_path: Path to the quick-start MDX file
@@ -217,143 +183,146 @@ def update_quickstart_badges(file_path: Path, use_cases: List[str], products: Li
# Pattern to match the autogenerated section
pattern = r'\{/\* AUTOGENERATED_START \*/\}.*?\{/\* AUTOGENERATED_END \*/\}'
# Without the markers the badge block cannot be updated and the page would
# silently keep stale badges, so this is an error, not a warning.
# Check if markers exist
if not re.search(pattern, content, re.DOTALL):
raise ValueError(
"no {/* AUTOGENERATED_START */}/{/* AUTOGENERATED_END */} markers "
"found; cannot update the badge block (copy the marker pair from "
"_TEMPLATE.mdx)"
)
print(f" Warning: No AUTOGENERATED markers found in {file_path.name}")
return
# Replace the content between markers
replacement = f'{{/* AUTOGENERATED_START */}}\n{badges}\n{{/* AUTOGENERATED_END */}}'
updated = re.sub(pattern, replacement, content, flags=re.DOTALL)
return updated if updated != content else None
content = re.sub(pattern, replacement, content, flags=re.DOTALL)
def render_data_module(quickstarts: List[Dict[str, Any]]) -> str:
"""Render the quickstarts-data.jsx module body.
with open(file_path, 'w', encoding='utf-8') as f:
f.write(content)
Tag values are emitted as slugs (the form the grid's filter options match
against); the in-page badges keep the raw frontmatter values.
The data is emitted as JSON, which is valid JS object-literal syntax, so
titles/descriptions with apostrophes, backticks, smart quotes, or non-Latin
text need no special escaping. ensure_ascii=False keeps non-ASCII readable.
def generate_javascript_array(quickstarts: List[Dict[str, Any]]) -> str:
"""
slugged = [
{**qs,
'useCases': [slugify_tag(v) for v in qs.get('useCases', [])],
'products': [slugify_tag(v) for v in qs.get('products', [])]}
for qs in quickstarts
]
body = json.dumps(slugged, indent=2, ensure_ascii=False)
return (
"// AUTO-GENERATED by _site/scripts/update_quickstarts.py — do not edit by hand.\n"
"// Re-run the script to refresh the quick-start card data.\n"
f"export const quickStartsData = {body};\n"
)
Generate JavaScript array code from quick-start data.
def build_quickstarts(quickstarts_dir: Path, project_root: Path,
update_badges: bool,
staged: Dict[Path, str]) -> Tuple[List[Dict[str, Any]], int]:
"""Extract quick-start data from every page in quickstarts_dir.
Args:
quickstarts: List of quick-start dictionaries
Returns the extracted data and the number of pages that failed. Failed
pages are reported but do not stop the scan, so one run surfaces every
problem; the caller must treat a non-zero failure count as an error
rather than shipping data that silently omits the failed pages.
Refreshed badge blocks are added to `staged` (path -> new content), not
written: the caller flushes them only after every scan has succeeded.
Returns:
JavaScript code as a string
"""
files = find_quickstart_files(quickstarts_dir)
quickstarts = []
failures = 0
for file_path in files:
try:
data = extract_quickstart_data(file_path, project_root)
lines = ['export const quickStartsData = [']
if update_badges:
updated = update_quickstart_badges(file_path, data['useCases'], data['products'])
if updated is not None:
staged[file_path] = updated
for qs in quickstarts:
lines.append(' {')
quickstarts.append(data)
print(f" ✓ {file_path.name}: {data['title']}")
except Exception as e:
print(f" ✗ {file_path.name}: Error - {e}")
failures += 1
return quickstarts, failures
# Add each field
for key, value in qs.items():
if isinstance(value, list):
# Format arrays
array_items = ', '.join(f"'{item}'" for item in value)
lines.append(f" {key}: [{array_items}],")
elif isinstance(value, str):
# Escape single quotes in strings
escaped_value = value.replace("'", "\\'")
lines.append(f" {key}: '{escaped_value}',")
else:
lines.append(f" {key}: {json.dumps(value)},")
lines.append(' },')
lines.append('];')
return '\n'.join(lines)
def update_home_mdx(home_path: Path, quickstarts_data: str) -> None:
"""
Update the home.mdx file with new quickstarts data.
Args:
home_path: Path to home.mdx
quickstarts_data: JavaScript array code as a string
"""
with open(home_path, 'r', encoding='utf-8') as f:
content = f.read()
# Find the quickStartsData array and replace it
# Match from "export const quickStartsData = [" to the closing "];"
pattern = r'export const quickStartsData = \[.*?\];'
if not re.search(pattern, content, re.DOTALL):
print("Warning: Could not find quickStartsData array in home.mdx")
print("Adding it before the QuickStartsGrid component...")
# Find the component usage and add data before it
component_pattern = r'(<QuickStartsGrid)'
if re.search(component_pattern, content):
content = re.sub(
component_pattern,
f'{quickstarts_data}\n\n{{/* Render the QuickStartsGrid component */}}\n\\1',
content
)
else:
print("Error: Could not find QuickStartsGrid component in home.mdx")
return
else:
# Replace existing data
content = re.sub(pattern, quickstarts_data, content, flags=re.DOTALL)
with open(home_path, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✓ Updated {home_path}")
def main():
"""Main function to run the script."""
# Get the project root directory (this script lives in _site/scripts/)
project_root = Path(__file__).resolve().parents[2]
# Paths
quickstarts_dir = project_root / 'get-started' / 'quickstarts'
home_path = quickstarts_dir / 'home.mdx'
if not quickstarts_dir.exists():
print(f"Error: Quick-starts directory not found: {quickstarts_dir}")
return 1
# Every write (badge blocks and data modules) is staged here and flushed
# only after all trees have scanned cleanly, so a failure anywhere leaves
# the tree untouched instead of half-regenerated.
staged = {}
if not home_path.exists():
print(f"Error: home.mdx not found: {home_path}")
return 1
# English tree: extract data and refresh the in-page badge blocks.
print(f"Scanning for quick-start files in {quickstarts_dir}...")
quickstarts, failures = build_quickstarts(quickstarts_dir, project_root,
update_badges=True, staged=staged)
# Find all quick-start files
files = find_quickstart_files(quickstarts_dir)
if not files:
print("No quick-start files found (excluding home.mdx)")
return 0
print(f"Found {len(files)} quick-start file(s)")
# Extract metadata from each file and update badges
quickstarts = []
for file_path in files:
try:
data = extract_quickstart_data(file_path, project_root)
quickstarts.append(data)
print(f" ✓ {file_path.name}: {data['title']}")
# Update badges in the file
update_quickstart_badges(file_path, data['useCases'], data['products'])
except Exception as e:
print(f" ✗ {file_path.name}: Error - {e}")
if not quickstarts:
print("No valid quick-start data extracted")
return 1
output_path = (project_root / 'snippets' / 'components' / 'QuickStartsGrid'
/ 'quickstarts-data.jsx')
staged[output_path] = render_data_module(quickstarts)
print(f"✓ Staged {len(quickstarts)} quick-start(s) for {output_path}")
# Generate JavaScript array
print("\nGenerating JavaScript array...")
js_array = generate_javascript_array(quickstarts)
# Locale trees: same extraction against the translated pages, so titles and
# descriptions come out localized and hrefs come out locale-prefixed
# (extract_quickstart_data derives the href from the path relative to the
# project root). Badges are left to the translation pipeline.
locales = ['ar', 'es', 'fr', 'ja', 'ko', 'pt-BR', 'ru', 'zh']
for locale in locales:
locale_dir = project_root / locale / 'get-started' / 'quickstarts'
if not locale_dir.exists():
print(f" - {locale}: no quickstarts directory, skipped")
continue
print(f"\nScanning {locale_dir}...")
locale_quickstarts, locale_failures = build_quickstarts(
locale_dir, project_root, update_badges=False, staged=staged)
failures += locale_failures
if not locale_quickstarts:
print(f" - {locale}: no valid quick-start data, skipped")
continue
# Keep useCases/products canonical English: the grid filters match data
# values against its option lists by string equality, and the
# translation pipeline translates frontmatter tag values inconsistently.
english_by_id = {qs['id']: qs for qs in quickstarts}
for entry in locale_quickstarts:
english = english_by_id.get(entry['id'])
if english:
entry['useCases'] = english['useCases']
entry['products'] = english['products']
locale_output = (project_root / 'snippets' / locale / 'components'
/ 'QuickStartsGrid' / 'quickstarts-data.jsx')
staged[locale_output] = render_data_module(locale_quickstarts)
print(f"✓ Staged {len(locale_quickstarts)} quick-start(s) for {locale_output}")
# Update home.mdx
print(f"\nUpdating {home_path}...")
update_home_mdx(home_path, js_array)
if failures:
print(f"\n✗ {failures} page(s) failed; nothing was written — "
"fix the errors above and re-run.")
return 1
for path, content in staged.items():
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(content, encoding='utf-8')
print(f"\n✓ Wrote {len(staged)} file(s)")
print(f"\n✓ Successfully updated home.mdx with {len(quickstarts)} quick-start(s)")
print(f"✓ Updated badges in {len(quickstarts)} quick-start file(s)")
return 0
if __name__ == '__main__':
+2 -2
View File
@@ -16,7 +16,6 @@
"group": "ابدأ",
"icon": "/images/menu-icon-lightning.svg",
"pages": [
"ar/get-started/quickstarts/home",
{
"expandable": true,
"expanded": true,
@@ -38,7 +37,8 @@
],
"root": "ar/get-started/use-cases/overview"
},
"ar/get-started/about/deployment-modes"
"ar/get-started/about/deployment-modes",
"ar/get-started/quickstarts/home"
],
"root": "ar/get-started/index"
},
@@ -1,7 +1,7 @@
---
sidebarTitle: 'ربط كتالوج Iceberg'
title: 'كيفية ربط كتالوج Iceberg في ClickHouse Cloud'
useCases: ['Data warehousing']
useCases: ['مستودعات البيانات']
products: ['Cloud']
skillLevel: 'مبتدئ'
description: 'تعرّف على كيفية ربط ClickHouse Cloud بكتالوج البيانات لديك والاستعلام عن جداول Iceberg.'
@@ -12,7 +12,7 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
@@ -104,5 +104,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'مقدمة إلى العروض المادية'
title: 'أنشئ أول عرض مادي'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'تعرّف على كيفية استخدام العروض المادية في ClickHouse لحساب نتائج الاستعلامات مسبقًا وتخزينها بترتيب فرز مختلف، مما يتيح عمليات بحث سريعة في الأعمدة التي لا يغطيها المفتاح الأساسي.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -217,5 +220,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
@@ -2,7 +2,7 @@
sidebarTitle: 'مقدمة إلى جدول MergeTree'
title: 'أنشئ أول جدول MergeTree'
useCases: ['All']
products: ['Cloud']
products: ['Cloud', 'OSS']
description: 'تعرّف على آلية عمل محرك الجداول الأساسي في ClickHouse من خلال إنشاء جدول MergeTree، وتحميل بيانات أسعار العقارات في المملكة المتحدة، وملاحظة كيف تؤثر الأجزاء وعمليات الدمج في التخزين وأداء الاستعلام.'
---
@@ -11,14 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">مفتوح المصدر</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -282,5 +283,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'مقدمة إلى الإسقاطات'
title: 'أنشئ أول إسقاط لك'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['الكل']
products: ['Cloud', 'OSS']
description: 'تعرّف على كيفية استخدام الإسقاطات في ClickHouse لتخزين نسخة إضافية مرتبة من بياناتك داخل الجدول نفسه، مما يتيح عمليات بحث سريعة في الأعمدة التي لا يشملها المفتاح الأساسي.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* بداية مُولَّدة تلقائيًا */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">الرصد</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -225,5 +228,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
@@ -1,7 +1,7 @@
---
sidebarTitle: 'أنشئ أول خدمة Cloud لك'
title: 'أنشئ أول خدمة Cloud لك وحمّل بيانات تجريبية'
useCases: ['All']
useCases: ['الكل']
products: ['Cloud']
description: 'أنشئ خدمة ClickHouse Cloud، واستكشف SQL Console، وحمّل مجموعة بيانات تجريبية لبدء الاستعلام عن بيانات حقيقية خلال دقائق.'
---
@@ -10,13 +10,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">دليل سريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">دليل سريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -164,5 +164,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع الأدلة السريعة</Badge></a>
</div>
@@ -5,24 +5,8 @@ slug: /guides/creating-tables
description: 'تعرّف على كيفية إنشاء الجداول في ClickHouse'
keywords: ['إنشاء الجداول', 'CREATE TABLE', 'إنشاء جدول', 'دليل قواعد البيانات', 'MergeTree engine']
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
مثل معظم أنظمة قواعد البيانات، ينظّم ClickHouse الجداول منطقيًا ضمن **قواعد بيانات**. استخدم الأمر `CREATE DATABASE` لإنشاء قاعدة بيانات جديدة في ClickHouse:
```sql
@@ -84,8 +68,4 @@ CREATE DATABASE IF NOT EXISTS helloworld
<Tip>
لمزيد من التفاصيل، اطّلع على [وحدة التدريب Modeling Data](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) في ClickHouse Academy.
</Tip>
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
</Tip>
+100 -1
View File
@@ -7,7 +7,6 @@ mode: 'custom'
---
import { QuickStartsGrid } from '/snippets/ar/components/QuickStartsGrid/QuickStartsGrid.jsx'
import { quickStartsData } from '/snippets/ar/components/QuickStartsGrid/quickstarts-data.jsx'
{/* الأدلة السريعة المميّزة - لكلّ منها معرّف دليل سريع وصورة لافتة (يُعرض العنوان داخل الصورة) */}
@@ -17,6 +16,106 @@ export const featuredQuickstarts = [
{ id: 'obtain-your-cloud-connection-details' }
];
{/* تعريف بيانات الأدلة السريعة */}
export const quickStartsData = [
{
id: 'connect-your-iceberg-catalog',
title: 'How to connect your Iceberg catalog in ClickHouse Cloud',
description: 'Learn how to connect ClickHouse Cloud to connect to your Data Catalog and query Iceberg tables.',
href: '/ar/get-started/quickstarts/connect-your-iceberg-catalog',
useCases: ['Data warehousing'],
products: ['Cloud'],
},
{
id: 'create-your-first-materialized-view',
title: 'Create your first materialized view',
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.',
href: '/ar/get-started/quickstarts/create-your-first-materialized-view',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-mergetree-table',
title: 'Create your first MergeTree table',
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.',
href: '/ar/get-started/quickstarts/create-your-first-mergetree-table',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-projection',
title: 'Create your first projection',
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.',
href: '/ar/get-started/quickstarts/create-your-first-projection',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-service-on-cloud',
title: 'Create your first Cloud service and load example data',
description: 'Create a ClickHouse Cloud service, explore the SQL console, and load an example dataset to start querying real data in minutes.',
href: '/ar/get-started/quickstarts/create-your-first-service-on-cloud',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'creating-tables',
title: 'Creating tables in ClickHouse',
description: 'Learn about Creating Tables in ClickHouse',
href: '/ar/get-started/quickstarts/creating-tables',
useCases: [],
products: [],
},
{
id: 'insert-data-using-clickhouse-client',
title: 'Insert data into ClickHouse Cloud using clickhouse-client',
description: 'Learn how to use clickhouse-client to insert data from local CSV and Parquet files into a ClickHouse Cloud service from the command line.',
href: '/ar/get-started/quickstarts/insert-data-using-clickhouse-client',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'mutations',
title: 'Updating and deleting ClickHouse data',
description: 'Describes how to perform update and delete operations in ClickHouse',
href: '/ar/get-started/quickstarts/mutations',
useCases: [],
products: [],
},
{
id: 'obtain-your-cloud-connection-details',
title: 'Obtain your Cloud connection details',
description: 'Learn how to find the hostname, port, and credentials for your ClickHouse Cloud service so you can connect from external clients, CLIs, and applications.',
href: '/ar/get-started/quickstarts/obtain-your-cloud-connection-details',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'tutorial',
title: 'Advanced tutorial',
description: 'Learn how to ingest and query data in ClickHouse using a New York City taxi example dataset.',
href: '/ar/get-started/quickstarts/tutorial',
useCases: [],
products: [],
},
{
id: 'working-with-the-map-type',
title: 'Working with the Map type in ClickHouse',
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.',
href: '/ar/get-started/quickstarts/working-with-the-map-type',
useCases: ['Observability'],
products: ['Cloud', 'OSS'],
},
{
id: 'writing-queries',
title: 'Selecting ClickHouse Data',
description: 'Learn about Selecting ClickHouse Data',
href: '/ar/get-started/quickstarts/writing-queries',
useCases: [],
products: [],
},
];
<div className="relative overflow-hidden">
<div className="absolute top-0 left-0 right-0 opacity-80">
@@ -1,7 +1,7 @@
---
sidebarTitle: 'إدراج البيانات باستخدام clickhouse-client'
title: 'إدراج البيانات في ClickHouse Cloud باستخدام clickhouse-client'
useCases: ['All']
useCases: ['الكل']
products: ['Cloud']
description: 'تعرّف على كيفية استخدام clickhouse-client لإدراج بيانات من ملفات CSV وParquet المحلية في خدمة ClickHouse Cloud عبر سطر الأوامر.'
---
@@ -10,13 +10,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -195,5 +195,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
+1 -18
View File
@@ -6,21 +6,8 @@ title: 'تحديث بيانات ClickHouse وحذفها'
description: 'يشرح كيفية تنفيذ عمليات التحديث والحذف في ClickHouse'
show_related_blogs: false
doc_type: 'guide'
useCases: ['Data warehousing']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
على الرغم من أن ClickHouse مُصمَّم لأحمال العمل التحليلية كبيرة الحجم، فمن الممكن في بعض الحالات تعديل البيانات الموجودة أو
حذفها. تُسمّى هذه العمليات &quot;mutations&quot; وتُنفَّذ باستخدام الأمر `ALTER TABLE`.
@@ -121,8 +108,4 @@ DELETE FROM hits WHERE Title LIKE '%hello%';
بعض الملاحظات حول الحذف الخفيف:
* هذه الميزة متاحة فقط لعائلة محركات الجداول `MergeTree`.
* يكون الحذف الخفيف متزامنًا افتراضيًا، إذ ينتظر إلى أن تعالج جميع النسخ المتماثلة عملية الحذف. ويخضع هذا السلوك للتحكم من خلال [الإعداد `lightweight_deletes_sync`](/ar/reference/settings/session-settings#lightweight_deletes_sync).
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
* يكون الحذف الخفيف متزامنًا افتراضيًا، إذ ينتظر إلى أن تعالج جميع النسخ المتماثلة عملية الحذف. ويخضع هذا السلوك للتحكم من خلال [الإعداد `lightweight_deletes_sync`](/ar/reference/settings/session-settings#lightweight_deletes_sync).
@@ -11,13 +11,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="blue">الرصد</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -127,5 +127,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
+1 -19
View File
@@ -6,22 +6,8 @@ description: 'تعرّف على كيفية إدخال البيانات والا
keywords: ['clickhouse', 'install', 'دليل تعليمي', 'قاموس', 'قواميس', 'مثال', 'متقدم', 'taxi', 'new york', 'nyc']
show_related_blogs: true
doc_type: 'guide'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
---
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
{/* AUTOGENERATED_END */}
<div id="overview">
## نظرة عامة
</div>
@@ -541,8 +527,4 @@ products: ['Cloud']
* [مقدمة إلى الفهارس الأساسية في ClickHouse](/ar/guides/clickhouse/data-modelling/sparse-primary-indexes): تعرّف على كيفية استخدام ClickHouse للفهارس الأساسية المتفرقة لتحديد البيانات ذات الصلة بكفاءة أثناء الاستعلامات.
* [ربط مصدر بيانات خارجي](/ar/integrations/home): راجع خيارات تكامل مصادر البيانات، بما في ذلك الملفات وKafka وPostgreSQL ومسارات البيانات وغير ذلك الكثير.
* [تصوّر البيانات في ClickHouse](/ar/integrations/connectors/data-visualization/index): صِل أداة UI/BI المفضلة لديك بـ ClickHouse.
* [مرجع SQL](/ar/reference/home): تصفّح دوال SQL المتاحة في ClickHouse لتحويل البيانات ومعالجتها وتحليلها.
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
* [مرجع SQL](/ar/reference/home): تصفّح دوال SQL المتاحة في ClickHouse لتحويل البيانات ومعالجتها وتحليلها.
@@ -2,7 +2,7 @@
sidebarTitle: 'العمل مع نوع Map'
title: 'العمل مع نوع Map في ClickHouse'
useCases: ['Observability']
products: ['OSS']
products: ['Cloud', 'OSS']
description: 'تعرّف على كيفية استخدام نوع Map في ClickHouse لتخزين بيانات مفتاح-قيمة ديناميكية والاستعلام عنها وتجميعها، باستخدام سمات الموارد في OTel كمثال عملي.'
---
@@ -10,11 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="orange">OSS</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -302,5 +303,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<a href="/ar/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
@@ -6,24 +6,8 @@ description: 'تعرّف على كيفية استعلام بيانات ClickHous
keywords: ['SELECT', 'تنسيقات البيانات']
show_related_blogs: true
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">التحليلات اللحظية</Badge>
<Badge size="lg" color="blue">مستودعات البيانات</Badge>
<Badge size="lg" color="blue">قابلية الرصد</Badge>
<Badge size="lg" color="blue">الذكاء الاصطناعي/تعلّم الآلة</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
ClickHouse هي قاعدة بيانات SQL، ويمكنك الاستعلام عن بياناتك بكتابة النوع نفسه من استعلامات `SELECT` المألوفة لديك. على سبيل المثال:
```sql
@@ -74,8 +58,4 @@ Query id: 3604df1c-acfd-4117-9c56-f86c69721121
<Note>
يدعم ClickHouse أكثر من 70 من تنسيقات الإدخال والإخراج، لذا يمكنك، بالاستفادة من آلاف الدوال وجميع تنسيقات البيانات، استخدام ClickHouse لإجراء تحويلات بيانات شبيهة بعمليات ETL بسرعة وكفاءة لافتتين. في الواقع، لا تحتاج حتى إلى
تشغيل ClickHouse server لتحويل البيانات — إذ يمكنك استخدام أداة `clickhouse-local`. راجع [صفحة التوثيق الخاصة بـ `clickhouse-local`](/ar/concepts/features/interfaces/cli) للاطلاع على التفاصيل.
</Note>
<div className="mt-8">
<a href="/ar/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ar/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">جميع أدلة البدء السريع</Badge></a>
</div>
</Note>
-2
View File
@@ -158,8 +158,6 @@ export const AskAILink = ({ children }) => {
};
export const HighlightedClickHouse = () => {
// The brush images are inlined as data URIs so the highlight paints with
// the heading instead of popping in after two extra network requests.
return (
<span className="relative inline-block px-8 py-3 -ml-4">
<img src="data:image/webp;base64,UklGRlAGAABXRUJQVlA4TEQGAAAv3cAZELdgpm3blNNrAGambduU02sAZqZt25TTawCmsG0jNXZ898wfgLvD/+fKt+UqV7UaVa0m5raBU33c6mGhIcMhIDBo2bYVRZDeA0RQke7eN/+5htFmpmvVV0X0fwLkf///x65P9EJFRB/0rumFOtGgIhpiEBXRJQdREV1iXGJYQrhYVETf0xuiDyoqoktwaQup5nUNfgl5CV509TEEp85voHFytD2IOD3sjEFU1PtlSet27sea/gAV/VupiKo4FVEfc5CwRI4yR5t91MSx5nrWUetZMTpGNxAgSJudcxIwwzSamZFkLjm7n/AvqIvuDRUR1T9B39GHuC7xTPuqy7L4fJ5x9E4OAISBNDMCNIAAia83Wgk/4HzYolN9WBbfZ1lV9SKEY3HL5vWZ/oCKioq70itdjuQ0+GFjALXaPCpImuEPJ8sPLEt0OS8p523bjwawbDE8xBzWyryu/kJdVH3QC73QKxUXnKj6uAeRJZQtHT17URXR5MJa0MaYeDSAIP6O9XveRxcrzUgaCQCk2ZhjYI5J2Ox1z1F9TP7IouKdiLtaREIQcWGvOa3RhzX6Le3JRzP0PsuyhnTWPo0Aib/uTPo1F7Zihu+SRjOzYb3sPoSScjhbWb0PY5aU86bHnLOVaaVUkAYjAIJmRgPxt2bavqVLmCR+14zWzmYD4NlHA4hpNgwkSJD4t5JfUgmJ+HkSAEE8Ev/276gPbRhuPcMX1E/Dvecc8o2G29/sK8fdGzkE9zkX6t1rXuWLznj3sMk3A3H3Gb/i2u2b/ivqJ+a9Q/6K7MSt50QT0c+FXO8dgO6r/5CKW9o5714bGB9yZ69n480b7aj1Q7psOeebx1Z3J59e8p7Oce8wyyKfi0s5cfOP6D+nweetGu8crap+TES9pL0Y7xuAc1XVT4k6v617u3MkbfNORD+hKksqR79zgxM0mz3pWyri3LLW3sd9m8AkALYhou9pWnLtxtvGyT4NExhDvNPXRHzIKQzceLaDvffaUGvrp3PrIqIvrKkP8L6NhlZa2fNe9rP3sRnmGd0zdUtc27htPNnOmtc1bCmdJ+qo7Thne8Evy1q68a6ldS179hp89DkXG72cnPUFFfVx38rgLbNdRUWc905dCiVXGvvks0sNmo52y7h5LyKiqt7HsFSbNkY/3nExHf2WoSyiIiIqzjm3FjPDONc3xKc6eM92r/JURUXSEmKS191WK4245+OVz+c6cN+DfD3Eow3etqFfU93qXuddg3zdxbidEzfdqn4v5Jhxv/nAJN8Py55qB3iz+pgATv2eUx9LGzbuFQlOAvF7os6FoxbcUn6hHnNiVPlNL2Er/U4MXvUx3ul2VY86AJSkP6EiMVbeh9nmVd3xbl55wVwxiTH8T4ioLqnP24DJK+x8jRjxCicBtN7rj4gufq/8G/HPwLia2xuTSE+sY4Ktnb8iwWvB5Xgy6iv257w65vihgwAIHu01TmwbAIJdCLKP+jNOtV/NJ81eGOfkn3I0PmllfoivzauwA5iA93wJhFvGA6gbMWFDf8SpCK+en7s9q2OOq05yvmDzguifszGfYD/6Z+ZrjyTTZiTIuNh8yRiWA5jTushp5BF+RUQ1PrErO/lsHKddTbTRrfOq8mKyvsVnAK+Io3I+8J2XScKIcYpmGNuhGhpJI41mLElF0zRLXlWOlOWntV0wkiDAUfmElfOKY6uj1icDT+2tF4lrTra+FwIcrxgB2BxGM2s4e5SSi4iKHnEXEdEt5rJsx7LtIcmjZreoiIjKr19h48QEy7r1J7PU8aTUupWCT/MDk1cNyKkc3QgYCZAwtq01JDnj5p0XFVEVERURFZVLlUeVv6E3gHbKJGAsS31Wy1YuyGMUzDLf6U/mCxwPxKi8AFDCHvQ0ou1jWD3qeogEERURUfkH6tFHiaLSjfUQETkJgzHs6bAH0Pu0784bAM5x1eeTFzlpBpA1kwBJdhFRlboV0ShOVP7NKqKrW+VRUzxzDU5FdJ0A2WPea9zKBV41EsAkJ2nsMJ51WN9FY2/jPGsSFRFREVG5jyoq19qqnZtcejkMAM9OkATHDiMn01rOMx+y+VWCBBERdSIqt9jJi5rb7KtIa5hnX0XPmBfxqvKiyp338ui8PKr87//fBg==" className="block dark:hidden absolute top-0 right-0 bottom-0 left-[10px] w-full h-full object-fill pointer-events-none select-none" alt="" aria-hidden="true" />
+2 -2
View File
@@ -68,7 +68,6 @@
"group": "Get started",
"icon": "/images/menu-icon-lightning.svg",
"pages": [
"get-started/quickstarts/home",
{
"expandable": true,
"expanded": true,
@@ -90,7 +89,8 @@
],
"root": "get-started/use-cases/overview"
},
"get-started/about/deployment-modes"
"get-started/about/deployment-modes",
"get-started/quickstarts/home"
],
"root": "get-started/index"
},
+1 -2
View File
@@ -82,5 +82,4 @@ SETTINGS
onelake_client_secret = client_secret;
SHOW TABLES IN database_name;
SELECT count() from database_name.table_name;
```
To authenticate without sharing a client secret, set `onelake_bearer_token` to a pre-obtained bearer token (scoped to `https://storage.azure.com`) instead of `onelake_client_id`/`onelake_client_secret`. ClickHouse does not refresh the token, so the database must be recreated after it expires.
```
@@ -110,6 +110,127 @@ SELECT greatCircleAngle(0, 0, 45, 0) AS arc
└─────┘
```
## geoToUTM {#geotoutm}
Converts WGS84 geographic coordinates `(longitude, latitude)` to [Universal Transverse Mercator (UTM)](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system) coordinates.
UTM is a set of 60 transverse Mercator projections, each covering a 6°-wide longitudinal zone, that map geographic coordinates to a planar grid in metres. The zone is selected automatically from the longitude, applying the standard exceptions for Norway and Svalbard, unless an explicit `zone` is given. UTM is only defined for latitudes in the range `[-80°, 84°]`; the polar caps use the separate UPS system.
```sql
geoToUTM(longitude, latitude[, zone])
```
**Arguments**
- `longitude` — Longitude in degrees. Range: `[-180°, 180°]`. [`Float32`](../../data-types/float.md)/[`Float64`](../../data-types/float.md).
- `latitude` — Latitude in degrees. Range: `[-80°, 84°]`. [`Float32`](../../data-types/float.md)/[`Float64`](../../data-types/float.md).
- `zone` — Optional. Force the projection into this UTM zone instead of selecting it automatically. Range: `[1, 60]`. [`(U)Int*`](../../data-types/int-uint.md).
**Returned value**
A named tuple `(easting, northing, zone, band)`: `easting` and `northing` in metres ([`Float64`](../../data-types/float.md)), the UTM `zone` number ([`UInt8`](../../data-types/int-uint.md)), and the MGRS latitude `band` letter ([`FixedString(1)`](../../data-types/fixedstring.md)). A `band` of `'N'` or later denotes the northern hemisphere.
Generates an exception when the latitude is outside `[-80°, 84°]` or the longitude is outside `[-180°, 180°]`.
**Example**
```sql
SELECT geoToUTM(2.294497, 48.858222) AS utm; -- Eiffel Tower
```
```text
(448251.5978370684,5411935.125629659,31,'U')
```
## UTMToGeo {#utmtogeo}
Converts [UTM](https://en.wikipedia.org/wiki/Universal_Transverse_Mercator_coordinate_system) coordinates back to WGS84 geographic coordinates `(longitude, latitude)`. This is the inverse of [`geoToUTM`](#geotoutm).
```sql
UTMToGeo(easting, northing, zone, is_north)
```
**Arguments**
- `easting` — Easting in metres (includes the 500000 m false easting). [`(U)Int*`](../../data-types/int-uint.md)/[`Float*`](../../data-types/float.md).
- `northing` — Northing in metres (includes the 10000000 m false northing on the southern hemisphere). [`(U)Int*`](../../data-types/int-uint.md)/[`Float*`](../../data-types/float.md).
- `zone` — UTM zone number. Range: `[1, 60]`. [`(U)Int*`](../../data-types/int-uint.md).
- `is_north` — Hemisphere: `1` for the northern hemisphere, `0` for the southern. [`(U)Int*`](../../data-types/int-uint.md).
**Returned value**
A named tuple `(longitude, latitude)` in degrees. [`Tuple(Float64, Float64)`](../../data-types/tuple.md).
**Example**
```sql
SELECT UTMToGeo(448251.6, 5411935.13, 31, 1) AS coord;
```
```text
(2.2944970289079203,48.85822204127082)
```
## geoToMGRS {#geotomgrs}
Encodes WGS84 geographic coordinates `(longitude, latitude)` as a [Military Grid Reference System (MGRS)](https://en.wikipedia.org/wiki/Military_Grid_Reference_System) string.
The string is `<zone><band><100km square><easting><northing>`, for example `31UDQ4825111935`. The `precision` argument controls the number of digits used for each of the easting and northing: `5` (default) for 1 m, `4` for 10 m, `3` for 100 m, `2` for 1 km, `1` for 10 km, and `0` for the 100 km grid square only. MGRS is only defined for latitudes in the range `[-80°, 84°]`.
```sql
geoToMGRS(longitude, latitude[, precision])
```
**Arguments**
- `longitude` — Longitude in degrees. Range: `[-180°, 180°]`. [`Float32`](../../data-types/float.md)/[`Float64`](../../data-types/float.md).
- `latitude` — Latitude in degrees. Range: `[-80°, 84°]`. [`Float32`](../../data-types/float.md)/[`Float64`](../../data-types/float.md).
- `precision` — Optional. Number of digits for each of easting and northing. Default: `5`. Range: `[0, 5]`. [`(U)Int*`](../../data-types/int-uint.md).
**Returned value**
The MGRS reference string. [`String`](../../data-types/string.md).
**Example**
```sql
SELECT geoToMGRS(2.294497, 48.858222) AS mgrs, geoToMGRS(2.294497, 48.858222, 3) AS mgrs_100m;
```
```text
┌─mgrs────────────┬─mgrs_100m───┐
│ 31UDQ4825111935 │ 31UDQ482119 │
└─────────────────┴─────────────┘
```
## MGRSToGeo {#mgrstogeo}
Decodes an [MGRS](https://en.wikipedia.org/wiki/Military_Grid_Reference_System) string into WGS84 geographic coordinates `(longitude, latitude)`. This is the inverse of [`geoToMGRS`](#geotomgrs).
The returned point is the centre of the referenced grid square, so the precision of the result matches the precision encoded in the string. Whitespace in the input is ignored and letters are case-insensitive.
```sql
MGRSToGeo(mgrs)
```
**Arguments**
- `mgrs` — MGRS reference string to decode. [`String`](../../data-types/string.md)/[`FixedString`](../../data-types/fixedstring.md).
**Returned value**
A named tuple `(longitude, latitude)` in degrees. [`Tuple(Float64, Float64)`](../../data-types/tuple.md).
**Example**
```sql
SELECT MGRSToGeo('31UDQ4825111935') AS coord;
```
```text
(2.294495618908297,48.85822536113692)
```
## pointInEllipses {#pointinellipses}
Checks whether the point belongs to at least one of the ellipses.
+2 -2
View File
@@ -16,7 +16,6 @@
"group": "Primeros pasos",
"icon": "/images/menu-icon-lightning.svg",
"pages": [
"es/get-started/quickstarts/home",
{
"expandable": true,
"expanded": true,
@@ -38,7 +37,8 @@
],
"root": "es/get-started/use-cases/overview"
},
"es/get-started/about/deployment-modes"
"es/get-started/about/deployment-modes",
"es/get-started/quickstarts/home"
],
"root": "es/get-started/index"
},
@@ -1,7 +1,7 @@
---
sidebarTitle: 'Conecta tu catálogo Iceberg'
title: 'Cómo conectar tu catálogo Iceberg en ClickHouse Cloud'
useCases: ['Data warehousing']
useCases: ['Almacén de datos']
products: ['Cloud']
skillLevel: 'Principiante'
description: 'Aprende a conectar ClickHouse Cloud a tu catálogo de datos y a consultar tablas Iceberg.'
@@ -12,10 +12,10 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">almacén de datos</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -104,5 +104,5 @@ Ahora que te has conectado a tu lago de datos, puedes probar a escribir una tabl
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introducción a las vistas materializadas'
title: 'Crea tu primera vista materializada'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Aprende a usar las vistas materializadas en ClickHouse para precalcular y almacenar resultados de consultas con un orden diferente, lo que permite búsquedas rápidas en columnas que no forman parte de tu clave primaria.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -217,5 +220,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -2,7 +2,7 @@
sidebarTitle: 'Introducción a la tabla MergeTree'
title: 'Crea tu primera tabla MergeTree'
useCases: ['All']
products: ['Cloud']
products: ['Cloud', 'OSS']
description: 'Aprende cómo funciona el principal motor de tablas de ClickHouse creando una tabla MergeTree, cargando datos sobre precios de viviendas del Reino Unido y observando cómo las partes y las fusiones afectan al almacenamiento y al rendimiento de las consultas.'
---
@@ -11,14 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Almacén de datos</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -282,5 +283,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introducción a las proyecciones'
title: 'Crea tu primera proyección'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Aprende a usar las proyecciones en ClickHouse para almacenar una copia ordenada adicional de tus datos en la misma tabla, lo que permite búsquedas rápidas en columnas no incluidas en tu clave primaria.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -225,5 +228,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -10,13 +10,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Almacén de datos</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -164,5 +164,5 @@ A continuación, consulte estas guías de inicio rápido:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -5,24 +5,8 @@ slug: /guides/creating-tables
description: 'Aprende a crear tablas en ClickHouse'
keywords: ['creación de tablas', 'CREATE TABLE', 'creación de tablas', 'guía de bases de datos', 'motor MergeTree']
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Como la mayoría de las bases de datos, ClickHouse agrupa lógicamente las tablas en **bases de datos**. Usa el comando `CREATE DATABASE` para crear una base de datos nueva en ClickHouse:
```sql
@@ -85,8 +69,4 @@ archivo de columna se ordenarán por `user_id` y luego por `timestamp`.
<Tip>
Para obtener más información, consulte el [módulo de formación Modeling Data](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) de ClickHouse Academy.
</Tip>
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
</Tip>
+100 -1
View File
@@ -7,7 +7,6 @@ mode: 'custom'
---
import { QuickStartsGrid } from '/snippets/es/components/QuickStartsGrid/QuickStartsGrid.jsx'
import { quickStartsData } from '/snippets/es/components/QuickStartsGrid/quickstarts-data.jsx'
{/* Guías de inicio rápido destacadas: cada uno tiene un ID de quickstart y una imagen de banner (el título se muestra en la imagen) */}
@@ -17,6 +16,106 @@ export const featuredQuickstarts = [
{ id: 'obtain-your-cloud-connection-details' }
];
{/* Definir los datos de las guías de inicio rápido */}
export const quickStartsData = [
{
id: 'connect-your-iceberg-catalog',
title: 'How to connect your Iceberg catalog in ClickHouse Cloud',
description: 'Learn how to connect ClickHouse Cloud to connect to your Data Catalog and query Iceberg tables.',
href: '/es/get-started/quickstarts/connect-your-iceberg-catalog',
useCases: ['Data warehousing'],
products: ['Cloud'],
},
{
id: 'create-your-first-materialized-view',
title: 'Create your first materialized view',
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.',
href: '/es/get-started/quickstarts/create-your-first-materialized-view',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-mergetree-table',
title: 'Create your first MergeTree table',
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.',
href: '/es/get-started/quickstarts/create-your-first-mergetree-table',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-projection',
title: 'Create your first projection',
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.',
href: '/es/get-started/quickstarts/create-your-first-projection',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-service-on-cloud',
title: 'Create your first Cloud service and load example data',
description: 'Create a ClickHouse Cloud service, explore the SQL console, and load an example dataset to start querying real data in minutes.',
href: '/es/get-started/quickstarts/create-your-first-service-on-cloud',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'creating-tables',
title: 'Creating tables in ClickHouse',
description: 'Learn about Creating Tables in ClickHouse',
href: '/es/get-started/quickstarts/creating-tables',
useCases: [],
products: [],
},
{
id: 'insert-data-using-clickhouse-client',
title: 'Insert data into ClickHouse Cloud using clickhouse-client',
description: 'Learn how to use clickhouse-client to insert data from local CSV and Parquet files into a ClickHouse Cloud service from the command line.',
href: '/es/get-started/quickstarts/insert-data-using-clickhouse-client',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'mutations',
title: 'Updating and deleting ClickHouse data',
description: 'Describes how to perform update and delete operations in ClickHouse',
href: '/es/get-started/quickstarts/mutations',
useCases: [],
products: [],
},
{
id: 'obtain-your-cloud-connection-details',
title: 'Obtain your Cloud connection details',
description: 'Learn how to find the hostname, port, and credentials for your ClickHouse Cloud service so you can connect from external clients, CLIs, and applications.',
href: '/es/get-started/quickstarts/obtain-your-cloud-connection-details',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'tutorial',
title: 'Advanced tutorial',
description: 'Learn how to ingest and query data in ClickHouse using a New York City taxi example dataset.',
href: '/es/get-started/quickstarts/tutorial',
useCases: [],
products: [],
},
{
id: 'working-with-the-map-type',
title: 'Working with the Map type in ClickHouse',
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.',
href: '/es/get-started/quickstarts/working-with-the-map-type',
useCases: ['Observability'],
products: ['Cloud', 'OSS'],
},
{
id: 'writing-queries',
title: 'Selecting ClickHouse Data',
description: 'Learn about Selecting ClickHouse Data',
href: '/es/get-started/quickstarts/writing-queries',
useCases: [],
products: [],
},
];
<div className="relative overflow-hidden">
<div className="absolute top-0 left-0 right-0 opacity-80">
@@ -10,13 +10,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -195,5 +195,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
+1 -18
View File
@@ -6,21 +6,8 @@ title: 'Actualización y eliminación de datos de ClickHouse'
description: 'Describe cómo realizar operaciones de actualización y eliminación en ClickHouse'
show_related_blogs: false
doc_type: 'guide'
useCases: ['Data warehousing']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Aunque ClickHouse está orientado a cargas de trabajo analíticas de gran volumen, en algunas situaciones es posible modificar o
eliminar datos existentes. Estas operaciones se denominan &quot;mutaciones&quot; y se ejecutan mediante el comando `ALTER TABLE`.
@@ -121,8 +108,4 @@ DELETE FROM hits WHERE Title LIKE '%hello%';
Algunas notas sobre las eliminaciones ligeras:
* Esta función solo está disponible para la familia de motores de tabla `MergeTree`.
* Las eliminaciones ligeras son síncronas de forma predeterminada y esperan a que todas las réplicas procesen la eliminación. Este comportamiento se controla mediante la [configuración `lightweight_deletes_sync`](/es/reference/settings/session-settings#lightweight_deletes_sync).
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
* Las eliminaciones ligeras son síncronas de forma predeterminada y esperan a que todas las réplicas procesen la eliminación. Este comportamiento se controla mediante la [configuración `lightweight_deletes_sync`](/es/reference/settings/session-settings#lightweight_deletes_sync).
@@ -11,13 +11,13 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Análisis en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -127,5 +127,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
+1 -19
View File
@@ -6,22 +6,8 @@ description: 'Aprende a ingestar y consultar datos en ClickHouse con un conjunto
keywords: ['clickhouse', 'instalar', 'tutorial', 'diccionario', 'diccionarios', 'ejemplo', 'avanzado', 'taxi', 'nueva york', 'nyc']
show_related_blogs: true
doc_type: 'guide'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
---
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
{/* AUTOGENERATED_END */}
<div id="overview">
## Descripción general
</div>
@@ -541,8 +527,4 @@ Obtenga más información sobre ClickHouse con la siguiente documentación:
* [Introducción a los índices primarios en ClickHouse](/es/guides/clickhouse/data-modelling/sparse-primary-indexes): Aprenda cómo ClickHouse usa índices primarios dispersos para localizar de forma eficiente los datos relevantes durante las consultas.
* [Integre una fuente de datos externa](/es/integrations/home): Revise las opciones de integración de fuentes de datos, incluidos archivos, Kafka, PostgreSQL, canalizaciones de datos y muchas más.
* [Visualice datos en ClickHouse](/es/integrations/connectors/data-visualization/index): Conecte su herramienta de UI/BI favorita a ClickHouse.
* [Referencia SQL](/es/reference/home): Explore las funciones SQL disponibles en ClickHouse para transformar, procesar y analizar datos.
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
* [Referencia SQL](/es/reference/home): Explore las funciones SQL disponibles en ClickHouse para transformar, procesar y analizar datos.
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Uso del tipo Map'
title: 'Uso del tipo Map en ClickHouse'
useCases: ['Observability']
products: ['OSS']
useCases: ['Observabilidad']
products: ['Cloud', 'OSS']
description: 'Aprenda a usar el tipo Map en ClickHouse para almacenar, consultar y agregar datos dinámicos de clave-valor, usando atributos de recurso de OTel como ejemplo práctico.'
---
@@ -10,11 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="orange">OSS</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -302,5 +303,5 @@ O profundiza con la documentación de referencia:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<a href="/es/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
@@ -6,24 +6,8 @@ description: 'Aprende a seleccionar datos de ClickHouse'
keywords: ['SELECT', 'formatos de datos']
show_related_blogs: true
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analítica en tiempo real</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observabilidad</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
ClickHouse es una base de datos SQL, y puedes consultar tus datos escribiendo el mismo tipo de consultas `SELECT` con el que ya estás familiarizado. Por ejemplo:
```sql
@@ -74,8 +58,4 @@ Query id: 3604df1c-acfd-4117-9c56-f86c69721121
<Note>
ClickHouse admite más de 70 formatos de entrada y salida, así que, entre los miles de funciones y todos los formatos de datos, puede usar ClickHouse para realizar transformaciones de datos rápidas e impresionantes, similares a las de un proceso ETL. De hecho, ni siquiera
necesita tener un servidor ClickHouse en ejecución para transformar datos: puede usar la herramienta `clickhouse-local`. Consulte la [página de documentación de `clickhouse-local`](/es/concepts/features/interfaces/cli) para más detalles.
</Note>
<div className="mt-8">
<a href="/es/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/es/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Todas las guías de inicio rápido</Badge></a>
</div>
</Note>
-2
View File
@@ -158,8 +158,6 @@ export const AskAILink = ({ children }) => {
};
export const HighlightedClickHouse = () => {
// The brush images are inlined as data URIs so the highlight paints with
// the heading instead of popping in after two extra network requests.
return (
<span className="relative inline-block px-8 py-3 -ml-4">
<img src="data:image/webp;base64,UklGRlAGAABXRUJQVlA4TEQGAAAv3cAZELdgpm3blNNrAGambduU02sAZqZt25TTawCmsG0jNXZ898wfgLvD/+fKt+UqV7UaVa0m5raBU33c6mGhIcMhIDBo2bYVRZDeA0RQke7eN/+5htFmpmvVV0X0fwLkf///x65P9EJFRB/0rumFOtGgIhpiEBXRJQdREV1iXGJYQrhYVETf0xuiDyoqoktwaQup5nUNfgl5CV509TEEp85voHFytD2IOD3sjEFU1PtlSet27sea/gAV/VupiKo4FVEfc5CwRI4yR5t91MSx5nrWUetZMTpGNxAgSJudcxIwwzSamZFkLjm7n/AvqIvuDRUR1T9B39GHuC7xTPuqy7L4fJ5x9E4OAISBNDMCNIAAia83Wgk/4HzYolN9WBbfZ1lV9SKEY3HL5vWZ/oCKioq70itdjuQ0+GFjALXaPCpImuEPJ8sPLEt0OS8p523bjwawbDE8xBzWyryu/kJdVH3QC73QKxUXnKj6uAeRJZQtHT17URXR5MJa0MaYeDSAIP6O9XveRxcrzUgaCQCk2ZhjYI5J2Ox1z1F9TP7IouKdiLtaREIQcWGvOa3RhzX6Le3JRzP0PsuyhnTWPo0Aib/uTPo1F7Zihu+SRjOzYb3sPoSScjhbWb0PY5aU86bHnLOVaaVUkAYjAIJmRgPxt2bavqVLmCR+14zWzmYD4NlHA4hpNgwkSJD4t5JfUgmJ+HkSAEE8Ev/276gPbRhuPcMX1E/Dvecc8o2G29/sK8fdGzkE9zkX6t1rXuWLznj3sMk3A3H3Gb/i2u2b/ivqJ+a9Q/6K7MSt50QT0c+FXO8dgO6r/5CKW9o5714bGB9yZ69n480b7aj1Q7psOeebx1Z3J59e8p7Oce8wyyKfi0s5cfOP6D+nweetGu8crap+TES9pL0Y7xuAc1XVT4k6v617u3MkbfNORD+hKksqR79zgxM0mz3pWyri3LLW3sd9m8AkALYhou9pWnLtxtvGyT4NExhDvNPXRHzIKQzceLaDvffaUGvrp3PrIqIvrKkP8L6NhlZa2fNe9rP3sRnmGd0zdUtc27htPNnOmtc1bCmdJ+qo7Thne8Evy1q68a6ldS179hp89DkXG72cnPUFFfVx38rgLbNdRUWc905dCiVXGvvks0sNmo52y7h5LyKiqt7HsFSbNkY/3nExHf2WoSyiIiIqzjm3FjPDONc3xKc6eM92r/JURUXSEmKS191WK4245+OVz+c6cN+DfD3Eow3etqFfU93qXuddg3zdxbidEzfdqn4v5Jhxv/nAJN8Py55qB3iz+pgATv2eUx9LGzbuFQlOAvF7os6FoxbcUn6hHnNiVPlNL2Er/U4MXvUx3ul2VY86AJSkP6EiMVbeh9nmVd3xbl55wVwxiTH8T4ioLqnP24DJK+x8jRjxCicBtN7rj4gufq/8G/HPwLia2xuTSE+sY4Ktnb8iwWvB5Xgy6iv257w65vihgwAIHu01TmwbAIJdCLKP+jNOtV/NJ81eGOfkn3I0PmllfoivzauwA5iA93wJhFvGA6gbMWFDf8SpCK+en7s9q2OOq05yvmDzguifszGfYD/6Z+ZrjyTTZiTIuNh8yRiWA5jTushp5BF+RUQ1PrErO/lsHKddTbTRrfOq8mKyvsVnAK+Io3I+8J2XScKIcYpmGNuhGhpJI41mLElF0zRLXlWOlOWntV0wkiDAUfmElfOKY6uj1icDT+2tF4lrTra+FwIcrxgB2BxGM2s4e5SSi4iKHnEXEdEt5rJsx7LtIcmjZreoiIjKr19h48QEy7r1J7PU8aTUupWCT/MDk1cNyKkc3QgYCZAwtq01JDnj5p0XFVEVERURFZVLlUeVv6E3gHbKJGAsS31Wy1YuyGMUzDLf6U/mCxwPxKi8AFDCHvQ0ou1jWD3qeogEERURUfkH6tFHiaLSjfUQETkJgzHs6bAH0Pu0784bAM5x1eeTFzlpBpA1kwBJdhFRlboV0ShOVP7NKqKrW+VRUzxzDU5FdJ0A2WPea9zKBV41EsAkJ2nsMJ51WN9FY2/jPGsSFRFREVG5jyoq19qqnZtcejkMAM9OkATHDiMn01rOMx+y+VWCBBERdSIqt9jJi5rb7KtIa5hnX0XPmBfxqvKiyp338ui8PKr87//fBg==" className="block dark:hidden absolute top-0 right-0 bottom-0 left-[10px] w-full h-full object-fill pointer-events-none select-none" alt="" aria-hidden="true" />
+2 -2
View File
@@ -16,7 +16,6 @@
"group": "Premier pas",
"icon": "/images/menu-icon-lightning.svg",
"pages": [
"fr/get-started/quickstarts/home",
{
"expandable": true,
"expanded": true,
@@ -38,7 +37,8 @@
],
"root": "fr/get-started/use-cases/overview"
},
"fr/get-started/about/deployment-modes"
"fr/get-started/about/deployment-modes",
"fr/get-started/quickstarts/home"
],
"root": "fr/get-started/index"
},
@@ -1,7 +1,7 @@
---
sidebarTitle: 'Connecter votre catalogue Iceberg'
title: 'Comment connecter votre catalogue Iceberg à ClickHouse Cloud'
useCases: ['Data warehousing']
useCases: ['Entreposage de données']
products: ['Cloud']
skillLevel: 'Débutant'
description: 'Découvrez comment connecter ClickHouse Cloud à votre Data Catalog et interroger des tables Iceberg.'
@@ -12,7 +12,7 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data warehousing</Badge>
@@ -104,5 +104,5 @@ Maintenant que vous êtes connecté à votre lac de données, vous pouvez essaye
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introduction aux vues matérialisées'
title: 'Créez votre première vue matérialisée'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Apprenez à utiliser les vues matérialisées dans ClickHouse pour précalculer et stocker les résultats d’une requête avec un ordre de tri différent, afin d’effectuer rapidement des recherches sur des colonnes non couvertes par votre clé primaire.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* DÉBUT_AUTOGÉNÉRÉ */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Analyse en temps réel</Badge>
<Badge size="lg" color="blue">Entreposage de données</Badge>
<Badge size="lg" color="blue">Observabilité</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -217,5 +220,5 @@ Ou approfondissez avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -2,7 +2,7 @@
sidebarTitle: 'Introduction à la table MergeTree'
title: 'Créez votre première table MergeTree'
useCases: ['All']
products: ['Cloud']
products: ['Cloud', 'OSS']
description: 'Découvrez le fonctionnement du principal moteur de table de ClickHouse en créant une table MergeTree, en chargeant des données britanniques sur les prix de l''immobilier et en observant comment les parts et les fusions affectent le stockage et les performances des requêtes.'
---
@@ -11,14 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">Entrepôt de données</Badge>
<Badge size="lg" color="blue">Observabilité</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -282,5 +283,5 @@ Ou allez plus loin avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introduction aux projections'
title: 'Créez votre première projection'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Apprenez à utiliser les projections dans ClickHouse pour stocker une copie supplémentaire triée de vos données dans la même table, afin de permettre des recherches rapides sur des colonnes non couvertes par votre clé primaire.'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -225,5 +228,5 @@ Ou approfondissez avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -1,7 +1,7 @@
---
sidebarTitle: "Créez votre premier service Cloud"
title: "Créez votre premier service Cloud et chargez un jeu de données d’exemple"
useCases: ['All']
useCases: ['Tous']
products: ['Cloud']
description: "Créez un service ClickHouse Cloud, découvrez la console SQL et chargez un jeu de données d’exemple pour commencer à interroger des données réelles en quelques minutes."
---
@@ -10,12 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Analyse en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">Observabilité</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -164,5 +164,5 @@ Consultez ensuite les guides de démarrage rapide suivants :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -5,24 +5,8 @@ slug: /guides/creating-tables
description: 'Découvrez comment créer des tables dans ClickHouse'
keywords: ['création de tables', 'CREATE TABLE', 'création de table', 'guide des bases de données', 'MergeTree engine']
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Comme la plupart des systèmes de gestion de bases de données, ClickHouse regroupe logiquement les tables dans des **bases de données**. Utilisez la commande `CREATE DATABASE` pour créer une nouvelle base de données dans ClickHouse :
```sql
@@ -85,8 +69,4 @@ fichier de colonne seront triées par `user_id`, puis par `timestamp`.
<Tip>
Pour plus de détails, consultez le [module de formation Modeling Data](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) dans ClickHouse Academy.
</Tip>
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
</Tip>
+100 -1
View File
@@ -7,7 +7,6 @@ mode: 'custom'
---
import { QuickStartsGrid } from '/snippets/fr/components/QuickStartsGrid/QuickStartsGrid.jsx'
import { quickStartsData } from '/snippets/fr/components/QuickStartsGrid/quickstarts-data.jsx'
{/* Quickstarts à la une - chacun comporte un identifiant de Quickstarts et une image de bannière (le titre est intégré à l'image) */}
@@ -17,6 +16,106 @@ export const featuredQuickstarts = [
{ id: 'obtain-your-cloud-connection-details' }
];
{/* Définir les données des Quickstarts */}
export const quickStartsData = [
{
id: 'connect-your-iceberg-catalog',
title: 'How to connect your Iceberg catalog in ClickHouse Cloud',
description: 'Learn how to connect ClickHouse Cloud to connect to your Data Catalog and query Iceberg tables.',
href: '/fr/get-started/quickstarts/connect-your-iceberg-catalog',
useCases: ['Data warehousing'],
products: ['Cloud'],
},
{
id: 'create-your-first-materialized-view',
title: 'Create your first materialized view',
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.',
href: '/fr/get-started/quickstarts/create-your-first-materialized-view',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-mergetree-table',
title: 'Create your first MergeTree table',
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.',
href: '/fr/get-started/quickstarts/create-your-first-mergetree-table',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-projection',
title: 'Create your first projection',
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.',
href: '/fr/get-started/quickstarts/create-your-first-projection',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-service-on-cloud',
title: 'Create your first Cloud service and load example data',
description: 'Create a ClickHouse Cloud service, explore the SQL console, and load an example dataset to start querying real data in minutes.',
href: '/fr/get-started/quickstarts/create-your-first-service-on-cloud',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'creating-tables',
title: 'Creating tables in ClickHouse',
description: 'Learn about Creating Tables in ClickHouse',
href: '/fr/get-started/quickstarts/creating-tables',
useCases: [],
products: [],
},
{
id: 'insert-data-using-clickhouse-client',
title: 'Insert data into ClickHouse Cloud using clickhouse-client',
description: 'Learn how to use clickhouse-client to insert data from local CSV and Parquet files into a ClickHouse Cloud service from the command line.',
href: '/fr/get-started/quickstarts/insert-data-using-clickhouse-client',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'mutations',
title: 'Updating and deleting ClickHouse data',
description: 'Describes how to perform update and delete operations in ClickHouse',
href: '/fr/get-started/quickstarts/mutations',
useCases: [],
products: [],
},
{
id: 'obtain-your-cloud-connection-details',
title: 'Obtain your Cloud connection details',
description: 'Learn how to find the hostname, port, and credentials for your ClickHouse Cloud service so you can connect from external clients, CLIs, and applications.',
href: '/fr/get-started/quickstarts/obtain-your-cloud-connection-details',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'tutorial',
title: 'Advanced tutorial',
description: 'Learn how to ingest and query data in ClickHouse using a New York City taxi example dataset.',
href: '/fr/get-started/quickstarts/tutorial',
useCases: [],
products: [],
},
{
id: 'working-with-the-map-type',
title: 'Working with the Map type in ClickHouse',
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.',
href: '/fr/get-started/quickstarts/working-with-the-map-type',
useCases: ['Observability'],
products: ['Cloud', 'OSS'],
},
{
id: 'writing-queries',
title: 'Selecting ClickHouse Data',
description: 'Learn about Selecting ClickHouse Data',
href: '/fr/get-started/quickstarts/writing-queries',
useCases: [],
products: [],
},
];
<div className="relative overflow-hidden">
<div className="absolute top-0 left-0 right-0 opacity-80">
@@ -10,12 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">Analytics en temps réel</Badge>
<Badge size="lg" color="blue">Entreposage de données</Badge>
<Badge size="lg" color="blue">Observabilité</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -195,5 +195,5 @@ Ou approfondissez avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
+1 -18
View File
@@ -6,21 +6,8 @@ title: 'Mettre à jour et supprimer des données ClickHouse'
description: 'Décrit comment effectuer des opérations de mise à jour et de suppression dans ClickHouse'
show_related_blogs: false
doc_type: 'guide'
useCases: ['Data warehousing']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Bien que ClickHouse soit conçu pour des charges de travail analytiques à fort volume, il est possible, dans certains cas, de modifier ou de
supprimer des données existantes. Ces opérations sont appelées « mutations » et s’exécutent à l’aide de la commande `ALTER TABLE`.
@@ -121,8 +108,4 @@ DELETE FROM hits WHERE Title LIKE '%hello%';
Quelques remarques sur les suppressions légères :
* Cette fonctionnalité est disponible uniquement pour la famille de moteurs de table `MergeTree`.
* Les suppressions légères sont synchrones par défaut et attendent que toutes les répliques aient traité la suppression. Ce comportement est contrôlé par le [`paramètre lightweight_deletes_sync`](/fr/reference/settings/session-settings#lightweight_deletes_sync).
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
* Les suppressions légères sont synchrones par défaut et attendent que toutes les répliques aient traité la suppression. Ce comportement est contrôlé par le [`paramètre lightweight_deletes_sync`](/fr/reference/settings/session-settings#lightweight_deletes_sync).
@@ -11,12 +11,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">Entrepôt de données</Badge>
<Badge size="lg" color="blue">Observabilité</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
@@ -127,5 +127,5 @@ Ou approfondissez avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
+1 -19
View File
@@ -6,22 +6,8 @@ description: 'Apprenez à ingérer et à interroger des données dans ClickHouse
keywords: ['clickhouse', 'installation', 'tutoriel', 'dictionnaire', 'dictionnaires', 'exemple', 'avancé', 'taxi', 'new york', 'nyc']
show_related_blogs: true
doc_type: 'guide'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
---
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
{/* AUTOGENERATED_END */}
<div id="overview">
## Vue d’ensemble
</div>
@@ -541,8 +527,4 @@ Pour en savoir plus sur ClickHouse, consultez la documentation suivante :
* [Introduction aux index primaires clairsemés dans ClickHouse](/fr/guides/clickhouse/data-modelling/sparse-primary-indexes) : découvrez comment ClickHouse utilise des index primaires clairsemés pour localiser efficacement les données pertinentes lors des requêtes.
* [Intégrer une source de données externe](/fr/integrations/home) : découvrez les options d’intégration de sources de données, notamment les fichiers, Kafka, PostgreSQL, les pipelines de données et bien d’autres.
* [Visualiser des données dans ClickHouse](/fr/integrations/connectors/data-visualization/index) : connectez votre outil UI/BI favori à ClickHouse.
* [Référence SQL](/fr/reference/home) : parcourez les fonctions SQL disponibles dans ClickHouse pour transformer, traiter et analyser les données.
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
* [Référence SQL](/fr/reference/home) : parcourez les fonctions SQL disponibles dans ClickHouse pour transformer, traiter et analyser les données.
@@ -2,7 +2,7 @@
sidebarTitle: 'Utilisation du type Map'
title: 'Utilisation du type Map dans ClickHouse'
useCases: ['Observability']
products: ['OSS']
products: ['Cloud', 'OSS']
description: 'Découvrez comment utiliser le type Map dans ClickHouse pour stocker, interroger et agréger des données clé-valeur dynamiques, en prenant comme exemple pratique les attributs de ressource OTel.'
---
@@ -10,11 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="orange">OSS</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -302,5 +303,5 @@ Ou allez plus loin avec la documentation de référence :
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<a href="/fr/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
@@ -6,24 +6,8 @@ description: 'Découvrez comment sélectionner des données dans ClickHouse'
keywords: ['SELECT', 'formats de données']
show_related_blogs: true
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Analytique en temps réel</Badge>
<Badge size="lg" color="blue">Data warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">IA/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
ClickHouse est une base de données SQL, et vous interrogez vos données en écrivant le même type de requêtes `SELECT` que celles que vous connaissez déjà. Par exemple :
```sql
@@ -74,8 +58,4 @@ Query id: 3604df1c-acfd-4117-9c56-f86c69721121
<Note>
ClickHouse prend en charge plus de 70 formats d’entrée et de sortie. Avec ses milliers de fonctions et tous ces formats de données, vous pouvez utiliser ClickHouse pour effectuer des transformations de données de type ETL, rapides et impressionnantes. En fait, vous n’avez même pas
besoin qu’un ClickHouse server soit en cours d’exécution pour transformer des données : vous pouvez utiliser l’outil `clickhouse-local`. Consultez la [page de documentation de `clickhouse-local`](/fr/concepts/features/interfaces/cli) pour plus de détails.
</Note>
<div className="mt-8">
<a href="/fr/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/fr/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">Tous les guides de démarrage rapide</Badge></a>
</div>
</Note>
-2
View File
@@ -158,8 +158,6 @@ export const AskAILink = ({ children }) => {
};
export const HighlightedClickHouse = () => {
// The brush images are inlined as data URIs so the highlight paints with
// the heading instead of popping in after two extra network requests.
return (
<span className="relative inline-block px-8 py-3 -ml-4">
<img src="data:image/webp;base64,UklGRlAGAABXRUJQVlA4TEQGAAAv3cAZELdgpm3blNNrAGambduU02sAZqZt25TTawCmsG0jNXZ898wfgLvD/+fKt+UqV7UaVa0m5raBU33c6mGhIcMhIDBo2bYVRZDeA0RQke7eN/+5htFmpmvVV0X0fwLkf///x65P9EJFRB/0rumFOtGgIhpiEBXRJQdREV1iXGJYQrhYVETf0xuiDyoqoktwaQup5nUNfgl5CV509TEEp85voHFytD2IOD3sjEFU1PtlSet27sea/gAV/VupiKo4FVEfc5CwRI4yR5t91MSx5nrWUetZMTpGNxAgSJudcxIwwzSamZFkLjm7n/AvqIvuDRUR1T9B39GHuC7xTPuqy7L4fJ5x9E4OAISBNDMCNIAAia83Wgk/4HzYolN9WBbfZ1lV9SKEY3HL5vWZ/oCKioq70itdjuQ0+GFjALXaPCpImuEPJ8sPLEt0OS8p523bjwawbDE8xBzWyryu/kJdVH3QC73QKxUXnKj6uAeRJZQtHT17URXR5MJa0MaYeDSAIP6O9XveRxcrzUgaCQCk2ZhjYI5J2Ox1z1F9TP7IouKdiLtaREIQcWGvOa3RhzX6Le3JRzP0PsuyhnTWPo0Aib/uTPo1F7Zihu+SRjOzYb3sPoSScjhbWb0PY5aU86bHnLOVaaVUkAYjAIJmRgPxt2bavqVLmCR+14zWzmYD4NlHA4hpNgwkSJD4t5JfUgmJ+HkSAEE8Ev/276gPbRhuPcMX1E/Dvecc8o2G29/sK8fdGzkE9zkX6t1rXuWLznj3sMk3A3H3Gb/i2u2b/ivqJ+a9Q/6K7MSt50QT0c+FXO8dgO6r/5CKW9o5714bGB9yZ69n480b7aj1Q7psOeebx1Z3J59e8p7Oce8wyyKfi0s5cfOP6D+nweetGu8crap+TES9pL0Y7xuAc1XVT4k6v617u3MkbfNORD+hKksqR79zgxM0mz3pWyri3LLW3sd9m8AkALYhou9pWnLtxtvGyT4NExhDvNPXRHzIKQzceLaDvffaUGvrp3PrIqIvrKkP8L6NhlZa2fNe9rP3sRnmGd0zdUtc27htPNnOmtc1bCmdJ+qo7Thne8Evy1q68a6ldS179hp89DkXG72cnPUFFfVx38rgLbNdRUWc905dCiVXGvvks0sNmo52y7h5LyKiqt7HsFSbNkY/3nExHf2WoSyiIiIqzjm3FjPDONc3xKc6eM92r/JURUXSEmKS191WK4245+OVz+c6cN+DfD3Eow3etqFfU93qXuddg3zdxbidEzfdqn4v5Jhxv/nAJN8Py55qB3iz+pgATv2eUx9LGzbuFQlOAvF7os6FoxbcUn6hHnNiVPlNL2Er/U4MXvUx3ul2VY86AJSkP6EiMVbeh9nmVd3xbl55wVwxiTH8T4ioLqnP24DJK+x8jRjxCicBtN7rj4gufq/8G/HPwLia2xuTSE+sY4Ktnb8iwWvB5Xgy6iv257w65vihgwAIHu01TmwbAIJdCLKP+jNOtV/NJ81eGOfkn3I0PmllfoivzauwA5iA93wJhFvGA6gbMWFDf8SpCK+en7s9q2OOq05yvmDzguifszGfYD/6Z+ZrjyTTZiTIuNh8yRiWA5jTushp5BF+RUQ1PrErO/lsHKddTbTRrfOq8mKyvsVnAK+Io3I+8J2XScKIcYpmGNuhGhpJI41mLElF0zRLXlWOlOWntV0wkiDAUfmElfOKY6uj1icDT+2tF4lrTra+FwIcrxgB2BxGM2s4e5SSi4iKHnEXEdEt5rJsx7LtIcmjZreoiIjKr19h48QEy7r1J7PU8aTUupWCT/MDk1cNyKkc3QgYCZAwtq01JDnj5p0XFVEVERURFZVLlUeVv6E3gHbKJGAsS31Wy1YuyGMUzDLf6U/mCxwPxKi8AFDCHvQ0ou1jWD3qeogEERURUfkH6tFHiaLSjfUQETkJgzHs6bAH0Pu0784bAM5x1eeTFzlpBpA1kwBJdhFRlboV0ShOVP7NKqKrW+VRUzxzDU5FdJ0A2WPea9zKBV41EsAkJ2nsMJ51WN9FY2/jPGsSFRFREVG5jyoq19qqnZtcejkMAM9OkATHDiMn01rOMx+y+VWCBBERdSIqt9jJi5rb7KtIa5hnX0XPmBfxqvKiyp338ui8PKr87//fBg==" className="block dark:hidden absolute top-0 right-0 bottom-0 left-[10px] w-full h-full object-fill pointer-events-none select-none" alt="" aria-hidden="true" />
-103
View File
@@ -1,103 +0,0 @@
# Adding a new quickstart {#adding-a-new-quickstart}
Quickstart pages live in this folder as `.mdx` files. The quickstarts explorer
at `/get-started/quickstarts/home` (the search, filters, and cards) is
generated from the frontmatter of these pages — you never edit the explorer
data by hand.
## 1. Create the page {#create-the-page}
Copy the template `_TEMPLATE.mdx` to `<kebab-case-name>.mdx` in this folder,
rename it, and write your quickstart in it (underscore-prefixed files are
ignored by the explorer). The filename becomes the page id and URL
(`/get-started/quickstarts/<name>`).
Predefined building blocks you can import:
- `_prerequisites/` — reusable prerequisite sections
(e.g. `cloud_prerequisite.mdx` for "you need a ClickHouse Cloud service"),
- `_academy-ctas/` — ClickHouse Academy call-to-action cards
(e.g. `_academy_cta_generic.mdx`).
The template already imports one of each. Required frontmatter:
```yaml
---
sidebarTitle: 'Short nav title'
title: 'Create your first ...'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
description: 'One or two sentences shown on the explorer card.'
---
```
### `useCases` — one or more of: {#usecases-values}
| Value | Meaning |
|---|---|
| `All` | Foundational content that applies to every use case (matches every filter) |
| `Real-time analytics` | Real-time / user-facing analytics |
| `Data warehousing` | Warehousing, lakehouse, batch analytics |
| `Observability` | Logs, metrics, traces, ClickStack |
| `AI/ML` | AI, ML, vector, agent-facing workloads |
Prefer specific use cases over `All` — the explorer filter is only useful if
pages are tagged with what they are actually about. `All`-tagged pages match
every use-case filter.
### `products` — exactly one of: {#products-values}
| Value | Meaning |
|---|---|
| `Cloud` | ClickHouse Cloud (shown as "ClickHouse Cloud" in the filter) |
| `OSS` | Self-managed open-source ClickHouse (shown as "ClickHouse (Open-Source)") |
| `ClickPipes` | ClickPipes |
| `Language clients` | Client libraries |
| `ClickStack` | ClickStack |
| `chDB` | chDB |
Filter options with no matching quickstarts are hidden in the explorer, so
using a tag that has no pages yet (e.g. `ClickPipes`) makes the option appear
automatically.
## 2. Add the badge block and back-link {#badge-block}
Directly after the frontmatter, add the autogenerated markers — the generator
fills in the "All quickstarts" back-link and the use-case/product badges
between them:
```mdx
{/* AUTOGENERATED_START */}
{/* AUTOGENERATED_END */}
```
At the very bottom of the page, copy the `<div className="mt-8">…All
quickstarts…</div>` footer back-link from any existing quickstart.
## 3. Regenerate the explorer data {#regenerate}
From the `docs/` directory run:
```bash
python3 _site/scripts/update_quickstarts.py
```
This rewrites, from the page frontmatter:
- `snippets/components/QuickStartsGrid/quickstarts-data.jsx` — the explorer
card data (and the per-locale copies under
`snippets/<locale>/components/QuickStartsGrid/`, built from the translated
locale pages),
- the badge block between the `AUTOGENERATED` markers on every English
quickstart page.
**Commit the regenerated files together with your page.** The docs CI check
("Check quickstarts") runs the generator and fails the PR if the committed
output is stale, and also fails on `useCases`/`products` values outside the
tables above.
## 4. Optional: feature the quickstart {#featured}
The three featured banner cards at the top of the explorer are listed in
`home.mdx` (`export const featuredQuickstarts`, by page id). Featured
quickstarts are excluded from the filterable list below the banner.
@@ -1,84 +0,0 @@
---
sidebarTitle: 'The Name of Your Quickstart'
title: 'Build an ETL pipeline using ClickHouse'
# useCases — one or more of: ['All', 'Real-time analytics', 'Data warehousing', 'Observability', 'AI/ML']
useCases: ['Data warehousing', 'Real-time analytics']
# products — exactly one of: ['Cloud', 'OSS', 'ClickPipes', 'Language clients', 'ClickStack', 'chDB']
products: ['Cloud']
description: 'Learn how to ingest data from CSV and parquet files into ClickHouse Cloud'
---
{/* (Optional) - Import prerequisite snippets or CTAs */}
import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_prerequisite.mdx';
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* The back-link and badges are filled in between these markers by
_site/scripts/update_quickstarts.py — leave the block empty. */}
{/* AUTOGENERATED_START */}
{/* AUTOGENERATED_END */}
## Prerequisites
{/* What knowledge does the user need to know to follow this quickstart? */}
{/* Prefer linking to other relevant quickstarts */}
<CloudPrerequisites/>
## What you'll build
{/* Tell the user what they will be building in this quickstart */}
In this quick start you'll build ...
<Steps titleSize="h3">
<Step>
### Connecting to your data source
These are instructions or content that only pertain to the first step.
</Step>
<Step>
### Extracting Data
These are instructions or content that only pertain to the second step.
</Step>
<Step>
### Transforming Data
These are instructions or content that only pertain to the third step.
</Step>
<Step>
### Loading Data into ClickHouse
These are instructions or content that only pertain to the fourth step.
</Step>
<Step>
### Monitoring and Optimization
These are instructions or content that only pertain to the fifth step.
</Step>
</Steps>
## Next steps
In this quick start you did XYZ.
Check out the following quickstarts or guides next:
- [quickstart x](/get-started/quickstarts/example)
- [guide z](/guides/example)
<ClickHouseAcademyCTA/>
{/* Footer back-link to the explorer — keep as-is */}
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
{/*
The snippet above will show the card component below with CTA to the academy
<Frame>
<Card title="ClickHouse academy" img="/images/training-cards/rta-level1.png">
Check out our on-demand training from the ClickHouse academy for a deep dive
on ingesting data.
</Card>
</Frame>
*/}
@@ -11,7 +11,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
@@ -93,5 +93,5 @@ Be mindful of your quotes. ClickHouse doesn't support three part namespaces, you
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introduction to Materialized Views'
title: 'Create your first materialized view'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.'
---
@@ -10,11 +10,14 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -208,5 +211,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -2,7 +2,7 @@
sidebarTitle: 'Introduction to the MergeTree table'
title: 'Create your first MergeTree table'
useCases: ['All']
products: ['Cloud']
products: ['Cloud', 'OSS']
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.'
---
@@ -10,13 +10,14 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -272,5 +273,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Introduction to Projections'
title: 'Create your first projection'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.'
---
@@ -10,11 +10,14 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -221,5 +224,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -9,7 +9,7 @@ description: 'Create a ClickHouse Cloud service, explore the SQL console, and lo
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
@@ -154,5 +154,5 @@ Check out the following quickstarts next:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -5,21 +5,8 @@ slug: /guides/creating-tables
description: 'Learn about Creating Tables in ClickHouse'
keywords: ['creating tables', 'CREATE TABLE', 'table creation', 'database guide', 'MergeTree engine']
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Like most databases, ClickHouse logically groups tables into **databases**. Use the `CREATE DATABASE` command to create a new database in ClickHouse:
```sql
@@ -80,7 +67,3 @@ column file will be sorted by `user_id`, then `timestamp`.
<Tip>
For more details, check out the [Modeling Data training module](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse&utm_medium=docs) in ClickHouse Academy.
</Tip>
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
+99 -1
View File
@@ -7,7 +7,6 @@ mode: 'custom'
---
import { QuickStartsGrid } from '/snippets/components/QuickStartsGrid/QuickStartsGrid.jsx'
import { quickStartsData } from '/snippets/components/QuickStartsGrid/quickstarts-data.jsx'
{/* Featured quickstarts - each has a quickstart ID and a banner image (the title is rendered into the image) */}
export const featuredQuickstarts = [
@@ -16,6 +15,105 @@ export const featuredQuickstarts = [
{ id: 'obtain-your-cloud-connection-details' }
];
{/* Define quickstarts data */}
export const quickStartsData = [
{
id: 'connect-your-iceberg-catalog',
title: 'How to connect your Iceberg catalog in ClickHouse Cloud',
description: 'Learn how to connect ClickHouse Cloud to connect to your Data Catalog and query Iceberg tables.',
href: '/get-started/quickstarts/connect-your-iceberg-catalog',
useCases: ['Data warehousing'],
products: ['Cloud'],
},
{
id: 'create-your-first-materialized-view',
title: 'Create your first materialized view',
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.',
href: '/get-started/quickstarts/create-your-first-materialized-view',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-mergetree-table',
title: 'Create your first MergeTree table',
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.',
href: '/get-started/quickstarts/create-your-first-mergetree-table',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-projection',
title: 'Create your first projection',
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.',
href: '/get-started/quickstarts/create-your-first-projection',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-service-on-cloud',
title: 'Create your first Cloud service and load example data',
description: 'Create a ClickHouse Cloud service, explore the SQL console, and load an example dataset to start querying real data in minutes.',
href: '/get-started/quickstarts/create-your-first-service-on-cloud',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'creating-tables',
title: 'Creating tables in ClickHouse',
description: 'Learn about Creating Tables in ClickHouse',
href: '/get-started/quickstarts/creating-tables',
useCases: [],
products: [],
},
{
id: 'insert-data-using-clickhouse-client',
title: 'Insert data into ClickHouse Cloud using clickhouse-client',
description: 'Learn how to use clickhouse-client to insert data from local CSV and Parquet files into a ClickHouse Cloud service from the command line.',
href: '/get-started/quickstarts/insert-data-using-clickhouse-client',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'mutations',
title: 'Updating and deleting ClickHouse data',
description: 'Describes how to perform update and delete operations in ClickHouse',
href: '/get-started/quickstarts/mutations',
useCases: [],
products: [],
},
{
id: 'obtain-your-cloud-connection-details',
title: 'Obtain your Cloud connection details',
description: 'Learn how to find the hostname, port, and credentials for your ClickHouse Cloud service so you can connect from external clients, CLIs, and applications.',
href: '/get-started/quickstarts/obtain-your-cloud-connection-details',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'tutorial',
title: 'Advanced tutorial',
description: 'Learn how to ingest and query data in ClickHouse using a New York City taxi example dataset.',
href: '/get-started/quickstarts/tutorial',
useCases: [],
products: [],
},
{
id: 'working-with-the-map-type',
title: 'Working with the Map type in ClickHouse',
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.',
href: '/get-started/quickstarts/working-with-the-map-type',
useCases: ['Observability'],
products: ['Cloud', 'OSS'],
},
{
id: 'writing-queries',
title: 'Selecting ClickHouse Data',
description: 'Learn about Selecting ClickHouse Data',
href: '/get-started/quickstarts/writing-queries',
useCases: [],
products: [],
},
];
<div className="relative overflow-hidden">
<div className="absolute top-0 left-0 right-0 opacity-80">
@@ -9,7 +9,7 @@ description: 'Learn how to use clickhouse-client to insert data from local CSV a
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
@@ -184,5 +184,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -6,18 +6,8 @@ title: 'Updating and deleting ClickHouse data'
description: 'Describes how to perform update and delete operations in ClickHouse'
show_related_blogs: false
doc_type: 'guide'
useCases: ['Data warehousing']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
Although ClickHouse is geared toward high volume analytic workloads, it is possible in some situations to modify or
delete existing data. These operations are labeled "mutations" and are executed using the `ALTER TABLE` command.
@@ -112,7 +102,3 @@ DELETE FROM hits WHERE Title LIKE '%hello%';
A few notes about lightweight deletes:
- This feature is only available for the `MergeTree` table engine family.
- Lightweight deletes are synchronous by default, waiting for all replicas to process the delete. The behavior is controlled by the [`lightweight_deletes_sync` setting](/reference/settings/session-settings#lightweight_deletes_sync).
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -10,7 +10,7 @@ import CloudPrerequisites from '/get-started/quickstarts/_prerequisites/cloud_pr
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
@@ -116,5 +116,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
-15
View File
@@ -6,19 +6,8 @@ description: 'Learn how to ingest and query data in ClickHouse using a New York
keywords: ['clickhouse', 'install', 'tutorial', 'dictionary', 'dictionaries', 'example', 'advanced', 'taxi', 'new york', 'nyc']
show_related_blogs: true
doc_type: 'guide'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
---
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
{/* AUTOGENERATED_END */}
## Overview {#overview}
Learn how to ingest and query data in ClickHouse using the New York City taxi example dataset.
@@ -528,7 +517,3 @@ Learn more about ClickHouse with the following documentation:
- [Integrate an external data source](/integrations/home): Review data source integration options, including files, Kafka, PostgreSQL, data pipelines, and many others.
- [Visualize data in ClickHouse](/integrations/connectors/data-visualization/index): Connect your favorite UI/BI tool to ClickHouse.
- [SQL Reference](/reference/home): Browse the SQL functions available in ClickHouse for transforming, processing and analyzing data.
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -2,17 +2,18 @@
sidebarTitle: 'Working with the Map type'
title: 'Working with the Map type in ClickHouse'
useCases: ['Observability']
products: ['OSS']
products: ['Cloud', 'OSS']
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.'
---
import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academy_cta_generic.mdx'
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="orange">OSS</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -291,5 +292,5 @@ Or go deeper with the reference documentation:
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<a href="home" className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
@@ -6,21 +6,8 @@ description: 'Learn about Selecting ClickHouse Data'
keywords: ['SELECT', 'data formats']
show_related_blogs: true
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">Real-Time Analytics</Badge>
<Badge size="lg" color="blue">Data Warehousing</Badge>
<Badge size="lg" color="blue">Observability</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
ClickHouse is a SQL database, and you query your data by writing the same type of `SELECT` queries you're already familiar with. For example:
```sql
@@ -71,7 +58,3 @@ Query id: 3604df1c-acfd-4117-9c56-f86c69721121
ClickHouse supports over 70 input and output formats, so between the thousands of functions and all the data formats, you can use ClickHouse to perform some impressive and fast ETL-like data transformations. In fact, you don't even
need a ClickHouse server up and running to transform data - you can use the `clickhouse-local` tool. View the [docs page of `clickhouse-local`](/concepts/features/interfaces/cli) for details.
</Note>
<div className="mt-8">
<a href="/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/get-started/quickstarts/home'; }} className="inline-flex items-center gap-1.5 text-sm text-gray-500 dark:text-zinc-500 hover:text-gray-900 dark:hover:text-[#fdff75] transition-colors font-normal no-underline"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="shrink-0"><path d="M19 12H5" /><path d="M12 19l-7-7 7-7" /></svg>All quickstarts</a>
</div>
-2
View File
@@ -57,8 +57,6 @@
"./snippets/[locales]/**/*.mdx",
"./[locales]/**/*.md",
"./snippets/[locales]/**/*.md",
"./**/_TEMPLATE.mdx",
"./**/_TEMPLATE.md",
"./**/README.md",
"./**/LICENSE.md",
"./**/COPYING.md",
-2
View File
@@ -161,8 +161,6 @@ export const IntegrationsBanner = () => {
};
export const HighlightedClickHouse = () => {
// The brush images are inlined as data URIs so the highlight paints with
// the heading instead of popping in after two extra network requests.
return (
<span className="relative inline-block px-8 py-3 -ml-4">
<img src="data:image/webp;base64,UklGRlAGAABXRUJQVlA4TEQGAAAv3cAZELdgpm3blNNrAGambduU02sAZqZt25TTawCmsG0jNXZ898wfgLvD/+fKt+UqV7UaVa0m5raBU33c6mGhIcMhIDBo2bYVRZDeA0RQke7eN/+5htFmpmvVV0X0fwLkf///x65P9EJFRB/0rumFOtGgIhpiEBXRJQdREV1iXGJYQrhYVETf0xuiDyoqoktwaQup5nUNfgl5CV509TEEp85voHFytD2IOD3sjEFU1PtlSet27sea/gAV/VupiKo4FVEfc5CwRI4yR5t91MSx5nrWUetZMTpGNxAgSJudcxIwwzSamZFkLjm7n/AvqIvuDRUR1T9B39GHuC7xTPuqy7L4fJ5x9E4OAISBNDMCNIAAia83Wgk/4HzYolN9WBbfZ1lV9SKEY3HL5vWZ/oCKioq70itdjuQ0+GFjALXaPCpImuEPJ8sPLEt0OS8p523bjwawbDE8xBzWyryu/kJdVH3QC73QKxUXnKj6uAeRJZQtHT17URXR5MJa0MaYeDSAIP6O9XveRxcrzUgaCQCk2ZhjYI5J2Ox1z1F9TP7IouKdiLtaREIQcWGvOa3RhzX6Le3JRzP0PsuyhnTWPo0Aib/uTPo1F7Zihu+SRjOzYb3sPoSScjhbWb0PY5aU86bHnLOVaaVUkAYjAIJmRgPxt2bavqVLmCR+14zWzmYD4NlHA4hpNgwkSJD4t5JfUgmJ+HkSAEE8Ev/276gPbRhuPcMX1E/Dvecc8o2G29/sK8fdGzkE9zkX6t1rXuWLznj3sMk3A3H3Gb/i2u2b/ivqJ+a9Q/6K7MSt50QT0c+FXO8dgO6r/5CKW9o5714bGB9yZ69n480b7aj1Q7psOeebx1Z3J59e8p7Oce8wyyKfi0s5cfOP6D+nweetGu8crap+TES9pL0Y7xuAc1XVT4k6v617u3MkbfNORD+hKksqR79zgxM0mz3pWyri3LLW3sd9m8AkALYhou9pWnLtxtvGyT4NExhDvNPXRHzIKQzceLaDvffaUGvrp3PrIqIvrKkP8L6NhlZa2fNe9rP3sRnmGd0zdUtc27htPNnOmtc1bCmdJ+qo7Thne8Evy1q68a6ldS179hp89DkXG72cnPUFFfVx38rgLbNdRUWc905dCiVXGvvks0sNmo52y7h5LyKiqt7HsFSbNkY/3nExHf2WoSyiIiIqzjm3FjPDONc3xKc6eM92r/JURUXSEmKS191WK4245+OVz+c6cN+DfD3Eow3etqFfU93qXuddg3zdxbidEzfdqn4v5Jhxv/nAJN8Py55qB3iz+pgATv2eUx9LGzbuFQlOAvF7os6FoxbcUn6hHnNiVPlNL2Er/U4MXvUx3ul2VY86AJSkP6EiMVbeh9nmVd3xbl55wVwxiTH8T4ioLqnP24DJK+x8jRjxCicBtN7rj4gufq/8G/HPwLia2xuTSE+sY4Ktnb8iwWvB5Xgy6iv257w65vihgwAIHu01TmwbAIJdCLKP+jNOtV/NJ81eGOfkn3I0PmllfoivzauwA5iA93wJhFvGA6gbMWFDf8SpCK+en7s9q2OOq05yvmDzguifszGfYD/6Z+ZrjyTTZiTIuNh8yRiWA5jTushp5BF+RUQ1PrErO/lsHKddTbTRrfOq8mKyvsVnAK+Io3I+8J2XScKIcYpmGNuhGhpJI41mLElF0zRLXlWOlOWntV0wkiDAUfmElfOKY6uj1icDT+2tF4lrTra+FwIcrxgB2BxGM2s4e5SSi4iKHnEXEdEt5rJsx7LtIcmjZreoiIjKr19h48QEy7r1J7PU8aTUupWCT/MDk1cNyKkc3QgYCZAwtq01JDnj5p0XFVEVERURFZVLlUeVv6E3gHbKJGAsS31Wy1YuyGMUzDLf6U/mCxwPxKi8AFDCHvQ0ou1jWD3qeogEERURUfkH6tFHiaLSjfUQETkJgzHs6bAH0Pu0784bAM5x1eeTFzlpBpA1kwBJdhFRlboV0ShOVP7NKqKrW+VRUzxzDU5FdJ0A2WPea9zKBV41EsAkJ2nsMJ51WN9FY2/jPGsSFRFREVG5jyoq19qqnZtcejkMAM9OkATHDiMn01rOMx+y+VWCBBERdSIqt9jJi5rb7KtIa5hnX0XPmBfxqvKiyp338ui8PKr87//fBg==" className="block dark:hidden absolute top-0 right-0 bottom-0 left-[10px] w-full h-full object-fill pointer-events-none select-none" alt="" aria-hidden="true" />
@@ -11,6 +11,7 @@ integration:
---
import { Image } from "/snippets/components/Image.jsx";
import PrivatePreviewBadge from "/snippets/components/PrivatePreviewBadge/PrivatePreviewBadge.jsx";
You can use [AWS PrivateLink](https://aws.amazon.com/privatelink/) to establish secure connectivity between VPCs,
AWS services, your on-premises systems, and ClickHouse Cloud without exposing traffic to the public Internet.
@@ -182,6 +183,8 @@ It requires setting up a NLB (Network Load Balancer) in front of your data sourc
and configuring the VPC endpoint service to use the NLB.
VPC endpoint service can be [configured with a private DNS](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html), that will be accessible in a ClickPipes VPC.
If your service can't use PrivateLink managed private DNS (for example, the provider requires
consumers to manage DNS resolution, as Confluent Cloud does), see [Custom private DNS](#custom-private-dns).
It's a preferred choice for:
@@ -201,6 +204,52 @@ See AWS guide for [managing permissions](https://docs.aws.amazon.com/vpc/latest/
can be configured for ClickPipes. Add [your ClickPipe region](#aws-privatelink-regions) to the allowed regions in your VPC endpoint service.
</Info>
## Custom private DNS {#custom-private-dns}
<PrivatePreviewBadge/>
<Info>
Custom private DNS is in **Private Preview**. Reach out to the [ClickHouse support team](https://clickhouse.com/support/program) to enable it for your service.
</Info>
AWS PrivateLink provides [managed private DNS](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html)
for VPC endpoint services with a verified domain. Some services require each consumer to manage DNS resolution in their own VPC, e.g., Confluent Cloud requires consumers to resolve broker hostnames to the PrivateLink endpoint.
For these cases, ClickPipes supports attaching custom private DNS names to a reverse private
endpoint. ClickPipes resolves these names to the endpoint's private addresses, so your data
source can be reached by its own hostname over private connectivity.
Custom private DNS complements managed private DNS — it doesn't replace it. If your
PrivateLink service already provides private DNS names, you don't need custom names.
Custom private DNS names are supported for the [VPC endpoint service](#vpc-endpoint-service)
and [VPC resource](#vpc-resource) endpoint types. MSK multi-VPC provides managed private DNS
out-of-the-box and doesn't support custom names.
The following rules apply to custom private DNS names:
- Exact names (`kafka.internal.example.com`) and wildcard names (`*.example.com`) are
supported. A wildcard matches a single DNS label — for example,
`*.abcde12345.us-east-1.aws.confluent.cloud` matches
`b0-lkc123.abcde12345.us-east-1.aws.confluent.cloud`.
- Names must be unique across all reverse private endpoints of a ClickHouse service,
including overlaps between wildcard and exact names.
- Names under reserved suffixes (e.g., `local`, `localhost`, `internal`, `corp`,
`private`) are rejected.
To configure custom private DNS names:
- In the ClickHouse Cloud console, fill in the `Custom private DNS name` field when
[creating a reverse private endpoint](#creating-clickpipe). The field is shown once the
feature is enabled for your service.
- With [OpenAPI](https://clickhouse.com/docs/cloud/manage/api/swagger), set
`customPrivateDnsMappings` when creating a reverse private endpoint, or update an existing
endpoint with a `PATCH` request. Updates replace the full list of mappings; an empty list
removes all custom names.
- With Terraform, use the
[`clickhouse_clickpipes_reverse_private_endpoint_custom_private_dns`](https://registry.terraform.io/providers/ClickHouse/clickhouse/latest/docs/resources/clickpipes_reverse_private_endpoint_custom_private_dns)
resource to manage mappings on an existing reverse private endpoint.
## Creating a ClickPipe with reverse private endpoint {#creating-clickpipe}
1. Access the SQL Console for your ClickHouse Cloud Service.
@@ -237,6 +286,7 @@ For same-region access, creating a VPC Resource is the recommended approach.
- For VPC resource, provide the configuration share ARN and configuration ID.
- For MSK multi-VPC, provide the cluster ARN and authentication method used with a created endpoint.
- For VPC endpoint service, provide the service name.
- Optionally, provide a [custom private DNS](#custom-private-dns) name.
7. Click on `Create` and wait for the reverse private endpoint to be ready.
@@ -249,7 +299,8 @@ For same-region access, creating a VPC Resource is the recommended approach.
8. Once the endpoint is ready, you can use a DNS name to connect to the data source.
On a list of endpoints, you can see the DNS name for the available endpoint.
It can be either an internally ClickPipes provisioned DNS name or a private DNS name supplied by a PrivateLink service.
It can be an internally ClickPipes provisioned DNS name, a private DNS name supplied by a PrivateLink service,
or a [custom private DNS name](#custom-private-dns).
DNS name isn't a complete network address.
Add the port according to the data source.
@@ -34,7 +34,7 @@ To integrate with a schema registry during ClickPipes configuration, you must us
ClickPipes connects to the schema registry over HTTPS at the URL you provide. The schema registry does not need to be publicly accessible.
If your Kafka brokers are reached through a [reverse private endpoint](/integrations/clickpipes/aws-privatelink) (AWS PrivateLink or GCP Private Service Connect), the schema registry can use the same private connectivity. ClickPipes resolves the registry hostname through the reverse private endpoint's private DNS, so a registry hosted privately alongside your brokers is reachable as long as its hostname resolves to the reverse private endpoint's private IP addresses (via the endpoint's private DNS support or a custom private DNS mapping).
If your Kafka brokers are reached through a [reverse private endpoint](/integrations/clickpipes/aws-privatelink) (AWS PrivateLink or GCP Private Service Connect), the schema registry can use the same private connectivity. ClickPipes resolves the registry hostname through the reverse private endpoint's private DNS, so a registry hosted privately alongside your brokers is reachable as long as its hostname resolves to the reverse private endpoint's private IP addresses (via the endpoint's private DNS support or a [custom private DNS mapping](/integrations/clickpipes/aws-privatelink#custom-private-dns)).
Keep the following in mind:
+2 -2
View File
@@ -16,7 +16,6 @@
"group": "はじめる",
"icon": "/images/menu-icon-lightning.svg",
"pages": [
"ja/get-started/quickstarts/home",
{
"expandable": true,
"expanded": true,
@@ -38,7 +37,8 @@
],
"root": "ja/get-started/use-cases/overview"
},
"ja/get-started/about/deployment-modes"
"ja/get-started/about/deployment-modes",
"ja/get-started/quickstarts/home"
],
"root": "ja/get-started/index"
},
@@ -1,7 +1,7 @@
---
sidebarTitle: 'Iceberg カタログに接続する'
title: 'ClickHouse Cloud で Iceberg カタログに接続する方法'
useCases: ['Data warehousing']
useCases: ['データウェアハウジング']
products: ['Cloud']
skillLevel: 'Beginner'
description: 'ClickHouse Cloud をデータカタログに接続し、Iceberg テーブルをクエリする方法を学びます。'
@@ -12,7 +12,7 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">データウェアハウジング</Badge>
@@ -103,5 +103,5 @@ Icebergカタログにまだデータがない場合は、このデータセッ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'materialized view の概要'
title: '初めての materialized view を作成する'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'ClickHouse の materialized view を使って、別のソート順でクエリ結果を事前計算して保存し、主キーに含まれないカラムに対する高速なルックアップを可能にする方法を学びます。'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -217,5 +220,5 @@ MergeTree の クイックスタート では、テーブルが `(postcode, addr
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
@@ -2,7 +2,7 @@
sidebarTitle: 'MergeTreeテーブルの概要'
title: '最初のMergeTreeテーブルを作成する'
useCases: ['All']
products: ['Cloud']
products: ['Cloud', 'OSS']
description: 'MergeTreeテーブルを作成し、英国の不動産価格データを読み込み、パーツとマージがストレージやクエリ性能にどう影響するかを確認しながら、ClickHouseの中核となるテーブルエンジンの仕組みを学びます。'
---
@@ -11,14 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* 自動生成開始 */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">リアルタイム分析</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -282,5 +283,5 @@ MergeTree エンジンは基盤です。ここから、その上に構築され
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
@@ -1,8 +1,8 @@
---
sidebarTitle: 'PROJECTIONの概要'
title: '初めてのPROJECTIONを作成する'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
useCases: ['All']
products: ['Cloud', 'OSS']
description: 'ClickHouse でPROJECTIONを使用して、同じテーブル内にデータの別のソート済みコピーを格納し、主キーに含まれないカラムに対する高速なルックアップを可能にする方法を学びます。'
---
@@ -11,12 +11,15 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">リアルタイム分析</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -225,5 +228,5 @@ MergeTree のクイックスタートでは、テーブルが `(postcode, addr1,
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
@@ -10,10 +10,10 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">リアルタイム分析</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
@@ -164,5 +164,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
@@ -5,24 +5,8 @@ slug: /guides/creating-tables
description: 'ClickHouse でのテーブルの作成について学びます'
keywords: ['テーブルの作成', 'CREATE TABLE', 'テーブル作成', 'データベースガイド', 'MergeTree エンジン']
doc_type: 'guide'
useCases: ['All']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
多くのデータベースと同様に、ClickHouse ではテーブルを論理的に **データベース** ごとにまとめます。ClickHouse で新しいデータベースを作成するには、`CREATE DATABASE` コマンドを使用します。
```sql
@@ -85,8 +69,4 @@ ClickHouseテーブルの主キーは、データがディスクに書き込ま
<Tip>
詳細については、ClickHouse Academy の [Modeling Data training module](https://learn.clickhouse.com/visitor_catalog_class/show/1328860/?utm_source=clickhouse\&utm_medium=docs) をご覧ください。
</Tip>
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
</Tip>
+100 -1
View File
@@ -7,7 +7,6 @@ mode: 'custom'
---
import { QuickStartsGrid } from '/snippets/ja/components/QuickStartsGrid/QuickStartsGrid.jsx'
import { quickStartsData } from '/snippets/ja/components/QuickStartsGrid/quickstarts-data.jsx'
{/* 注目のクイックスタート - 各クイックスタートには ID とバナー画像があります(タイトルは画像内にレンダリングされます) */}
@@ -17,6 +16,106 @@ export const featuredQuickstarts = [
{ id: 'obtain-your-cloud-connection-details' }
];
{/* クイックスタート用のデータを定義 */}
export const quickStartsData = [
{
id: 'connect-your-iceberg-catalog',
title: 'How to connect your Iceberg catalog in ClickHouse Cloud',
description: 'Learn how to connect ClickHouse Cloud to connect to your Data Catalog and query Iceberg tables.',
href: '/ja/get-started/quickstarts/connect-your-iceberg-catalog',
useCases: ['Data warehousing'],
products: ['Cloud'],
},
{
id: 'create-your-first-materialized-view',
title: 'Create your first materialized view',
description: 'Learn how to use materialized views in ClickHouse to pre-compute and store query results with a different sort order, enabling fast lookups on columns not covered by your primary key.',
href: '/ja/get-started/quickstarts/create-your-first-materialized-view',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-mergetree-table',
title: 'Create your first MergeTree table',
description: 'Learn how ClickHouses primary table engine works by creating a MergeTree table, loading UK property price data, and observing how parts and merges affect storage and query performance.',
href: '/ja/get-started/quickstarts/create-your-first-mergetree-table',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-projection',
title: 'Create your first projection',
description: 'Learn how to use projections in ClickHouse to store an additional sorted copy of your data within the same table, enabling fast lookups on columns not covered by your primary key.',
href: '/ja/get-started/quickstarts/create-your-first-projection',
useCases: ['All'],
products: ['Cloud', 'OSS'],
},
{
id: 'create-your-first-service-on-cloud',
title: 'Create your first Cloud service and load example data',
description: 'Create a ClickHouse Cloud service, explore the SQL console, and load an example dataset to start querying real data in minutes.',
href: '/ja/get-started/quickstarts/create-your-first-service-on-cloud',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'creating-tables',
title: 'Creating tables in ClickHouse',
description: 'Learn about Creating Tables in ClickHouse',
href: '/ja/get-started/quickstarts/creating-tables',
useCases: [],
products: [],
},
{
id: 'insert-data-using-clickhouse-client',
title: 'Insert data into ClickHouse Cloud using clickhouse-client',
description: 'Learn how to use clickhouse-client to insert data from local CSV and Parquet files into a ClickHouse Cloud service from the command line.',
href: '/ja/get-started/quickstarts/insert-data-using-clickhouse-client',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'mutations',
title: 'Updating and deleting ClickHouse data',
description: 'Describes how to perform update and delete operations in ClickHouse',
href: '/ja/get-started/quickstarts/mutations',
useCases: [],
products: [],
},
{
id: 'obtain-your-cloud-connection-details',
title: 'Obtain your Cloud connection details',
description: 'Learn how to find the hostname, port, and credentials for your ClickHouse Cloud service so you can connect from external clients, CLIs, and applications.',
href: '/ja/get-started/quickstarts/obtain-your-cloud-connection-details',
useCases: ['All'],
products: ['Cloud'],
},
{
id: 'tutorial',
title: 'Advanced tutorial',
description: 'Learn how to ingest and query data in ClickHouse using a New York City taxi example dataset.',
href: '/ja/get-started/quickstarts/tutorial',
useCases: [],
products: [],
},
{
id: 'working-with-the-map-type',
title: 'Working with the Map type in ClickHouse',
description: 'Learn how to use the Map type in ClickHouse to store, query, and aggregate dynamic key-value data using OTel resource attributes as a practical example.',
href: '/ja/get-started/quickstarts/working-with-the-map-type',
useCases: ['Observability'],
products: ['Cloud', 'OSS'],
},
{
id: 'writing-queries',
title: 'Selecting ClickHouse Data',
description: 'Learn about Selecting ClickHouse Data',
href: '/ja/get-started/quickstarts/writing-queries',
useCases: [],
products: [],
},
];
<div className="relative overflow-hidden">
<div className="absolute top-0 left-0 right-0 opacity-80">
@@ -10,10 +10,10 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">リアルタイム分析</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
@@ -195,5 +195,5 @@ clickhouse-client をインストールし、サンプルデータセットを
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
+1 -18
View File
@@ -6,21 +6,8 @@ title: 'ClickHouseデータの更新と削除'
description: 'ClickHouseで更新および削除操作を実行する方法を説明します'
show_related_blogs: false
doc_type: 'guide'
useCases: ['Data warehousing']
products: ['OSS']
---
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="orange">OSS</Badge>
</div>
{/* AUTOGENERATED_END */}
ClickHouse は大量の分析ワークロード向けに設計されていますが、状況によっては既存データの変更や削除を行うこともできます。これらの操作は「ミューテーション」と呼ばれ、`ALTER TABLE` コマンドを使用して実行します。
<Tip>
@@ -120,8 +107,4 @@ DELETE FROM hits WHERE Title LIKE '%hello%';
論理削除に関する補足:
* この機能は、`MergeTree` テーブルエンジンファミリーでのみ利用できます。
* 論理削除はデフォルトで同期的に実行され、すべてのレプリカが削除を処理するまで待機します。この動作は、[`lightweight_deletes_sync` 設定](/ja/reference/settings/session-settings#lightweight_deletes_sync) で制御されます。
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
* 論理削除はデフォルトで同期的に実行され、すべてのレプリカが削除を処理するまで待機します。この動作は、[`lightweight_deletes_sync` 設定](/ja/reference/settings/session-settings#lightweight_deletes_sync) で制御されます。
@@ -11,10 +11,10 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">リアルタイム分析</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="blue">AI/ML</Badge>
@@ -127,5 +127,5 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
+1 -19
View File
@@ -6,22 +6,8 @@ description: 'ニューヨーク市のタクシーのサンプルデータセッ
keywords: ['clickhouse', 'install', 'チュートリアル', 'dictionary', 'dictionaries', 'example', 'advanced', 'taxi', 'new york', 'nyc']
show_related_blogs: true
doc_type: 'guide'
useCases: ['Real-time analytics', 'Data warehousing']
products: ['Cloud']
---
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">リアルタイムアナリティクス</Badge>
<Badge size="lg" color="blue">データウェアハウジング</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
</div>
{/* AUTOGENERATED_END */}
<div id="overview">
## 概要
</div>
@@ -541,8 +527,4 @@ ClickHouse についてさらに詳しくは、以下のドキュメントをご
* [ClickHouse のプライマリインデックス入門](/ja/guides/clickhouse/data-modelling/sparse-primary-indexes): ClickHouse がクエリ時に関連データを効率的に特定するために、スパースプライマリインデックスをどのように使用しているかを学べます。
* [外部データソースを連携する](/ja/integrations/home): ファイル、Kafka、PostgreSQL、データパイプラインなど、データソースのインテグレーションオプションを確認できます。
* [ClickHouse でデータを可視化する](/ja/integrations/connectors/data-visualization/index): お使いの UI/BI ツールを ClickHouse に接続できます。
* [SQL リファレンス](/ja/reference/home): データの変換、処理、分析に使用できる、ClickHouse の SQL 関数を参照できます。
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">すべてのクイックスタート</Badge></a>
</div>
* [SQL リファレンス](/ja/reference/home): データの変換、処理、分析に使用できる、ClickHouse の SQL 関数を参照できます。
@@ -1,8 +1,8 @@
---
sidebarTitle: 'Map 型の利用'
title: 'ClickHouse での Map 型の利用'
useCases: ['Observability']
products: ['OSS']
useCases: ['オブザーバビリティ']
products: ['Cloud', 'OSS']
description: 'OTel の リソース属性 を実例に、ClickHouse で動的なキー・バリュー データを保存、クエリ、集計するための Map 型の使い方を学びます。'
---
@@ -10,11 +10,12 @@ import ClickHouseAcademyCTA from '/get-started/quickstarts/_academy-ctas/_academ
{/* AUTOGENERATED_START */}
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">クイックスタート一覧</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">クイックスタート一覧</Badge></a>
<div className="mt-2 flex flex-wrap gap-2">
<Badge size="lg" color="blue">オブザーバビリティ</Badge>
<Badge size="lg" color="orange">OSS</Badge>
<Badge size="lg" color="orange">Cloud</Badge>
<Badge size="lg" color="orange">Oss</Badge>
</div>
{/* AUTOGENERATED_END */}
@@ -302,5 +303,5 @@ OpenTelemetry では、すべてのトレーススパンに **リソース属性
<ClickHouseAcademyCTA />
<div className="mt-8">
<a href="/ja/get-started/quickstarts/home" onClick={(e) => { e.preventDefault(); window.location.href = (window.location.pathname.startsWith('/docs') ? '/docs' : '') + '/ja/get-started/quickstarts/home'; }}><Badge size="lg" color="gray" icon="arrow-left">クイックスタート一覧</Badge></a>
<a href="/ja/get-started/quickstarts/home"><Badge size="lg" color="gray" icon="arrow-left">クイックスタート一覧</Badge></a>
</div>

Some files were not shown because too many files have changed in this diff Show More