← Analytics / analytics / analytics-engine
Dotazování z Workeru
Pokud chcete přistupovat k datům Analytics Engine přímo z Workeru, můžete použít fetch pro přístup k SQL API. API může vracet data ve formátu JSON, se kterými se snadno pracuje v JavaScriptu.
Ověřování
Aby se váš Worker mohl ověřit vůči API, budete potřebovat ID účtu a API token.
- Své 32znakové ID účtu najdete v dashboardu Cloudflare.
- API token lze také vygenerovat v dashboardu. Více informací najdete v Dokumentace SQL API kde najdete další informace.
Doporučujeme ukládat ID účtu jako proměnnou prostředí a API token jako Secret ve svém Workeru. Provést to můžete přes dashboard nebo přes Wrangler. Viz Dokumentace Workers kde najdete další podrobnosti.
Dotazování
Použijte JavaScript fetch API pro spuštění dotazu následujícím způsobem:
const query = "SELECT * FROM my_dataset";
const API = `https://api.cloudflare.com/client/v4/accounts/${env.ACCOUNT_ID}/analytics_engine/sql`;
const response = await fetch(API, {
method: "POST",
headers: {
Authorization: `Bearer ${env.API_TOKEN}`,
},
body: query,
});
const responseJSON = await response.json();Data se vrátí ve formátu popsaném v FORMAT sekci dokumentace, která vám umožňuje získat metainformace o názvech a typech vrácených sloupců, a to kromě samotných dat a počtu řádků.
Příklad Workeru
Následuje ukázkový Worker, který spustí dotaz nad datovou sadou meteorologických záznamů a pro každé město zobrazí minimální a maximální hodnoty.
Nastavení proměnných prostředí
Nejprve se nastaví proměnné prostředí s ID účtu a API tokenem.
ID účtu se nastavuje v Konfigurační soubor Wrangler:
{
"vars": {
"ACCOUNT_ID": "<account_id>"
}
}[vars]
ACCOUNT_ID = "<account_id>"Proměnnou API_TOKEN můžete nastavit jako tajný klíč (secret) pomocí nástroje příkazové řádky wrangler. Spusťte následující příkaz a zadejte řetězec svého tokenu:
npx wrangler secret put API_TOKENWorker skript
Samotný skript workeru provede dotaz a naformátuje výsledek:
export default {
async fetch(request, env) {
// This worker only responds to requests at the root.
if (new URL(request.url).pathname != "/") {
return new Response("Not found", { status: 404 });
}
// SQL string to be executed.
const query = `
SELECT
blob1 AS city,
max(double1) as max_temp,
min(double1) as min_temp
FROM weather
WHERE timestamp > NOW() - INTERVAL '1' DAY
GROUP BY city
ORDER BY city`;
// Build the API endpoint URL and make a POST request with the query string
const API = `https://api.cloudflare.com/client/v4/accounts/${env.ACCOUNT_ID}/analytics_engine/sql`;
const queryResponse = await fetch(API, {
method: "POST",
headers: {
Authorization: `Bearer ${env.API_TOKEN}`,
},
body: query,
});
// The API will return a 200 status code if the query succeeded.
// In case of failure we log the error message and return a failure message.
if (queryResponse.status != 200) {
console.error("Error querying:", await queryResponse.text());
return new Response("An error occurred!", { status: 500 });
}
// Read the JSON data from the query response and render the data as HTML.
const queryJSON = await queryResponse.json();
return new Response(renderResponse(queryJSON.data), {
headers: { "content-type": "text/html" },
});
},
};
// renderCity renders a table row as HTML from a data row.
function renderCity(row) {
return `<tr><td>${row.city}</td><td>${row.min_temp}</td><td>${row.max_temp}</td></tr>`;
}
// renderResponse renders a simple HTML table of results.
function renderResponse(data) {
return `<!DOCTYPE html>
<html>
<body>
<table>
<tr><th>City</th><th>Min Temp</th><th>Max Temp</th></tr>
${data.map(renderCity).join("\n")}
</table>
</body>
<html>`;
}