goodt-dremio-sdk
v1.0.30
Published
Goodt dremio sdk
Downloads
26
Readme
Dremio SDK
Данный документ описывает frontend спецификацию sdk для работы с микросервисом dremio. Актуальная документация: https://dremio-sdk.netlify.app
Сборка проекта (umd module):
npm run build
Генерация актуальной документации:
npm run docs
Quick start
import { SDK } from 'goodt-dremio-sdk';
let query = {
$fields: {},
$from: ['my-dataset'],
$metrics: [],
$dimensions: [],
$filters: [],
$sort: []
};
let sdk = new sdk.SDK({ host: 'http://localhost:4000' });
sdk.getData(query)
.then(data => console.log(data))
.catch(e => console.log(e));
Сущности dremio
В рамках данного документа все сущности dremio указываются с префиксом dremio.
dremio.CatalogEntity
К ним относятся сущности:
Сущности sdk
IQuerySchema
/**
* IQuerySchema
* @typedef {Object} IQuerySchema
* @property {Array.<String>} $from dremio.Dataset path
* @property {IFields} $fields поля
* @property {Array.<IMetric>} $metrics метрики
* @property {Array.<IDimension>} $dimensions измерения
* @property {Array.<IFilter>} $filters фильтры
* @property {Array.<ISort>} $sort сортировка
*/
let IQuerySchema = {
$from: [ <dataset_path> ],
$fields: {}
$metrics: [ IMetric ]
$dimensions: [ IDimension ]
$filters: [ IFilter ]
$sort: [ ISort ]
}
IFields
/**
* @typedef {Object} IFields
* @property {String} <field-name> соответствие field -> column
*/
let IColumn = {
[<field-name>]: <column-name>
};
Пример:
{
"My field": "id"
}
IMetric
/**
* IMetric
* @typedef {Object} IMetric
* @property {IMetricDef} <metric-name> метрика
*/
let IMetric = {
[<metric-name>]: IMetricDef
};
IMetricDef
/**
* @typedef {Object} IMetricDef
* @property {String} <IMetricDef.TYPE.*> название поля
*/
let IMetricDef = {
[IMetricDef.TYPE.*]: <field-name>,
};
IMetricDef.TYPE = {
VALUE: "$v",
EXPRESSION: "$exp",
AVG: "$avg",
COUNT: "$count",
MAX: "$max",
MIN: "$min",
SUM: "$sum",
GROUP_CONCAT: "$gc",
GROUP_CONCAT_UNIQ: "$gcu",
}
Пример
{
"$sum": "column";
}
IDimension
/**
* IDimension
* @typedef {Object} IDimension
* @property {String} <dimension-name> название поля
*/
let IDimension = {
[<dimension-name>]: <field-name>
};
Пример
{
"My dimension": "column";
}
IFilter
/**
* @typedef {Object} IFilter
* @property {IFilterDef} <field/metric/dimension-name> описание условия
*/
let IWhere = {
[<field/metric/dimension-name>]: IFilterDef
};
Пример
{
"My dimension": { $in: [ 1,2,3 ] };
}
IFilterDef
/**
* @typedef {Object} IFilterDef
* @property {Array} <IFilterDef.TYPE.*> значения
*/
let IFilterDef = {
[IFilterDef.TYPE.*]: <values>,
};
IFilterDef.TYPE = {
EQ: "$eq",
EQ_NOT: "$eqn",
LESS: "$lt",
LESS_EQ: "$ltq",
GREATER: "$gt",
GREATER_EQ: "$gtq",
IN: "$in",
IN_NOT: "$inn",
BETWEEN: "$btw",
BETWEEN_NOT: "$btwn",
LIKE: "$lk"
}
Пример
{
$in: [1, 2, 3];
}
ISort
/**
* @typedef {Object} ISort
* @property {string} <alias> направление сортировки
*/
let ISort = {
[alias]: ISort.SORT.*,
};
ISort.SORT = {
ASC: "asc",
DESC: "desc"
}
Пример
{
"Фамилия": "asc";
}
Пример IQuerySchema
{
"$from": [
"test",
"zips"
],
"$fields": {
"ид": "_id",
"штат": "state",
"город": "city",
"популяция": "pop"
},
"$metrics": [
{
"кол-во городов": {
"$count": "город"
}
}
],
"$dimensions": [
{
"название штата": "штат"
}
],
"$filters": [
{
"популяция": {
"$gt": [
50000
]
}
}
],
"$sort": [
{
"кол-во городов": "desc"
}
]
}