کتابخانه‌ی استاندارد · پایگاه داده

کلیک هاوس db/clickhouse

کلاینت ClickHouse از راه رابط HTTP: دستور، ردیف‌های نوع‌دار، درج دسته‌ای و رابط مشترک دیتابیس.

واردسازی دیتابیس.کلیک هاوس

ClickHouse یک پایگاه داده‌ی ستونی برای تحلیل داده است: میلیاردها ردیف را سریع می‌پیماید و درج را دسته‌ای و بزرگ می‌پذیرد. این بسته با net.http از راه رابط HTTP آن (درگاه ۸۱۲۳، یا ۸۴۴۳ با TLS) با آن حرف می‌زند، پس نه کتابخانه‌ی درایور لازم است و نه پروتکل بومی. نتیجه‌ها به شکل JSONCompact می‌رسند و عددهای صحیح ۶۴ بیتی در نقل‌قول می‌آیند تا هیچ‌کدام رقمی از دست ندهند.

با باز کردن یا باز کردن نشانی اتصال بسازید، با اجرا دستور بفرستید، با پرسمان ردیف بخوانید و با دسته چندین ردیف را یکجا بارگذاری کنید. مقدارها را یا با تابع‌های آرگومان مثل آرگومان رشته و آرگومان صحیح که گریز می‌دهند، یا با جاگیرهای نوع‌دار {name:Type} خود ClickHouse در SQL بگذارید. به دیتابیس اتصال را با رابط مشترک دیتابیس سازگار می‌کند. دستوری که پشت وضعیت ۲۰۰ شکست بخورد، چون کارگزار هنگام ارسال پاسخ به استثنا برخورد کرده، هم گرفته می‌شود و مثل هر شکست دیگر در خطا و کد دیده می‌شود.

این بسته پروتکل بومی TCP یا RowBinary را نمی‌فهمد، فشرده‌سازی ندارد و هنوز گویشی در db/sql ندارد. هر بخش صفحه‌ی زیر یک قسمت از API است و هر کدام مثال اجرایی دارد.

گذاشتن امن مقدارها در SQL

هرگز SQL را با چسباندن رشته‌ها نسازید. هر مقدار را با یک تابع آرگومان بسازید که آن را نقل‌قول و فرار می‌کند و بگذارید پیوند مقدارها را به ترتیب در جاهای ? بگذارد. پیوند چیزی اجرا نمی‌کند، پس راه خوبی برای دیدن متن نهایی هم هست. ? درون نقل‌قول یا توضیح جا حساب نمی‌شود و اگر تعداد مقدارها با تعداد جاها فرق کند نتیجه خالی است.

db-clickhouse-guide-args.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا آرگ := وکتور {} برگردان وکتور<رشته>
    آرگ.بیفزا(کلیک هاوس.آرگومان رشته("o'brien"))
    آرگ.بیفزا(کلیک هاوس.آرگومان صحیح(۴۲ برگردان صحیح۶۴))
    سرچاپ کلیک هاوس.پیوند("SELECT * FROM users WHERE name = ? AND age > ?"، آرگ)
    ناپایا یک := وکتور {} برگردان وکتور<رشته>
    یک.بیفزا(کلیک هاوس.آرگومان صحیح(۷ برگردان صحیح۶۴))
    سرچاپ کلیک هاوس.پیوند("SELECT '?' AS mark, ? /* ? */"، یک)
    سرچاپ کلیک هاوس.نقل قول شناسه("my table")
    سرچاپ کلیک هاوس.پیوند("SELECT ?"، آرگ).طول()
پایان
خروجیSELECT * FROM users WHERE name = 'o\'brien' AND age > 42 SELECT '?' AS mark, 7 /* ? */ `my table` 0

نقل‌قول در o'brien خودکار فرار می‌شود. نام جدول و ستون مقدار نیستند و باید از نقل قول شناسه بگذرند. اجرا و پرسمان هم وقتی مقدارها را بدهید همین جایگذاری را انجام می‌دهند.

اتصال و ساختن جدول

از گزینه‌های پیش‌فرض شروع کنید (سروری روی همین دستگاه و کاربر default) و آنچه فرق دارد را عوض کنید. باز کردن هنوز چیزی نمی‌فرستد، پس با پینگ ببینید سرور جواب می‌دهد یا نه. اجرا دستوری را اجرا می‌کند که ردیفی برنمی‌گرداند و در موفقیت درست می‌دهد؛ در شکست خطا و کد علت را می‌گویند.

db-clickhouse-guide-connect.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا گ := کلیک هاوس.گزینه‌های پیش‌فرض()
    گ.نشانی = "127.0.0.1:8123"
    گ.پایگاه داده = "default"
    گ.نام کاربری = "default"
    ناپایا ا := کلیک هاوس.باز کردن(گ)
    دیرکن ا.بستن()
    اگر وارونه ا.پینگ():
        سرچاپ "no ClickHouse at"، گ.نشانی
        برگشت ۱
    پایان
    سرچاپ ا.نسخه کارگزار()

    هیچ := وکتور {} برگردان وکتور<رشته>
    خوب := ا.اجرا("CREATE TABLE IF NOT EXISTS visits (day Date, page String, hits UInt32) ENGINE = MergeTree ORDER BY (day, page)"، هیچ)
    اگر وارونه خوب:
        سرچاپ "create failed:"، ا.کد()، ا.خطا()
        برگشت ۱
    پایان
    سرچاپ "table ready"
