Создание приложения Direct Query с пользовательским SQL
Создавайте модели данных в скрипте загрузки, используя сценарий загрузки с пользовательским кодом SQL в приложении Direct Query. Пользовательский код SQL можно применять вместо Диспетчер модели данных с целью определения модели данных для Direct Query.
При создании моделей данных Direct Query с помощью пользовательского кода SQL можно применять операторы SQL для определения таблиц и полей, генерируемых самим запросом SQL. Кроме того, пользовательские операторы SQL в приложении Qlik могут использовать переменные скрипта загрузки и макросы выражений Qlik в пользовательских операторах SQL. Это позволяет сделать модель данных более динамичной и корректировать пользовательские таблицы и столбцы, определяемые с использованием SQL, в соответствии с результатами оценки переменных или выражений.
Пользовательский код SQL может применяться в скрипте загрузки самостоятельно. Кроме того модель данных можно определить с помощью комбинации Диспетчер модели данных и пользовательского запроса SQL в Редактор загрузки данных.
Если части модели данных можно определить с помощью Диспетчер модели данных, используйте Диспетчер модели данных — это обеспечит оптимальную производительность SQL. Диспетчер модели данных более эффективен в определениях таблиц, используемых при выполнении запросов Direct Query в определенной модели данных.
Чтобы создать модели данных с пользовательским кодом SQL, выполните следующие действия.
-
Добавьте раздел section directquery в скрипт загрузки.
В скрипте загрузки может существовать только один раздел SECTION DIRECTQUERY. Он должен быть последним разделом в скрипте загрузки.
Даже если модель данных не определена с помощью Диспетчер модели данных, добавление оператора LIB CONNECT, за которым следует оператор section directquery, в скрипт загрузки и загрузка этого скрипта превратит обычное приложение в приложение Direct Query.
-
Постройте модель данных, используя перечисленные ниже операторы.
-
SELECT
Используйте операторы SELECT, чтобы выбрать таблицы и столбцы для загрузки. Например: <TableName> SELECT <custom SQL>.
Если не определить собственные имена таблиц в скрипте загрузки, то им присваивается имя Table<номер строки скрипта>.
-
CREATE RELATIONSHIP
Используйте CREATE RELATIONSHIP для определения отношений между полями и таблицами в модели данных.
-
DROP RELATIONSHIP
Используйте DROP RELATIONSHIP, чтобы исключить ранее определенные отношения из модели данных.
-
DROP TABLE
Используйте DROP TABLE , чтобы исключить ранее определенные таблицы из модели данных с целью предотвращения возможных конфликтов между таблицами.
-
LET, SET
Используйте операторы LET и SET, чтобы определить переменные или выражения Qlik.
Таблицы и поля должны иметь уникальные имена в рамках модели данных. Если в Диспетчер модели данных определена таблица и затем предпринимается попытка переопределить ее в пользовательском запросе SQL, необходимо отбросить таблицу, созданную в Диспетчер модели данных или переименовать таблицу и поля в пользовательском запросе SQL — в противном случае произвойдет ошибка.
-
При использовании операторов скрипта, не поддерживаемых в разделе section directquery, возникает ошибка загрузки данных. Любые параметры для отладки скрипта или принудительного продолжения игнорируются.
Для ознакомления с примерами пользовательских скриптов загрузки SQL см. раздел Примеры пользовательского кода SQL для Direct Query.
Пользовательский код SQL, переменные и выражения
Пользовательские определения SQL в Direct Query позволяют применять переменные скриптов и макросы выражений Qlik в пользовательском операторе SQL.
Благодаря этому динамические переменные и выражения обеспечивают гибкость модели данных приложения с пользовательскими таблицами и столбцами, которые корректируются с учетом результатов оценки переменных или выражений Qlik.
Переменные в пользовательском коде SQL
Для определения переменных используйте операторы SET или LET. Добавьте переменные в скрипт загрузки, используя формат $(<variable name>).
Пример: построение модели данных, включая переменные
Ссылки на переменные в пользовательском коде SQL оцениваются во время перезагрузки. Если значение переменной меняется во время работы приложения, это изменение будет отражено в пользовательском коде SQL, в котором встречается эта переменная, только в случае перезагрузки скрипта.
Если требуется использовать динамические переменные в пользовательских определениях SQL, необходимо ссылаться на части выражений Qlik, чтобы эти переменные в принудительном порядке оценивались при каждом выполнении запроса, в котором применяются эти пользовательские переменные SQL.
Для получения дополнительной информации о переменных см. раздел Работа с переменными в редакторе загрузки данных.
Выражения в пользовательском коде SQL
Можно использовать выражения для модификации содержимого пользовательского кода SQL, который отправляется удаленной базе данных для представления таблиц и столбцов в модели данных. Разрешением выражений, используемых в модели данных, должно быть одиночное значение.
Чтобы протестировать, является ли результат оценки выражения одиночным значением, добавьте его в качестве выражения в КПЭ. Если все работает, то выражение можно использовать в пользовательском коде SQL.
Выражения оцениваются динамически при каждом выполнении запроса, в котором используются эти определения SQL. Каждый раз, когда пользовательский оператор SQL таблиц или полей использует выражения Qlik при выполнении запроса, сначала оцениваются эти выражения Qlik, чтобы извлечь текущие результаты выражений. Эти результаты вставляются в пользовательский оператор SQL для выполнения от имени первоначального запроса. Существует вероятность, что эти оценки выражений Qlik могут, в свою очередь, генерировать запросы SQL, отправляемые удаленной базе данных. Существует вероятность, что эти оценки выражений Qlik могут, в свою очередь, генерировать запросы SQL, отправляемые удаленной базе данных.
Если не удается развернуть выражение во время загрузки, будет возвращено значение null. Это не означает, что выражение недействительное. Для оценки выражения может потребоваться, чтобы пользователь создал выборки в приложении.
Пример: построение модели данных с использованием выражений Qlik
Создание модели данных с применением пользовательского кода SQL и Диспетчер модели данных
Можно использовать комбинацию пользовательского кода SQL и Диспетчер модели данных, чтобы создать модель данных для Direct Query. Однако существует несколько практических аспектов, которые следует учитывать:
-
Рекомендуется выполнять необходимое моделирование в Диспетчер модели данных до добавления пользовательского кода SQL в скрипт загрузки. Пользовательский код SQL и Диспетчер модели данных лучше всего комбинировать, когда Диспетчер модели данных используется для определения загруженных таблиц и отношений между полями, а пользовательский код SQL применяется для дополнительной персонализации.
-
Управление фрагментом модели данных, созданным с помощью Диспетчер модели данных, и фрагментом, созданным с помощью пользовательского кода SQL, осуществляется по отдельности, а затем они объединяются во время перезагрузки скрипта. В Диспетчер модели данных не отображается та часть модели данных, которая определена с применением пользовательского кода SQL. Для просмотра полной модели данных используйте Просмотр модели данных.
-
Модель данных, созданная с помощью Диспетчер модели данных, и модель данных, определенная с помощью пользовательского кода SQL, должны использовать одно и то же подключение к базе данных.
-
Оператор IMPORT LIVE, добавленный в скрипт загрузки с помощью Диспетчер модели данных, можно перемещать. Скрипт загрузки оценивается последовательно, поэтому изменение места по порядку может повлиять на требования пользовательского кода SQL. Например, это может привести к созданию нежелательных отношений или повторяющихся имен таблицы в конечной модели данных.
-
Таблицы и поля должны иметь уникальные имена в рамках модели данных. Если в Диспетчер модели данных определена таблица и затем предпринимается попытка переопределить ее в пользовательском коде SQL, необходимо отбросить таблицу, созданную в Диспетчер модели данных или переименовать таблицу и поля в пользовательском коде SQL — в противном случае произойдет ошибка.
Ограничения
Пользовательский код SQL для Direct Query имеет следующие ограничения:
-
Пользовательский код SQL может использовать только одну базу данных.
-
Приложение Direct Query, содержащее один или несколько пользовательских операторов SQL с встроенными макросами выражений Qlik, нельзя применять в качестве приложения выбора для приложений On-Demand. Причина заключается в том, что любое генерированное шаблонное приложение является приложением, загружаемым в оперативную память, и поэтому не может поддерживать макросы выражений в своем скрипте загрузки.
-
Пользовательский код SQL Direct Query не поддерживается для скриптов, добавленных в центр активности Аналитика. Для получения дополнительной информации о скриптах см. раздел Работа со сценариями в каталоге.