mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
Merge branch 'master' into sparsity-filter-trivial-count
This commit is contained in:
@@ -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).
|
||||
|
||||
@@ -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,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"):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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())
|
||||
@@ -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);
|
||||
});
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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")
|
||||
@@ -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")
|
||||
|
||||
@@ -8,6 +8,7 @@ strip = true
|
||||
inherits = "release"
|
||||
lto = true
|
||||
|
||||
@RUST_DEV_PROFILE@
|
||||
[source.vendored-sources]
|
||||
directory = "@RUST_VENDOR_DIR@"
|
||||
|
||||
|
||||
Vendored
+1
-1
Submodule contrib/delta-kernel-rs updated: 857565caf9...318b616bae
@@ -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)
|
||||
|
||||
Vendored
+1
-1
Submodule contrib/rust_vendor updated: e7b13e76a6...dc6a9073fc
@@ -31,4 +31,3 @@ _site/styles/
|
||||
/_description_templates/
|
||||
/changelogs/
|
||||
/en/
|
||||
/get-started/quickstarts/_TEMPLATE.mdx
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 مُصمَّم لأحمال العمل التحليلية كبيرة الحجم، فمن الممكن في بعض الحالات تعديل البيانات الموجودة أو
|
||||
حذفها. تُسمّى هذه العمليات "mutations" وتُنفَّذ باستخدام الأمر `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>
|
||||
@@ -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>
|
||||
@@ -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
@@ -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"
|
||||
},
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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 "mutaciones" 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>
|
||||
@@ -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>
|
||||
@@ -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
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -57,8 +57,6 @@
|
||||
"./snippets/[locales]/**/*.mdx",
|
||||
"./[locales]/**/*.md",
|
||||
"./snippets/[locales]/**/*.md",
|
||||
"./**/_TEMPLATE.mdx",
|
||||
"./**/_TEMPLATE.md",
|
||||
"./**/README.md",
|
||||
"./**/LICENSE.md",
|
||||
"./**/COPYING.md",
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
Reference in New Issue
Block a user