Skip to content

YQL-хелперы

Адаптер включает специализированные инструменты для построения сложных аналитических запросов и выполнения скриптов напрямую в YQL.

В runnable-приложении из раздела Примеры Drizzle Adapter есть live и preview-only сценарии для этих хелперов.

Источники данных для SELECT

asTable(binding, alias?)

Использование переменной YQL (например, List<Struct>) как источника таблицы в FROM.

ts
import { asTable } from '@ydbjs/drizzle-adapter/sql'
import { sql } from 'drizzle-orm'

await db
  .select({ id: sql`t.id`, name: sql`t.name` })
  .from(asTable('$my_list', 't'))
  .execute()

valuesTable(rows, options?)

Создание временного источника данных из массива объектов (аналог VALUES в SQL).

ts
import { valuesTable } from '@ydbjs/drizzle-adapter/sql'
import { sql } from 'drizzle-orm'

const v = valuesTable([{ id: 1, name: 'Alice' }], {
  alias: 'v',
  columns: ['id', 'name'],
})

await db
  .select({ id: sql`v.id`, name: sql`v.name` })
  .from(v)
  .execute()

Аналитические функции (OLAP)

Используйте эти хелперы внутри .groupBy() для продвинутой агрегации.

  • rollup(...columns): иерархические итоги.
  • cube(...columns): итоги для всех комбинаций.
  • groupingSets(...sets): произвольные наборы группировок.
  • grouping(column): позволяет определить, является ли строка итоговой.
ts
import { rollup } from '@ydbjs/drizzle-adapter/sql'
import { sql } from 'drizzle-orm'

await db
  .select({ city: sales.city, total: sql`sum(amount)` })
  .from(sales)
  .groupBy(rollup(sales.country, sales.city))
  .execute()

Временные окна (Time Windows)

Хелперы для потоковой агрегации и обработки временных рядов:

  • sessionWindow(column, timeout): группировка событий в сессии.
  • hop(column, hop, window): скользящие окна агрегации.

Векторный поиск (KNN)

Функции расстояния и близости для AI-поиска, обычно используемые в orderBy.

ФункцияОписание
knnCosineDistance(v1, v2)Косинусное расстояние.
knnEuclideanDistance(v1, v2)Евклидово расстояние.
knnInnerProductSimilarity(v1, v2)Скалярное произведение (близость).
ts
import { knnCosineDistance } from '@ydbjs/drizzle-adapter/sql'
import { sql } from 'drizzle-orm'

const nearest = await db
  .select()
  .from(images)
  .orderBy(knnCosineDistance(images.embedding, sql`$target`))
  .limit(10)
  .execute()

YQL-скрипты

Хелпер yqlScript позволяет объединять несколько команд, прагм и параметров в один атомарный блок выполнения.

ts
import { declareParam, pragma, yqlScript } from '@ydbjs/drizzle-adapter/sql'
import { sql } from 'drizzle-orm'

await db.execute(
  yqlScript(
    pragma('TablePathPrefix', '/local'),
    declareParam('$userId', 'Int32'),
    sql`UPSERT INTO users (id) VALUES ($userId);`
  )
)
  • pragma(name, value): установка настроек выполнения.
  • declareParam(name, type): явное объявление типов параметров YQL.
  • defineAction(name, params, statements): создание переиспользуемых макросов.
  • doAction(name, args): вызов определенных действий.