پایان

جدول از موتور MergeTree استفاده می‌کند که موتور معمول است و ORDER BY آن کلید مرتب‌سازی است که پرسمان روی روز و صفحه را سریع می‌کند. کلیک‌هاوس کلید خودافزای و تراکنشی که منتظرش بمانید ندارد؛ دستور با برگشتن اجرا تمام شده است.

درج به صورت دسته‌ای

کلیک‌هاوس چند درج بزرگ را بیشتر از درج‌های کوچک فراوان دوست دارد. آماده‌سازی دسته بخش INSERT INTO table (columns) را می‌گیرد، افزودن یک ردیف از مقدارهای آماده‌ی SQL می‌افزاید و ارسال دسته همه‌ی ردیف‌ها را در یک درخواست می‌فرستد. اگر ردیف تعداد مقدار متفاوتی با ستون‌ها داشته باشد افزودن نادرست برمی‌گرداند.

db-clickhouse-guide-insert.salam
واردسازی دیتابیس.کلیک هاوس

تابع ردیف(روز: رشته، صفحه: رشته، بازدید: صحیح۶۴): وکتور<رشته>:
    ناپایا ر := وکتور {} برگردان وکتور<رشته>
    ر.بیفزا(کلیک هاوس.آرگومان رشته(روز))
    ر.بیفزا(کلیک هاوس.آرگومان رشته(صفحه))
    ر.بیفزا(کلیک هاوس.آرگومان صحیح(بازدید))
    برگشت ر
پایان

تابع ریشه:
    ناپایا ا := کلیک هاوس.باز کردن(کلیک هاوس.گزینه‌های پیش‌فرض())
    دیرکن ا.بستن()
    ناپایا دسته := ا.آماده‌سازی دسته("INSERT INTO visits (day, page, hits)")
    اگر دسته.خطا().طول() بزرگتر 0:
        سرچاپ دسته.خطا()
        برگشت ۱
    پایان
    دسته.افزودن(ردیف("2026-11-01"، "/"، ۱۲۰ برگردان صحیح۶۴))
    دسته.افزودن(ردیف("2026-11-01"، "/docs"، ۴۵ برگردان صحیح۶۴))
    دسته.افزودن(ردیف("2026-11-02"، "/"، ۹۸ برگردان صحیح۶۴))
    سرچاپ دسته.طول()، "rows queued"
    اگر وارونه ا.ارسال دسته(دسته):
        سرچاپ "insert failed:"، ا.خطا()
        برگشت ۱
    پایان
    سرچاپ "inserted"
پایان

صدها یا هزاران ردیف در هر دسته اندازه‌ی خوبی برای شروع است. دسته‌ای که ردیف ندارد یا از قبل خطا دارد فرستاده نمی‌شود.

خواندن ردیف‌ها

پرسمان یک ردیف‌ها برمی‌گرداند. معتبر را ببینید، بعد در یک حلقه بعدی را صدا بزنید و ردیف جاری را با شماره‌ی ستون با متن، صحیح۶۴ و خواننده‌های دیگر بخوانید؛ در پایان بستن را بزنید. حلقه با تا نوشته می‌شود چون تا تا وقتی شرطش درست است اجرا می‌کند. برای مقداری که از بیرون می‌آید، جانگهدارهای نوع‌دار {name:Type} در پرسمان با پارامتر می‌گذارند خود سرور نوع را بررسی کند.

db-clickhouse-guide-query.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا ا := کلیک هاوس.باز کردن(کلیک هاوس.گزینه‌های پیش‌فرض())
    دیرکن ا.بستن()
    ناپایا آرگ := وکتور {} برگردان وکتور<رشته>
    آرگ.بیفزا(کلیک هاوس.آرگومان رشته("2026-11-01"))
    ناپایا ردیف‌ها := ا.پرسمان("SELECT page, sum(hits) AS total FROM visits WHERE day >= ? GROUP BY page ORDER BY total DESC"، آرگ)
    اگر وارونه ردیف‌ها.معتبر():
        سرچاپ ردیف‌ها.خطا()
        برگشت ۱
    پایان
    تا ردیف‌ها.بعدی():
        سرچاپ ردیف‌ها.متن(۰)، ردیف‌ها.صحیح۶۴(۱)
    پایان
    ردیف‌ها.بستن()

    ناپایا پارامتر := نگاشت {} برگردان نگاشت<رشته، رشته>
    پارامتر.درج("page"، "/docs")
    ناپایا یک := ا.پرسمان با پارامتر("SELECT sum(hits) FROM visits WHERE page = {page:String}"، پارامتر)
    تا یک.بعدی():
        سرچاپ "docs:"، یک.صحیح۶۴(۰)
    پایان
    یک.بستن()
پایان

تابع تجمیعی مثل sum(hits) در کلیک‌هاوس عدد صحیح ۶۴ بیتی است که در JSON با نقل‌قول می‌آید و صحیح۶۴ آن را بدون از دست رفتن رقم می‌خواند.

