Cloudflare + Deta Worker serving a decentralized, stateful, serverless URL Engine platform for ClickHouse.
The serverless API enables separate ClickHouse servers to access external distributed tables hosted on the cloud and share any type of data between nodes and 3rd party applications in real-time through the native URL Engine and Functions available in ClickHouse.
The distributed URL engine platform is running on Cloudflare Workers and utilizing Deta Cloud as backend.
- Cloudflare Worker NDJSON Proxy (limited to 100k req/day) *
- Cloudflare Worker API Handler (limited to 100k req/day) *
- Deta Micros + Base Storage (unlimited requests, max 10k/inserts/query) *
https://urleng.com/{yoursupersecretkeygoeshere}
The following examples illustrates usage for distributed INSERT and SELECT statements
:) INSERT INTO FUNCTION url('https://urleng.com/supersecret', JSONEachRow, 'key String, value UInt64') VALUES ('hello', 1), ('world', 2):) SELECT * FROM url('https://urleng.com/supersecret', JSONEachRow);
┌─key───┬─value─┐
│ hello │ 1 │
│ world │ 2 │
└───────┴───────┘
2 rows in set. Elapsed: 0.126 sec. :) CREATE TABLE default.url_engine_distributed
(
`key` String,
`value` UInt64,
)
ENGINE = URL('https://urleng.com/supersecret', 'JSONEachRow'):) INSERT INTO url_engine_distributed VALUES ('hello', 1), ('world', 2)
:) SELECT * FROM url_engine_distributed
┌─key───┬─value─┐
│ hello │ 1 │
│ world │ 2 │
└───────┴───────┘
2 rows in set. Elapsed: 0.185 sec. Items can be set to expire by including an __expires key in the object carrying a future Unix timestamp:
:) CREATE TABLE default.url_engine_expire
(
`key` String,
`value` UInt64,
`__expires` UInt64 DEFAULT toUInt64(toUnixTimestamp(now() + interval 24 hour))
)
ENGINE = URL('https://urleng.com/supersecret', 'JSONEachRow')Get data into clickhouse-local with zero efforts:
clickhouse-local -q "select count() from url('https://urleng.com/supersecret', JSONEachRow)"Get data using chdb in-memory engine:
python -m chdb "SELECT * from url('https://urleng.com/xxx', JSONEachRow, 'key String, value UInt64');" PrettyInsert and query data using curl or any other HTTP/S GET/POST capable client.
curl -s -XPOST https://urleng.com/supersecret \
-H 'Content-Type:application/x-ndjson' --data-binary @ndjson.txtcurl -X POST https://url-engine.metrico.in/supersecret \
-H 'Content-Type: application/json' -d '[{"key":"curl","value":1}]'curl -X GET https://urleng.com/supersecretINSERTSare updates. Existing data will be replaced. Runtime limit ~1000 records per INSERT.SELECTpulls the full table, pending X-Header extensions to prefilterWHEREstatements.- Because there is no sign-up, the URL
/pathis essentially a password, so pick something unique.
- URLENG Prometheus Metrics Storage + Exporter
- URLENG Stand Alone example for self-hosted caches (in memory)
- URLENG ClickHouse Fiddle example
(C) 2022 QXIP BV, for more info visit the qxip metrico repository
