Service
Learn how to create, configure, and manage Clickhouse databases using Alchemy.
The Service resource lets you create and manage Clickhouse Services using Alchemy.
Basic Example
Section titled “Basic Example”Pass your organization name directly as a string.
import { Service } from "alchemy/clickhouse";
const service = await Service("clickhouse", { organization: "my-organization", provider: "aws", region: "us-east-1", minReplicaMemoryGb: 8, maxReplicaMemoryGb: 356, numReplicas: 3,});
Using Organization ID
Section titled “Using Organization ID”Pass an organization ID directly instead of a name.
const service = await Service("clickhouse", { organization: "org_abc123def456", provider: "aws", region: "us-east-1", minReplicaMemoryGb: 8, maxReplicaMemoryGb: 356, numReplicas: 3,});
Using OrganizationRef
Section titled “Using OrganizationRef”Look up an organization by name to get additional metadata.
import { Service, OrganizationRef } from "alchemy/clickhouse";
const organization = await OrganizationRef("my-organization");
const service = await Service("clickhouse", { organization, provider: "aws", region: "us-east-1", minReplicaMemoryGb: 8, maxReplicaMemoryGb: 356, numReplicas: 3,});
Example with Cloudflare Worker
Section titled “Example with Cloudflare Worker”import alchemy from "alchemy";import { Service } from "alchemy/clickhouse";import { Worker } from "alchemy/cloudflare";
export const app = await alchemy("alchemy-test-clickhouse");
const service = await Service("clickhouse", { organization: "my-organization", provider: "aws", region: "us-east-1", minReplicaMemoryGb: 8, maxReplicaMemoryGb: 356, numReplicas: 3,});
const serviceEndpoint = service.endpoints.find( (endpoint) => endpoint.protocol === "https",)!;
export const worker = await Worker("worker", { entrypoint: "./src/worker.ts", bindings: { CLICKHOUSE_URL: `https://${serviceEndpoint.host}:${serviceEndpoint.port}`, CLICKHOUSE_PASSWORD: service.password, },});
await app.finalize();
import type { worker } from "../alchemy.run";import { createClient } from "@clickhouse/client-web";
export default { async fetch(req: Request, env: typeof worker.Env): Promise<Response> { const url = new URL(req.url); const clickhouseClient = createClient({ url: env.CLICKHOUSE_URL, password: env.CLICKHOUSE_PASSWORD, });
if (url.pathname === "/read") { const query = "SELECT id, time FROM worker_log"; const result = await clickhouseClient.query({ query, format: "JSONEachRow", }); const rows = await result.json(); return new Response(JSON.stringify(rows), { headers: { "Content-Type": "application/json" }, }); } else if (url.pathname === "/") { const id = crypto.randomUUID(); await clickhouseClient.insert({ table: "worker_log", values: [{ id, time: new Date().toISOString() }], format: "JSONEachRow", }); return new Response(JSON.stringify({ success: true }), { headers: { "Content-Type": "application/json" }, }); } else { return new Response("Not found", { status: 404 }); } },};