گونه‌ها

گزینه‌ها Options

ساختار گزینه‌ها
راه رسیدن به کارگزار.
نامانگلیسیگونهتوضیح
نشانیaddrرشته = "localhost:8123"میزبان و درگاه به شکل host:port؛ http:// یا https:// در ابتدا پذیرفته می‌شود. درگاه پیش‌فرض ۸۱۲۳ است و در حالت امن ۸۴۴۳.
پایگاه دادهdatabaseرشته = ""پایگاه داده‌ای که هر دستور در آن اجرا می‌شود؛ خالی یعنی پیش‌فرض کاربر.
نام کاربریusernameرشته = "default"نام کاربری که در X-ClickHouse-User فرستاده می‌شود. پیش‌فرض default است.
گذرواژهpasswordرشته = ""گذرواژه که در X-ClickHouse-Key فرستاده می‌شود.
امنsecureمنطقی = نادرستاز HTTPS استفاده شود.
مهلت میلی‌ثانیهtimeout_msصحیح = 30000بیشینه‌ی زمان یک درخواست به میلی‌ثانیه.
تنظیماتsettingsنگاشت<رشته، رشته>تنظیمات ClickHouse که با هر درخواست فرستاده می‌شود، مثل max_threads.
سرآیندهاheadersنگاشت<رشته، رشته>سرآیندهای HTTP اضافه برای هر درخواست.
db-clickhouse-Connect.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا o := کلیک هاوس.گزینه‌های پیش‌فرض()
    o.نشانی = "127.0.0.1:8123"
    o.پایگاه داده = "shop"
    o.نام کاربری = "default"
    o.گذرواژه = ""
    o.امن = نادرست
    o.مهلت میلی‌ثانیه = 10000
    o.تنظیمات.درج("max_threads"، "4")
    o.سرآیندها.درج("X-Request-Source"، "docs")
    سرچاپ کلیک هاوس.درگاه پیش‌فرض، کلیک هاوس.درگاه امن پیش‌فرض

    ناپایا c := کلیک هاوس.باز کردن(o)
    اگر وارونه c.پینگ():
        سرچاپ "no server:"، c.خطا()، c.وضعیت
        برگشت
    پایان
    سرچاپ c.نسخه کارگزار()، c.پایه، c.باز

    byurl := کلیک هاوس.باز کردن نشانی("clickhouse://default:@127.0.0.1:8123/shop?max_threads=4")
    سرچاپ byurl.معتبر()، byurl.گزینه‌ها.پایگاه داده

    none := وکتور {} برگردان وکتور<رشته>
    سرچاپ c.اجرا("CREATE TABLE IF NOT EXISTS events (id UInt64, name String) ENGINE = MergeTree ORDER BY id"، none)
    ناپایا ins := نگاشت {} برگردان نگاشت<رشته، رشته>
    ins.درج("id"، "1")
    ins.درج("name"، "first")
    سرچاپ c.اجرا با پارامتر("INSERT INTO events VALUES ({id:UInt64}, {name:String})"، ins)
    سرچاپ c.اجرا با تنظیمات("OPTIMIZE TABLE events"، none، o.تنظیمات)
    ناپایا pn := نگاشت {} برگردان نگاشت<رشته، رشته>
    pn.درج("n"، "7")
    سرچاپ c.اجرای کامل("SELECT {n:UInt8}"، pn، نگاشت {} برگردان نگاشت<رشته، رشته>)
    اگر وارونه c.معتبر():
        سرچاپ "failed with code"، c.کد()، c.خطا()
    پایان
    سرچاپ c.شناسه پرسمان، c.ردیف‌های خوانده، c.ردیف‌های نوشته
    c.بستن()
پایان

اتصال Conn

ساختار اتصال
اتصال به یک کارگزار ClickHouse از راه رابط HTTP آن. هر فراخوانی یک درخواست HTTP است و چیزی برای زنده نگه داشتن نیست. پس از فراخوانی ناموفق معتبر نادرست است و خطا و کد دلیل را می‌گویند؛ فراخوانی بعدی آن‌ها را پاک می‌کند.
نامانگلیسیگونهتوضیح
گزینه‌هاoptsگزینه‌هاگزینه‌هایی که اتصال با آن‌ها باز شد.
پایهbaseرشته = ""نشانی پایه، مثل http://127.0.0.1:8123.
بازconnectedمنطقی = نادرستپس از بستن یا اگر نشانی نامعتبر بود نادرست است.
وضعیتstatusصحیح = 0وضعیت HTTP آخرین پاسخ؛ اگر پاسخی نیامد ۰.
پیام خطاerrرشته = ""متن آخرین خطا.
کد خطاcodeصحیح = 0کد استثنای ClickHouse در آخرین شکست؛ بدون خطا ۰.
شناسه پرسمانquery_idرشته = ""شناسه‌ای که کارگزار به آخرین درخواست داد.
ردیف‌های خواندهread_rowsصحیح۶۴ = 0تعداد ردیف‌هایی که آخرین درخواست خواند، از سرآیند خلاصه‌ی کارگزار.
ردیف‌های نوشتهwritten_rowsصحیح۶۴ = 0تعداد ردیف‌هایی که آخرین درخواست نوشت، از سرآیند خلاصه‌ی کارگزار.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

