Диспетчер данных

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

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

image.png

Чтобы вернуться в визуальный редактор дашборда в том же правом верхнем углу кнопка с изображением монитора

image.png

Диспечер данных дашборда представляет собой две страницы. «Скрипт загрузки» со списком источников и «Модель данных». Источники создаются на первой из них.

В левой части страницы скрипта находится список созданных подключений. Этот список состоит из двух секций:

Если при создании подключения были недозаполнены реквизиты подключения и/или проверка соединения не прошла успешно, этот коннектор всеравно можно сохранить, но он будет помечен красным цветом. После этого в списке подключений появится новый источник с указанным названием.

Создание подключения

Итак, для создания нового коннектора на странице «Скрипта загрузки» в сайдбаре слева нажимаем кнопку «Создать подключение» внизу списка коннекторов.

image.png

После чего появится диалоговое окно в котором нужно выбрать один из доступных типов источника. 

image.png

База данных

Где необходимо заполнить реквизиты подключения:

Для Click House будет доступен дополнительный параметр HTTP/HTTPS
Для Oracle нужно будет указать формат даты, т.к. у каждого экземпляра этой СУБД формат даты может отличаться

image.png


Файл 
  1. В модальном окне заполнить/выбрать:
    • Название подключения
    • Расположения файла:
      • Загрузить. Файл также может быть загружен с локального компьтера пользователя. Но есть ограничение по объему 25мб. Размер может быть изменен в настройках системы. Папка для загрузки по умолчанию : /opt/fastboard/upload_{имя окружения}
      • С сервера. Папка Upload на вашем сервере, куда можно положить файл любого размера сторонними средствами 
    • Формат файла определится автоматически, если форматы CSV, TXT, JSON, XLS/XLSX, XML, QVD. Другие форматы не поддерживаются, но загрузить их можно, если в них структура данных одного из поддерживаемых форматов, то необходимо выбрать этот формат вручную
    • Все файлы в папке. Если отметить это чекбокс в выборе расположения будет только сервер, формат файла необходимо можно выбрать только вручную, будут выбраны все файлы выбранного формата содержащиеся в папке, а ткже появится поле для ввода маски для имени файла. Если указать маску, то выберутся только файлы подходящие под заданные условия
    • Автообновление. Система будет отслеживать изменения файла, или файлов. Если это произошло БД созданная из этого файла или файлов будет автоматически обновлена согласно произошедшим изменениям.

      Один файл Несколько файлов
      image.png image.png
  2. После выбора параметров необходимо нажать кнопку "Создать" для того, чтобы начать загрузку данных из файла в хранилище данных Fastboard.
  3. Из файла или файлов будет создан коннектор. В списке подключений появится новый источник с указанным названием из которого можно будет выбирать данные для проектов. 

После успешного создания подключения можно переходить к выбору и загрузке данных

Удаление коннектора

Может быть двух типов:

1. Из проекта. 

image.png

Нажатием на кнопку корзинки в списке коннектов проекта можно удалить все данные этого источника из скрипта загрузки. После чего нужно запустить скрипт чтобы обновить данные проекта/

Внимание. Перед удалением коннекта из проекта убедитесь, что таблицы удаляемого источника не входят ни в одну из моделей данных проекта. Иначе эти модели и сам проект сломаются. Если такое все же произошло, то чтобы  восстановить работоспособность проекта нужно загрузить все те же данные обратно в проект.

2. Из списка коннектов. Если у пользователя есть права на управление источником, он может удалить его из системы. Для этого нужно вызвать модальное окно редактирования коннектора и в нем нажать кнопку «Удалить подключение»

image.png

Доступ к коннекторам

Для того чтобы коннектор созданный пользователем или администратором был доступен другим пользователям, необходимо предоставить им доступ. Существуют два вида прав доступа к коннекторам:

Для распределения прав пользователям у каждого конектора есть две таблицы Управление и Использование. Когда пользователь создает коннектор он автоматически получает права на управление. И получает все привилегии и распоряжается правами на это подключение.

Пользователь с ролью «Администратор» всегда имеет права на управление любым коннектором. Всегда видит все конекторы и может ими распоряжаться.

В данный момент это функционал доступен только через API

Выбор данных для загрузки

Для просмотра и выбора данных доступных в конкретном источнике необходимо кликнуть на нем в этом списке.

