INTEGRITY Документация

Начало работы

1. Назовите свой набор данных и добавьте его в свой Worker

Добавьте следующее в свой конфигурационный файл Wrangler чтобы создать привязка в набор данных Workers Analytics Engine. Набор данных похож на таблицу в SQL: строки и столбцы должны иметь согласованное значение.

{
	"analytics_engine_datasets": [
		{
			"binding": "<BINDING_NAME>",
			"dataset": "<DATASET_NAME>"
		}
	]
}
[[analytics_engine_datasets]]
binding = "<BINDING_NAME>"
dataset = "<DATASET_NAME>"

2. Записывайте точки данных из своего Worker

Чтобы записывать точки данных в свой Worker, вызовите writeDataPoint() метод, доступный в binding, который вы только что создали.

async fetch(request, env) {
  env.WEATHER.writeDataPoint({
    'blobs': ["Seattle", "USA", "pro_sensor_9000"], // City, State
    'doubles': [25, 0.5],
    'indexes': ["a3cd45"]
  });
  return new Response("OK!");
}

Точка данных представляет собой структурированное событие, которое включает:

In the example above, suppose you are collecting air quality samples. Each data point written represents a reading from your weather sensor. The blobs define city, state, and sensor model, the dimensions you want to be able to filter queries on later. The doubles define the numeric temperature and air pressure readings. And the index is the ID of your customer. You may want to include контекст о входящем запросе, например геолокацию, чтобы добавить в точку данных дополнительные сведения.

В настоящее время writeDataPoint() API принимает упорядоченные массивы значений. Это означает, что поля нужно указывать в неизменном порядке. Хотя indexes поле принимает массив, но в настоящее время нужно указывать только один индекс. Если вы попытаетесь указать несколько индексов, ваша точка данных не будет записана.

3. Выполняйте запросы к данным с помощью SQL API

Записанные данные можно запрашивать двумя способами:

В этом примере мы используем SQL API.

Создание API-токена

Создайте API-токен ↗ у которого есть Account Analytics Read разрешение.

Напишите свой первый запрос

Следующий запрос возвращает 10 городов с самой высокой средней влажностью при температуре выше нуля:

SELECT
  blob1 AS city,
  SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidity
FROM WEATHER
WHERE double1 > 0
GROUP BY city
ORDER BY avg_humidity DESC
LIMIT 10

Этот запрос можно выполнить, отправив HTTP-запрос к SQL API:

curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/analytics_engine/sql" \
--header "Authorization: Bearer <API_TOKEN>" \
--data "SELECT blob1 AS city, SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidity FROM WEATHER WHERE double1 > 0 GROUP BY city ORDER BY avg_humidity DESC LIMIT 10"

См. Справочник по SQL для Workers Analytics Engine , где приведён полный список поддерживаемых функций SQL.

Работа с данными временных рядов

Workers Analytics Engine оптимизирован для аналитики временных рядов, которую можно визуализировать с помощью таких инструментов, как Grafana. Каждое событие, записанное из runtime, автоматически дополняется timestamp поле. Ожидается, что большинство временных рядов будут округлены, а затем GROUP BY timestamp. Например:

SELECT
  intDiv(toUInt32(timestamp), 300) * 300 AS t,
  blob1 AS city,
  SUM(_sample_interval * double2) / SUM(_sample_interval) AS avg_humidity
FROM WEATHER
WHERE
  timestamp >= NOW() - INTERVAL '1' DAY
  AND double1 > 0
GROUP BY t, city
ORDER BY t, avg_humidity DESC

Сначала этот запрос округляет timestamp поле до ближайших пяти минут. Затем группирует данные по этому полю и городу и вычисляет среднюю влажность в каждом городе за пятиминутный период.

См. Запрос Workers Analytics Engine из Grafana , где приведены дополнительные сведения о том, как создавать эффективные запросы Grafana к Workers Analytics Engine.

Дополнительные материалы