معتبر Ok

تابع معتبر(): منطقی
وقتی اتصال باز است و آخرین فراخوانی شکست نخورده درست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

خطا Error

تابع خطا(): رشته
متن آخرین خطا؛ اگر آخرین فراخوانی درست بود خالی است. شکستی که کارگزار میانه‌ی پاسخ گزارش کند هم، با وجود وضعیت ۲۰۰، گرفته می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

کد Code

تابع کد(): صحیح
کد استثنای ClickHouse در آخرین شکست، خوانده‌شده از سرآیند X-ClickHouse-Exception-Code یا متن Code: N در بدنه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

بستن Close

تابع بستن()
اتصال را می‌بندد؛ فراخوانی‌های بعدی با خطا شکست می‌خورند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

پینگ Ping

تابع پینگ(): منطقی
از /ping می‌پرسد؛ اگر کارگزار پاسخ دهد درست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

اجرا Exec

تابع اجرا(sql: رشته، args: وکتور<رشته>): منطقی
دستوری را اجرا می‌کند که ردیفی برنمی‌گرداند. هر ? با مقدار بعدی args جایگزین می‌شود که با آرگومان رشته، آرگومان صحیح و دیگر تابع‌های آرگومان ساخته شده است. علامت سؤال داخل نقل‌قول و توضیح دست‌نخورده می‌ماند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

اجرا با پارامتر ExecParams

تابع اجرا با پارامتر(sql: رشته، params: نگاشت<رشته، رشته>): منطقی
دستوری را با جاگیرهای نوع‌دار خود ClickHouse یعنی {name:Type} اجرا می‌کند که به شکل پارامتر param_name فرستاده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

اجرا با تنظیمات ExecWith

تابع اجرا با تنظیمات(sql: رشته، args: وکتور<رشته>، settings: نگاشت<رشته، رشته>): منطقی
مانند اجرا، با تنظیمات ClickHouse فقط برای همین فراخوانی که به تنظیمات گزینه‌ها افزوده می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

اجرای کامل ExecFull

تابع اجرای کامل(sql: رشته، params: نگاشت<رشته، رشته>، extra: نگاشت<رشته، رشته>): منطقی
دستوری را هم با پارامتر نوع‌دار و هم با تنظیمات همین فراخوانی اجرا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

پرسمان Query

تابع پرسمان(sql: رشته، args: وکتور<رشته>): ردیف‌ها
پرسمانی را اجرا می‌کند و ردیف‌هایش را برمی‌گرداند، با جاگیر ? مثل اجرا. معتبر نتیجه را بررسی کنید و در پایان بستن را بزنید.
db-clickhouse-Query.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا c := کلیک هاوس.باز کردن(کلیک هاوس.گزینه‌های پیش‌فرض())
    دیرکن c.بستن()
    none := وکتور {} برگردان وکتور<رشته>

    ناپایا args := وکتور {} برگردان وکتور<رشته>
    args.بیفزا(کلیک هاوس.آرگومان طبیعی(10 برگردان طبیعی۶۴))
    ناپایا rows := c.پرسمان("SELECT id, name, price, tags, active FROM events WHERE id >= ?"، args)
    اگر وارونه rows.معتبر():
        سرچاپ rows.خطا()
        برگشت
    پایان
    سرچاپ rows.تعداد ستون()، rows.تعداد ردیف()، rows.جمع
    تکرار rows.تعداد ستون() در i:
        سرچاپ i، rows.نام ستون(i)، rows.نوع ستون(i)، rows.دسته ستون(i)، rows.شماره ستون(rows.نام ستون(i))
    پایان
    تا rows.بعدی():
        سرچاپ rows.طبیعی۶۴(0)، rows.صحیح۶۴(0)، rows.صحیح(0)، rows.متن(1)، rows.اعشار(2)، rows.منطقی(4)
        سرچاپ rows.تهی است(1)، rows.خام(3)، rows.فهرست(3).طول()، rows.ردیف().طول()
        سرچاپ rows.متن با نام("name")، rows.صحیح۶۴ با نام("id")، rows.اعشار با نام("price")
    پایان
    سرچاپ rows.جایگاه، rows.نام‌ها.طول()، rows.نوع‌ها.طول()، rows.ردیف‌ها.طول()، rows.سلول‌ها.طول()
    rows.بستن()

    ناپایا params := نگاشت {} برگردان نگاشت<رشته، رشته>
    params.درج("min"، "10")
    ناپایا byname := c.پرسمان با پارامتر("SELECT count() FROM events WHERE id >= {min:UInt64}"، params)
    سرچاپ byname.معتبر()
    byname.بستن()

    ناپایا limits := نگاشت {} برگردان نگاشت<رشته، رشته>
    limits.درج("max_execution_time"، "5")
    ناپایا limited := c.پرسمان با تنظیمات("SELECT sum(id) FROM events"، none، limits)
    سرچاپ limited.معتبر()
    limited.بستن()

    ناپایا full := c.پرسمان کامل("SELECT {min:UInt64}"، params، limits)
    سرچاپ full.معتبر()
    full.بستن()

    first := c.پرسمان یک ردیف("SELECT id, name FROM events ORDER BY id LIMIT 1"، none)
    اگر first.طول() برابر 2:
        سرچاپ first.بگیر(0)، first.بگیر(1)
    پایان
    سرچاپ c.پرسمان متن("SELECT version()")، c.پرسمان عدد("SELECT count() FROM events")
