Client ClickHouse Node.js — Codage
Référence : https://clickhouse.com/docs/integrations/javascript
⚠️ Runtime Node.js uniquement. Cette compétence couvre le package
@clickhouse/clients'exécutant dans un runtime Node.js exclusivement — y compris les routes API Next.js Node runtime, React Server Components, Server Actions et les processus Node.js standard. N'appliquez pas cette compétence aux composants clients du navigateur, Web Workers, Next.js Edge runtime, Cloudflare Workers ou toute utilisation de@clickhouse/client-web. Pour les environnements navigateur/edge, le package correct est@clickhouse/client-web.
Comment utiliser cette compétence
- Associez l'intention de l'utilisateur à une ligne de l'index des tâches ci-dessous et lisez le fichier de référence correspondant avant d'écrire le code. Après l'avoir lu, parcourez tout checklist de réponse dans cette référence et assurez-vous que la réponse finale couvre chaque élément pertinent ; ces checklists capturent les détails que les utilisateurs ont généralement besoin mais qui sont faciles à oublier dans les réponses courtes.
- Importez toujours depuis
@clickhouse/client(jamais@clickhouse/client-web) et créez un client aveccreateClient({ url })ou reposez-vous sur les défauts supportés le cas échéant. Fermez-le avecawait client.close()de préférence quand il n'est plus nécessaire ou lors de l'arrêt gracieux pour les ressources globales. - Préférez
JSONEachRowpour les insertions/sélections de lignes typiques sauf si l'utilisateur a déjà choisi un autre format ou diffuse des octets bruts (CSV / TSV / Parquet — voirexamples/node/performance/). Note surclickhouse_settings: les paramètres passés àcreateClientsont les défauts pour chaque requête ; ils peuvent être remplacés par appel en passantclickhouse_settingsdirectement àinsert(),query()oucommand(). Mentionnez toujours ceci quand l'utilisateur configure les paramètres au niveau du client. - Utilisez toujours
query_paramspour les valeurs fournies par l'utilisateur — ne les interpolez jamais par template-literal dans SQL. Voirreference/query-parameters.md. Quand vous répondez à une question sur la liaison de paramètres, votre réponse doit explicitement nommer l'interpolation par template-literal comme un "risque d'injection SQL" — même si l'utilisateur n'a demandé que la syntaxe et n'a pas soulevé de préoccupation de sécurité. La phrase littérale « injection SQL » doit apparaître ; c'est l'erreur la plus courante des utilisateurs PostgreSQL/MySQL et le cadrage de sécurité est une partie de la réponse correcte, pas une remarque optionnelle. - Choisissez la bonne méthode pour la tâche :
client.insert()— écrire des lignes.client.query()+resultSet.json()/.text()/.stream()— lire les lignes qui retournent des données.client.command()— DDL et autres instructions qui ne retournent pas de lignes (CREATE,DROP,TRUNCATE,ALTER,SETdans une session, etc.).client.exec()— quand vous avez besoin du flux de réponse brut d'une instruction arbitraire (rare dans les scénarios de codage).client.ping()— vérification de santé ; retourne{ success, error? }, ne lève jamais d'erreur en cas d'échec de connexion.
- Notez les contraintes de version quand elles sont pertinentes. Exemples :
- option de configuration
pathname: client>= 1.0.0. - valeurs
BigIntdansquery_params: client>= 1.15.0. TupleParamet JSMapdansquery_params: client>= 1.9.0.json.parse/json.stringifyconfigurables : client>= 1.14.0.- types de données
Time/Time64: serveur ClickHouse>= 25.6. - types
Dynamic/Variant/JSONnouveaux : serveur ClickHouse>= 24.1/24.5/24.8(plus expérimentaux depuis25.3).
- option de configuration
Index des tâches
Identifiez la tâche de l'utilisateur et lisez le fichier de référence correspondant.
| Tâche | Déclencheurs / symptômes | Fichier de référence |
|---|---|---|
| Configurer / connecter le client | Construction d'un appel createClient, paramètres URL, clickhouse_settings, format par défaut, headers HTTP personnalisés |
reference/client-configuration.md |
| Faire un ping au serveur | Vérifications de santé, sondes de disponibilité, « ClickHouse est-il en ligne ? » | reference/ping.md |
| Choisir un format d'insertion | « Quel format dois-je utiliser pour insérer ? », JSON vs brut, JSONEachRow vs JSON vs JSONObjectEachRow |
reference/insert-formats.md |
| Insérer dans un sous-ensemble de colonnes / base de données différente | insert({ columns }), exclusion de colonnes, colonnes éphémères, insertions cross-DB |
reference/insert-columns.md |
| Insérer des valeurs, expressions, dates, décimales | INSERT … VALUES avec fonctions SQL, Date/DateTime depuis JS, précision Decimal, INSERT … SELECT |
reference/insert-values.md |
| Insertions asynchrones (batching côté serveur) | async_insert=1, fire-and-forget vs attendre-acquittement |
reference/async-insert.md |
| Sélectionner et parser les résultats | lectures JSONEachRow, JSON avec métadonnées, choisir un format de sélection |
reference/select-formats.md |
| Paramétrer les requêtes | Liaison de valeurs, caractères spéciaux / échappement, « injection SQL ? », syntaxe {name: Type} |
reference/query-parameters.md |
| Sessions & tables temporaires | session_id, CREATE TEMPORARY TABLE, commandes SET par session |
reference/sessions.md |
| Types de données modernes | Dynamic, Variant, JSON (objet), Time, Time64 |
reference/data-types.md |
| Parse/stringify JSON personnalisés | Intégrer JSONBig / safe-stable-stringify / un sérialiseur conscient de BigInt |
reference/custom-json.md |
Conventions utilisées dans les réponses
- Montrez toujours
import { createClient } from '@clickhouse/client'(Node, jamais Web). - Toujours
await client.close()à la fin des snippets autonomes ; dans les services longue durée, fermez lors de l'arrêt gracieux. - Pour les insertions, préférez
format: 'JSONEachRow'etvalues: [...]sauf si le scénario de l'utilisateur l'exige autrement. - Pour les sélections, préférez
await (await client.query({...})).json<RowType>()pour les petits / moyens ensembles de résultats ; pour les plus grands résultats, suggérez le streaming. - Quand vous montrez la liaison de paramètres, utilisez la syntaxe native ClickHouse
{name: Type}— jamais$1,?ou:name. - Pour DDL à l'intérieur d'un cluster ou derrière un équilibreur de charge, définissez
clickhouse_settings: { wait_end_of_query: 1 }sur l'appelcommand()pour que le serveur n'accuse réception que après que la modification soit appliquée. Voir https://clickhouse.com/docs/en/interfaces/http/#response-buffering.
Hors de portée
Cette compétence couvre le codage quotidien par rapport à @clickhouse/client (Node).
Les sujets suivants ne sont intentionnellement pas couverts ici :
- Erreurs, blocages, incompatibilités de types, surprises de pathname proxy, silence des logs,
déconnexions de socket,
ECONNRESET→ utilisez la compétenceclickhouse-js-node-troubleshooting. - Streaming, Parquet, flux de fichiers, mouvements en masse côté serveur, streaming de progression, tuning du débit async-insert — voir
examples/node/performance/. - TLS, RBAC / utilisateurs en lecture seule, guidance plus approfondie sur l'injection SQL — voir
examples/node/security/. - Patterns
CREATE TABLE, chaînes de connexion orientées déploiement, choix de réplication / sharding — voirexamples/node/schema-and-deployments/. - Navigateur, Web Worker, Next.js Edge, Cloudflare Workers — utilisez
@clickhouse/client-webet voirexamples/web/.
Toujours bloqué ?
examples/node/coding/— le corpus exécutable sur lequel cette compétence est construite.- Docs du client JS ClickHouse
- Formats supportés par ClickHouse
- Types de données ClickHouse