image.png

После того как выбор сделан нажимаем кнопку «Вставить в скрипт». После этого окно закроется и мы увидим скрипт загузки сгенерировный для импорта выбраннцих таблиц и полей.

Для того чтобы запустить импорт данных нужно сначала «сохранить» скрипт, и далее «Запустить».
После успешной загрузки данных на экране появится соответствующее сообщение. 

image.png

Следующий шаг -- Создание модели данных.

Редактор скрипта загрузки

Скрипт загрузки генерируется автоматически после выбора источников данных

Этап ручного редактирования скрипта загрузки является необязательным, однако функциональность Fastboard позволяет при необходимости внести изменения. 

image.png

Правила использования редактора

Добавить источник

Шаги Ожидаемый результат

В любом месте скрипта добавить строку
Source "Название коннекта"

где:

  • Source - ключевое слово обозначающее вставку нового коннекта,
  • "Название источника" - имя коннекта из списка источников
  • При вставке кода для импорта таблиц из этого источника  таблицы успешно загрузятся в БД проекта



Добавить таблицу из источника

Шаги Ожидаемый результат
  • Объявить название таблицы:
    Table "Car"

  • Определить и указать скрипту список полей новой таблицы. Для этого:
  1. Описать секцию Create (команда на языке Clickhouse для создания таблицы в БД проекта, в которую запишутся данные из таблицы-источника):
    Create @@@ - начало секции 
    CREATE TABLE IF NOT EXISTS - команда КХ на создание таблицы
    "id" String NULL, - поле таблицы, в которое будет записано значение из источника: "название поля" / тип данных / может ли быть пустым (если нет, not null)
        "createdAt" DateTime64 (6) NULL,
        "updatedAt" DateTime64 (6) NULL,
      ) ENGINE = MergeTree () 
    ORDER BY
      tuple ()
    @@@ - конец секции Create

  2. Описать секцию Delete (для удаления временной таблицы):
    Delete @@@
    ALTER TABLE "Car" DELETE WHERE 1=1
    @@@

  3. Описать секцию Read (Для выбора полей из таблицы-источника:
    Read @@@
    SELECT - команда (на языке источника) на выбор полей
      "id"::text, -  поле таблицы, которое будет взято из источника. "название поля" / тип данных. Для избежания ошибок при импорте всем полям данной секции прописывается тип ::text
      "createdAt"::text,
      "updatedAt::text,
    FROM
      "Car" - таблица источника
    @@@

  4. Описать секцию Write
    Write @@@
    INSERT INTO - команда на языке КХ на вставку данных созданную в КХ
      "Car" (
        "id",
        "createdAt",
        "updatedAt"
      )
    @@@


  5. Необязательная секция 
    Optimize @@@
    OPTIMIZE TABLE "Car" DEDUPLICATE
    @@@
    По умолчанию есть. Если ее оставить, то произойдет дедубликация полей. Если это действие не требуется, секцию нужно удалить.



  6. Убедиться что каждое поле импорта имеет одинаковое название в секциях Create, Read, Write

  7. Нажать кнопку «Сохранить». Для сохранения изменений в тексте скрипта

  8. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
  • Добавленная таблица появилась в списке доступных на странице модели данных проекта

  • Новая таблица содержит все поля указанные в скрипте загрузки

  • Новая таблица может быть использована в модели данных

Удалить таблицу

Шаги Ожидаемый результат
  1. Удалить строку объявляющую таблицу
    Table "Car"

  2. Удалить секции Create, Delete, Read, Write для этой таблицы

  3. Нажать кнопку «Сохранить». Для записи изменений в тексте скрипта

  4. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
Удаленная таблица исчезла из списка таблиц на странице модели данных


Добавить поле из таблицы источника в таблицу импорта

Шаги Ожидаемый результат
  1. В список полей таблицы куда вставляем секции Create добавить строку: 
    "id" String NULL - "название поля" / тип данных / может быть пустым Null (если нет, not null)

  2. В список полей таблицы откуда импортируем для секции Read добавить строку с названием поля:
    "id"::text - "название поля" / тип данных (всегда текст)

  3. В список полей данной таблицы в секции Write добавить строку с названием поля:
    "id"

  4. Нажать кнопку «Сохранить». Для записи изменений в тексте скрипта

  5. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
На странице модели данных в данной таблице появилось поле "id" с типом данных, указанным в секции Create

Удалить поле из таблицы

Шаги Ожидаемый результат
  1. В списке полей таблицы в секциях Create, Delete, Read, Write удалить необходимое поле

  2. Нажать кнопку «Сохранить». Для записи изменений в тексте скрипта

  3. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
Удаленное поле исчезло таблицы на странице модели данных


Изменить тип данных поля

Шаги Ожидаемый результат
  1. В строке поля таблицы в секции Create изменить тип на один из поддерживаемых КХ: String, Int64, Float32 и т.д.
    Полный список типов

  2. Нажать кнопку «Сохранить». Для записи изменений в тексте скрипта

  3. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
Тип поля изменился в таблице 

В настоящий момент для применения любых изменений в таблицах (создание поля, переимнование поля, изменение типа поля и т.д.) необходимо пересоздать таблицу в БД проекта. Для этого после внесения всех изменеий к имени таблицы можно добавить, например _1, после этого сохранить, затем запустить скрипт. При необходимости вернуть таблице старое название тем же способом. (Это связано с текущими ограничениями парсера. Мы над этим работаем)


Создать вычисляемое поле в таблице

Шаги Ожидаемый результат

При импорте таблицы из источника перед вставкой таблицы в КХ можно создать поле которого нет в исходной таблице, но которое будет вычислено и создано на основе заданного выражения. Для этого:

  1. В список полей таблицы в секции Create добавить новую строку с названием, типом, null, например:
    "field_name" Int32 NULL

  2. В секции Read добавить строку вида:
    func::text as "field_name" , где
    func - вычисляемое выражение, например "field_name1" + "field_name2",
    ::text - тип данных (всегда текст), 
    as "field_name" - алиaс поля

  3. В список полей данной таблицы в секции Write добавить строку с названием поля:
    "field_name"

  4. Нажать кнопку «Сохранить». Для записи изменений в тексте скрипта

  5. Нажать кнопку «Запустить». Для старта импорта данных согласно сохраненному скрипту загрузки
В таблице появится поле с назначенным типом данных и рассчитанными по заданному выражению значениями 

Создать новую таблицу "Календарь"

Вставить в скрипт загрузки следующий текст (обратите внимание на комментарии), после выполнения скрипта загрузки выполнить JOIN таблицы Calendar к вашей таблице фактов.

Table "calendar"

Create @@@
CREATE TABLE IF NOT EXISTS
  "calendar" (
    "id" Int32 NULL,
    "key_date"   String NULL,
    "date"   Date32 NULL,
    "index_day"   Int32 NULL,
    "day"   String NULL,
    "week"   Int32 NULL,
    "quarter"   Int32 NULL,
    "year"   Int32 NULL,
    "index_month"   Int32 NULL,
    "month"   String NULL
    
  ) ENGINE = MergeTree ()
ORDER BY
  tuple ()
@@@
 
Delete @@@
ALTER TABLE "calendar" DELETE WHERE 1=1
@@@

Source "promo_fb (RomanS)" -- Укажите любой существующий источник, чтобы сохранить в него вашу таблицу

Read @@@
SELECT
  a."id"::text,
  a."key_date"::text,
  a."date"::text,
  a."index_day"::text,
  a."day"::text,
  a."week"::text,
  a."quarter"::text,
  a."year"::text,
  a."index_month"::text,
  a."month"::text
FROM
(
select distinct
    row_number() over() as id,
    date(date)::text as key_date,
    date::date,
    extract('isodow' from date)  as index_day,
       CASE
           WHEN extract('isodow' from date) = 1 then 'ПН' -- Если нужно, укажите названия дней (и месяцев ниже)
           WHEN extract('isodow' from date) = 2 then 'ВТ'
           WHEN extract('isodow' from date) = 3 then 'СР'
           WHEN extract('isodow' from date) = 4 then 'ЧТ'
           WHEN extract('isodow' from date) = 5 then 'ПТ'
           WHEN extract('isodow' from date) = 6 then 'СБ'
           WHEN extract('isodow' from date) = 7 then 'ВС' end as day,
    extract('week' from date)     as week,
    extract('quarter' from date ) as quarter,
    extract('year' from date)     as year,
    extract('month' from date)    as index_month,
       CASE
           WHEN extract('month' from date) = 1 then  'Январь' 
           WHEN extract('month' from date) = 2 then  'Февраль'
           WHEN extract('month' from date) = 3 then  'Март'
           WHEN extract('month' from date) = 4 then  'Апрель'
           WHEN extract('month' from date) = 5 then  'Май'
           WHEN extract('month' from date) = 6 then  'Июнь'
           WHEN extract('month' from date) = 7 then  'Июль'
           WHEN extract('month' from date) = 8 then  'Август'
           WHEN extract('month' from date) = 9 then  'Сентябрь'
           WHEN extract('month' from date) = 10 then 'Октябрь'
           WHEN extract('month' from date) = 11 then 'Ноябрь'
           WHEN extract('month' from date) = 12 then 'Декабрь'end as month
from generate_series(date'2015-01-01',date(now()),interval '1 day')as t(date) -- Выберите дату начала и интервал
order by 
  date desc) a
@@@

Таблица в результате:

image.png

Некоторые особенности работы разными типами источников

MS SQL

1. При импорте данных с типом «Дата» нужно будет поля с датами в секции READ для этой таблицы сконвертировать в строку. КХ сам сконвертирует тип дата при создании таблицы у себя и они снова станут датами

image.png

2. Поля с кодировкой UTF16 (тип varchar) нужно будет обернуть в cast. В той же секции @READ для этой таблицы. Иначе русскоязычные значения не распознаются в этих полях и появятся вопросительные знаки

image.png

Модель данных

После успешной загрузки данных необходимо построить модель для того чтобы система понимала как ей выбирать и коррелировать данные для показа. Вы можете создать произвольное количество независимых друг от друга моделей данных — например, в ситуациях, когда объединение определенных таблиц в одну модель нерационально, или отсутствуют признаки, по которым их можно объединить.

Управление моделями данных

image.pngПример использования нескольких моделей данных

image.png
Переименование модели данных

image.pngВыбор модели данных по умолчанию для проекта

image.png
Выбор модели данных для визуализации

Правила построения модели данных 

  • Для построения первой связи необходимо добавить в модель две таблицы
  • Связь между таблицами в модели строится по ключу — полю в котором у двух таблиц есть одинаковые значения
  • После построения первой связи, таблицы в модель добавляются последовательно по одной
  • Если в модель данных добавлено более одной таблицы, все они обязательно должны быть связаны (иначе кнопка "Сохранить" окажется неактивной)
  • Таблицу можно добавить в модель несколько раз — при последующих добавлениях к названию таблицы будет добавлено слово "copy", например, "Table1 copy" , "Table1 copy copy"
  • Таблицу можно удалить из модели данных, кликнув на кнопку "Корзина"
  • Таблицу можно переименовать, кликнув на кнопку "Карандаш" над названием таблицы, добавленной в рабочую область

Пример построения модели данных

На вкладке «Модель данных» в левой части находятся плитки с названием загруженных таблиц. Чтобы построить модель необходимо добавить две таблицы из списка в рабочую область (кликом по ним), а затем связать их.

image.png

Шаг 1

Добавьте две таблицы нажав на их названия в списке. Чтобы переместить таблицу в пределах рабочей области, выделите ее и зажмите на ней левую кнопку мыши.

image.png

Шаг 2

Выделите одну из таблиц. В нижней части страницы появится ее содержимое, а слева от превью блок для выбора связей.

image.png

В выпадающем списке «Таблица» выберите таблицу с которой будет связана выбранная. Затем выберите вид связи (JOIN). По умолчанию Inner.
Подтвердите свой выбор нажав кнопку «Связать».

Шаг 3

Для создания полноценной модели осталось выбрать только поля которые станут ключами созданной связи. Настройка связи осуществляется с помощью выпадающих списков, в которых перечислены поля связуемых таблиц. В них и требуется выбрать поле-ключ. После выбора обоих полей нажмите "ОК", чтобы подтвердить построение связи. 
Если вам нужно присоединить еще одну таблицу, добавьте ее в рабочую область и повторите шаги 2 и 3.

image.png

После этого в интерфейсе между таблицами появится визуальная связь. Теперь остается сохранить созданную модель данных. Для этого необходимо кликнуть по кнопке «Сохранить» в правом верхнем углу рабочей области.

image.png