پایان

پرسمان با پارامتر QueryParams

تابع پرسمان با پارامتر(sql: رشته، params: نگاشت<رشته، رشته>): ردیف‌ها
پرسمانی را با جاگیرهای نوع‌دار {name:Type} اجرا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

پرسمان با تنظیمات QueryWith

تابع پرسمان با تنظیمات(sql: رشته، args: وکتور<رشته>، settings: نگاشت<رشته، رشته>): ردیف‌ها
مانند پرسمان، با تنظیمات فقط برای همین فراخوانی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

پرسمان یک ردیف QueryRow

تابع پرسمان یک ردیف(sql: رشته، args: وکتور<رشته>): وکتور<رشته>
پرسمانی را اجرا می‌کند و ردیف اول را به شکل مقدارهای متنی برمی‌گرداند؛ اگر ردیفی نبود یا پرسمان شکست خورد، وکتور خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

پرسمان کامل QueryFull

تابع پرسمان کامل(sql: رشته، params: نگاشت<رشته، رشته>، extra: نگاشت<رشته، رشته>): ردیف‌ها
پرسمانی را با پارامتر نوع‌دار و تنظیمات همین فراخوانی اجرا می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

پرسمان متن QueryText

تابع پرسمان متن(sql: رشته): رشته
ستون اول ردیف اول به شکل متن؛ اگر نبود خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

پرسمان عدد QueryInt

تابع پرسمان عدد(sql: رشته): صحیح۶۴
ستون اول ردیف اول به شکل عدد صحیح ۶۴ بیتی؛ اگر نبود ۰.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

نسخه کارگزار ServerVersion

تابع نسخه کارگزار(): رشته
نسخه‌ی کارگزار، از SELECT version().

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

آماده‌سازی دسته PrepareBatch

تابع آماده‌سازی دسته(sql: رشته): دسته
درج دسته‌ای را از INSERT INTO table (columns) آغاز می‌کند؛ VALUES یا نقطه‌ویرگول پایانی کنار گذاشته می‌شود. هر چیز دیگر دسته‌ای می‌دهد که خطای آن دلیل را می‌گوید.
db-clickhouse-Batch.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا c := کلیک هاوس.باز کردن(کلیک هاوس.گزینه‌های پیش‌فرض())
    دیرکن c.بستن()

    ناپایا b := c.آماده‌سازی دسته("INSERT INTO events (id, name, tags, score)")
    اگر b.خطا().طول() بزرگتر 0:
        سرچاپ b.خطا()
        برگشت
    پایان
    سرچاپ b.سرآیند، b.پهنا

    ناپایا tags := وکتور {} برگردان وکتور<رشته>
    tags.بیفزا(کلیک هاوس.آرگومان رشته("a"))
    tags.بیفزا(کلیک هاوس.آرگومان رشته("b"))
    ناپایا row := وکتور {} برگردان وکتور<رشته>
    row.بیفزا(کلیک هاوس.آرگومان صحیح(1 برگردان صحیح۶۴))
    row.بیفزا(کلیک هاوس.آرگومان رشته("o'brien"))
    row.بیفزا(کلیک هاوس.آرگومان آرایه(tags))
    row.بیفزا(کلیک هاوس.آرگومان اعشاری(2.5))
    سرچاپ b.افزودن(row)

    again := کلیک هاوس.آرگومان‌ها(row)
    سرچاپ b.افزودن(again)
    سرچاپ c.ارسال دسته(b)

    ناپایا broken := c.آماده‌سازی دسته("INSERT INTO events (id, name, tags, score)")
    ناپایا bad := وکتور {} برگردان وکتور<رشته>
    bad.بیفزا(کلیک هاوس.آرگومان تهی())
    سرچاپ broken.افزودن(bad)، broken.خطا()، broken.طول()، broken.ردیف‌ها.طول()
    broken.رها کردن()

    keys := کلیک هاوس.آرگومان‌ها(tags)
    سرچاپ کلیک هاوس.آرگومان نگاشت(keys، keys)
    سرچاپ کلیک هاوس.آرگومان چندتایی(keys)، کلیک هاوس.آرگومان منطقی(درست)، کلیک هاوس.آرگومان خام("now()")
    سرچاپ کلیک هاوس.نقل قول شناسه("my table")
پایان

ارسال دسته SendBatch

تابع ارسال دسته(b: دسته): منطقی
همه‌ی ردیف‌های دسته را در یک INSERT می‌فرستد؛ اگر دسته خالی یا خراب باشد یا کارگزار نپذیرد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

ردیف‌ها Rows

ساختار ردیف‌ها
نتیجه‌ی یک پرسمان: نام و نوع ستون‌ها و ردیف‌ها به شکل JSON. با بعدی پیش بروید و ردیف جاری را با شماره یا نام ستون بخوانید.
نامانگلیسیگونهتوضیح
نام‌هاnamesوکتور<رشته>نام ستون‌ها.
نوع‌هاtypesوکتور<رشته>نوع ستون‌ها همان‌طور که ClickHouse می‌نویسد، مثل Nullable(String).
ردیف‌هاrowsوکتور<رشته>همه‌ی ردیف‌ها، هر یک به شکل متن JSON.
سلول‌هاcellsوکتور<رشته>مقدارهای ردیف جاری به شکل متن JSON.
جایگاهposصحیح = -1شماره‌ی ردیف جاری؛ پیش از نخستین بعدی برابر ۱- است.
جمعtotalصحیح۶۴ = 0تعداد ردیفی که کارگزار گزارش کرد.
پیام خطاerrرشته = ""متن خطا؛ اگر پرسمان درست بود خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

معتبر Ok

تابع معتبر(): منطقی
اگر پرسمان درست اجرا شد درست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

خطا Error

تابع خطا(): رشته
متن خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

بعدی Next

تابع بعدی(): منطقی
به ردیف بعدی می‌رود؛ اگر ردیفی نمانده باشد نادرست است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

تعداد ردیف RowCount

تابع تعداد ردیف(): صحیح
تعداد ردیف‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

تعداد ستون ColumnCount

تابع تعداد ستون(): صحیح
تعداد ستون‌ها.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

نام ستون ColumnName

تابع نام ستون(col: صحیح): رشته
نام یک ستون، با شماره.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

نوع ستون ColumnType

تابع نوع ستون(col: صحیح): رشته
نوع ClickHouse یک ستون، با شماره.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

دسته ستون ColumnKind

تابع دسته ستون(col: صحیح): صحیح
گروه KIND_... نوع یک ستون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

شماره ستون ColumnIndex

تابع شماره ستون(name: رشته): صحیح
شماره‌ی ستونی با این نام، یا ۱-.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

خام Raw

تابع خام(col: صحیح): رشته
مقدار ردیف جاری به شکل متن JSON.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

تهی است IsNull

تابع تهی است(col: صحیح): منطقی
مقدار NULL است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

متن Text

تابع متن(col: صحیح): رشته
مقدار به شکل متن، بدون نقل‌قول JSON.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

صحیح۶۴ Int64

تابع صحیح۶۴(col: صحیح): صحیح۶۴
مقدار به شکل عدد صحیح ۶۴ بیتی. ClickHouse عددهای ۶۴ بیتی را رشته می‌فرستد و این بدون از دست دادن دقت می‌خواند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

صحیح Int

تابع صحیح(col: صحیح): صحیح
مقدار به شکل عدد صحیح ۳۲ بیتی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

طبیعی۶۴ UInt64

تابع طبیعی۶۴(col: صحیح): طبیعی۶۴
مقدار به شکل عدد صحیح بدون علامت ۶۴ بیتی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

اعشار Float

تابع اعشار(col: صحیح): اعشار۶۴
مقدار به شکل عدد اعشاری؛ nan و inf فهمیده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

منطقی Bool

تابع منطقی(col: صحیح): منطقی
مقدار به شکل بولی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

فهرست List

تابع فهرست(col: صحیح): وکتور<رشته>
مقدار آرایه به شکل وکتور عنصرهای متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

متن با نام TextBy

تابع متن با نام(name: رشته): رشته
مانند متن، با نام ستون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

صحیح۶۴ با نام Int64By

تابع صحیح۶۴ با نام(name: رشته): صحیح۶۴
مانند صحیح۶۴، با نام ستون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

اعشار با نام FloatBy

تابع اعشار با نام(name: رشته): اعشار۶۴
مانند اعشار، با نام ستون.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

ردیف Row

تابع ردیف(): وکتور<رشته>
کل ردیف جاری به شکل وکتوری از مقدارهای متنی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

بستن Close

تابع بستن()
ردیف‌ها را آزاد می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

دسته Batch

ساختار دسته
ردیف‌های جمع‌شده برای یک درج. هر ردیف را از تابع‌های آرگومان بسازید، با افزودن اضافه کنید و دسته را با ارسال دسته بفرستید.
نامانگلیسیگونهتوضیح
سرآیندheadرشته = ""بخش INSERT INTO table (columns).
پهناwidthصحیح = 0تعداد ستون‌هایی که درج نام می‌برد؛ اگر نام نبرد ۰.
ردیف‌هاrowsوکتور<رشته>ردیف‌های افزوده‌شده تا اینجا، هر کدام از پیش به شکل SQL.
پیام خطاerrرشته = ""متن خطا؛ اگر دسته سالم است خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

افزودن Append

تابع افزودن(values: وکتور<رشته>): منطقی
ردیفی از مقدارهای SQL اضافه می‌کند؛ اگر تعداد با تعداد ستون‌ها فرق داشته باشد، نادرست است و خطا پر می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

طول Len

تابع طول(): صحیح
تعداد ردیف‌های افزوده‌شده.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

خطا Error

تابع خطا(): رشته
متن خطا.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

رها کردن Abort

تابع رها کردن()
ردیف‌ها را دور می‌ریزد و خطا را پاک می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

پایاها و متغیرها

درگاه پیش‌فرض DEFAULT_PORT

پایا درگاه پیش‌فرض: صحیح۳۲ = 8123
درگاه پیش‌فرض HTTP، یعنی ۸۱۲۳.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

درگاه امن پیش‌فرض DEFAULT_SECURE_PORT

پایا درگاه امن پیش‌فرض: صحیح۳۲ = 8443
درگاه پیش‌فرض HTTPS، یعنی ۸۴۴۳؛ وقتی امن روشن است و نشانی درگاه ندارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

نوع دیگر KIND_OTHER

پایا نوع دیگر: صحیح۳۲ = 0
دسته‌ی نوع ستون: نوعی که رفتار ویژه ندارد.
db-clickhouse-Types.salam
واردسازی دیتابیس.کلیک هاوس

تابع ریشه:
    ناپایا args := وکتور {} برگردان وکتور<رشته>
    args.بیفزا(کلیک هاوس.آرگومان صحیح(7 برگردان صحیح۶۴))
    args.بیفزا(کلیک هاوس.آرگومان رشته("it's"))
    سرچاپ کلیک هاوس.پیوند("SELECT ? AS id, ? AS name"، args)

    t := "LowCardinality(Nullable(String))"
    سرچاپ کلیک هاوس.نوع پایه(t)، کلیک هاوس.نوع تهی‌پذیر است(t)
    سرچاپ کلیک هاوس.دسته نوع("Array(Int32)") برابر کلیک هاوس.نوع آرایه
    سرچاپ کلیک هاوس.نوع عنصر("Array(Nullable(Int32))")
    سرچاپ کلیک هاوس.نوع دیگر، کلیک هاوس.نوع صحیح، کلیک هاوس.نوع طبیعی، کلیک هاوس.نوع اعشاری، کلیک هاوس.نوع دهدهی، کلیک هاوس.نوع رشته
    سرچاپ کلیک هاوس.نوع منطقی، کلیک هاوس.نوع تاریخ، کلیک هاوس.نوع تاریخ‌زمان، کلیک هاوس.نوع نگاشت، کلیک هاوس.نوع چندتایی
پایان

نوع صحیح KIND_INT

پایا نوع صحیح: صحیح۳۲ = 1
دسته‌ی نوع ستون: عدد صحیح علامت‌دار، از Int8 تا Int256.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع طبیعی KIND_UINT

پایا نوع طبیعی: صحیح۳۲ = 2
دسته‌ی نوع ستون: عدد صحیح بدون علامت، از UInt8 تا UInt256.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع اعشاری KIND_FLOAT

پایا نوع اعشاری: صحیح۳۲ = 3
دسته‌ی نوع ستون: عدد اعشاری، Float32 یا Float64.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع دهدهی KIND_DECIMAL

پایا نوع دهدهی: صحیح۳۲ = 4
دسته‌ی نوع ستون: یک Decimal.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع رشته KIND_STRING

پایا نوع رشته: صحیح۳۲ = 5
دسته‌ی نوع ستون: متن: String، FixedString، UUID، Enum، IPv4، IPv6.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع منطقی KIND_BOOL

پایا نوع منطقی: صحیح۳۲ = 6
دسته‌ی نوع ستون: یک Bool.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع تاریخ KIND_DATE

پایا نوع تاریخ: صحیح۳۲ = 7
دسته‌ی نوع ستون: یک Date یا Date32.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع تاریخ‌زمان KIND_DATETIME

پایا نوع تاریخ‌زمان: صحیح۳۲ = 8
دسته‌ی نوع ستون: یک DateTime یا DateTime64.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع آرایه KIND_ARRAY

پایا نوع آرایه: صحیح۳۲ = 9
دسته‌ی نوع ستون: یک Array یا Nested.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع نگاشت KIND_MAP

پایا نوع نگاشت: صحیح۳۲ = 10
دسته‌ی نوع ستون: یک Map.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع چندتایی KIND_TUPLE

پایا نوع چندتایی: صحیح۳۲ = 11
دسته‌ی نوع ستون: یک Tuple.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

تابع‌ها

آرگومان رشته StrArg

تابع آرگومان رشته(s: رشته): رشته
رشته‌ای را به شکل لفظ SQL نقل‌قول‌شده درمی‌آورد، با گریز نقل‌قول، بک‌اسلش و شکست خط.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نقل قول شناسه QuoteIdent

تابع نقل قول شناسه(name: رشته): رشته
نام جدول یا ستون را در بک‌تیک می‌گذارد.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان صحیح IntArg

تابع آرگومان صحیح(n: صحیح۶۴): رشته
عدد صحیح علامت‌دار به شکل لفظ SQL.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان طبیعی UIntArg

تابع آرگومان طبیعی(n: طبیعی۶۴): رشته
عدد صحیح بدون علامت به شکل لفظ SQL.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Query.salam

آرگومان اعشاری FloatArg

تابع آرگومان اعشاری(x: اعشار۶۴): رشته
عدد اعشاری به شکل لفظ SQL؛ nan، inf و -inf همان‌طور که ClickHouse می‌خواند نوشته می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان منطقی BoolArg

تابع آرگومان منطقی(b: منطقی): رشته
مقدار بولی به شکل true یا false.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان تهی NullArg

تابع آرگومان تهی(): رشته
لفظ NULL.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان خام RawArg

تابع آرگومان خام(sql: رشته): رشته
متن SQL که بی‌تغییر می‌گذرد، مثل now(). هرگز با ورودی کاربر به کار نبرید.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان آرایه ArrayArg

تابع آرگومان آرایه(items: وکتور<رشته>): رشته
لفظ آرایه از عنصرهایی که از پیش لفظ SQL هستند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان چندتایی TupleArg

تابع آرگومان چندتایی(items: وکتور<رشته>): رشته
لفظ چندتایی از عنصرهایی که از پیش لفظ SQL هستند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان نگاشت MapArg

تابع آرگومان نگاشت(keys: وکتور<رشته>، values: وکتور<رشته>): رشته
لفظ map(...) از کلیدها و مقدارهایی که از پیش لفظ SQL هستند؛ فهرست کوتاه‌تر اندازه را تعیین می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

آرگومان‌ها Args

تابع آرگومان‌ها(items: وکتور<رشته>): وکتور<رشته>
وکتور را بی‌تغییر برمی‌گرداند؛ فقط فراخوانی را شبیه فهرست آرگومان می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Batch.salam

پیوند Bind

تابع پیوند(sql: رشته، args: وکتور<رشته>): رشته
مقدارها را در جای ? های SQL می‌گذارد و متن را بدون اجرا برمی‌گرداند. اگر تعداد‌ها نخواند، خالی است.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع پایه BaseType

تابع نوع پایه(t: رشته): رشته
نوع پس از برداشتن Nullable(...) و LowCardinality(...).

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع تهی‌پذیر است IsNullableType

تابع نوع تهی‌پذیر است(t: رشته): منطقی
نوع Nullable است، شاید درون LowCardinality.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

دسته نوع TypeKind

تابع دسته نوع(t: رشته): صحیح
گروه KIND_... یک نوع.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

نوع عنصر ElementType

تابع نوع عنصر(t: رشته): رشته
نوع عنصر یک Array(...)؛ برای هر چیز دیگر خالی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Types.salam

گزینه‌های پیش‌فرض DefaultOptions

تابع گزینه‌های پیش‌فرض(): گزینه‌ها
گزینه‌ها برای کارگزاری روی همین دستگاه: localhost:8123، کاربر default، بدون گذرواژه.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

باز کردن Open

تابع باز کردن(o: گزینه‌ها): اتصال
از گزینه‌ها اتصالی می‌سازد. هنوز چیزی فرستاده نمی‌شود؛ پینگ وجود کارگزار را بررسی می‌کند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

باز کردن نشانی OpenURL

تابع باز کردن نشانی(dsn: رشته): اتصال
از نشانی‌ای مثل clickhouse://user:pass@host:8123/db?secure=true&max_threads=4 اتصال می‌سازد. clickhouses://، http:// و https:// هم کار می‌کنند. database، username، password، secure و timeout گزینه‌ها را می‌گذارند؛ هر کلید دیگر یک تنظیم ClickHouse می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: db-clickhouse-Connect.salam

به دیتابیس AsDb

تابع به دیتابیس(c: اتصال): dyn db.Connection
اتصال را به شکل dyn db.Connection درمی‌آورد تا کدی که برای رابط مشترک دیتابیس نوشته شده روی ClickHouse هم کار کند. اجرا ۰ یا ۱- برمی‌گرداند، تعداد تغییرات ردیف‌های نوشته‌شده‌ی آخرین درخواست است، شناسه آخرین درج همیشه ۰ است و تراکنش هر دستور را همان لحظه اجرا می‌کند: ClickHouse تراکنش ندارد، پس ثبت تراکنش ۰ و بازگردانی ۱- برمی‌گرداند.
db-clickhouse-Shared.salam
واردسازی دیتابیس
واردسازی دیتابیس.کلیک هاوس

تابع total(c: پویا دیتابیس.اتصال، table: رشته): صحیح:
    برگشت دیتابیس.پرسمان عدد(c، "SELECT count() FROM " + table)
پایان

تابع ریشه:
    c := کلیک هاوس.باز کردن(کلیک هاوس.گزینه‌های پیش‌فرض())
    d := کلیک هاوس.به دیتابیس(c)
    دیرکن d.بستن()
    سرچاپ d.نوع() برابر دیتابیس.کلیک هاوس، d.پینگ()
    سرچاپ total(d، "events")
    r := d.پرسمان("SELECT id, name FROM events LIMIT 5")
    تا r.بعدی():
        سرچاپ r.عدد صحیح۶۴(0)، r.متن(1)، r.نوع ستون(0)
    پایان
    r.بستن()
    t := d.شروع تراکنش()
    سرچاپ t.اجرا("INSERT INTO events VALUES (99, 'x')")، t.ثبت تراکنش()
پایان