Не прекращайте учебу с
LOKAD TV
.csv
и .tsv
или .txt
.xlsx
..gz
; в них должны содержаться простые файлы..zip
; в них должны содержаться простые файлы, в каждом архиве — по одному файлу..7z
; в них должны содержаться простые файлы, в каждом архиве — по одному файлу.read "/foo/myorders.csv.gz" as Orders with "My Id" as Id Quantity : number // подстановочный знак «*» должен быть здесь // будет прочитано несколько файлов read "/foo/promos*.xlsx" as Promos[*] // макс. в пределах подстановочного знака «*» // прочитывается только один файл read max "/foo/stocks*.xlsx" as Stocks[*] // «опасное» игнорирование проблем с прочтением сценария read "/foo/backorders.tsv.zip" unsafe as BO[Date, *]
.gz
. Например, Lokad_Items.tsv.gz
распознается как файл в формате TSV, сжатый с помощью GZip. Та же самая схема используется для расширения .zip
архивов WinZip, и .7z
для архивов 7z. Архивы WinZip и 7z должны содержать только по одному сжатому файлу. Envision не поддерживает работу с архивами, в которых находится несколько файлов. Таблицы Excel сжимаются по умолчанию, поэтому сжимать их дополнительно не требуется, даже если они очень большие.Lokad_TableName.xyz
— TableName
меняется на имя таблицы, а xyz
— на фактическое расширение файла, например xlsx
для Excel. В имени таблицы не должно быть пробелов, и оно не должно начинаться с цифры. При выполнении этих требований к именам файлов Envision сможет автоматически находить и загружать нужные таблицы в Lokad без дополнительных действий.Lokad_Items.xyz
, он будет по умолчанию считаться таблицей наименований.Lokad_TableName_Suffix.xyz
, где Suffix
различается в зависимости от файла. Например, если ежедневно создаются файлы, содержащие данные о продажах, то один из таких файлов может быть назван следующим образом: Lokad_Orders_2015-03-16.tsv
. Suffix
не играет какой-либо особенной роли: он нужен только для различения файлов, поэтому может содержать любую информацию. Естественно, для Envision желательно, чтобы во всех файлах, различающихся только суффиксом, были одни и те же столбцы, иначе Envision не сможет объединить эти файлы в одну таблицу без дополнительных инструкций.Id
, то он по умолчанию считается внешним ключом для столбца Id
из файла Lokad_Items.xyz
.Date
, то он по умолчанию считается столбцом с датами в Envision.read "/foo/bar*.xyz" as MyTable with "Foo1" as Id "Foo2" as Date "Foo 3" as Foo3Путь
/foo/bar*.xyz
может содержать подстановочный знак (*), и его можно заменить на любую последовательность символов. Использование подстановочного знака необязательно, но при использовании он позволяет работать с несколькими файлами сразу. Данная структура напоминает синтаксис оболочки при составлении списка файлов из командной строки.as
, которое находится сразу же после пути, указывает на имя таблицы. Если таблица называется MyTable
, то в сценарии Envision эта таблица будет записана, к примеру, как MyTable.Id
. Если загружаемая таблица является таблицей наименований, то выражение as MyTable
может быть пропущено.with
, работают как инструкции для переименования столбцов. В примере, приведенном выше, имя столбца Foo1
изменено на Id
, а Foo2
— на Date
. Благодаря переименованию этих двух столбцов таблица MyTable
становится нормальной таблицей Envision, содержащей исторические данные, так как столбцы Id
и Date
теперь определены.Foo 3
(обратите внимание на пробел в исходном имени столбца) превращается в Foo3
. Данный пример показывает, как неправильные имена столбцов могут быть превращены в правильные. Также важно заметить, что в именах векторных переменных использование пробелов также не допускается. Для краткости мы больше не стали включать пары изменяемых имен, но если эти пары правильно разделены запятой, количество операций переименования в одном файле не ограничено. На практике переименование столбца может быть полезно для упрощения чтения сценария, и эта функция также может быть использована для внесения необходимых изменений при слиянии нескольких файлов в одну таблицу, если имена столбцов в этих файлах невозможно сопоставить.Lokad_Orders_Old.tsv
, содержит все данные до 31 декабря 2014 года. Файл имеет три столбца с именами ItemId
, OrderDate
и Quantity
соответственно. Имена этих столбцов в этом файле не соответствуют требованиям Envision Второй файл, Lokad_Orders.tsv
, более новый, содержит все данные начиная с 1 января 2015 года. Данный файл также имеет три столбца: Id
, Date
и Quantity
, соответствующие требованиям Envision. В сценарии ниже показано, как можно объединить эти два файла в единую таблицу Orders
.
read "/foo/Lokad_Orders_Old.tsv" as Orders with "ItemId" as "Id" "OrderDate" as Date read "/foo/Lokad_Orders.tsv" as OrdersМожно задавать столько операторов
read
, сколько необходимо для надлежащей работы со всеми файлами и всеми таблицами. Envision не предписывает точное расположение этих операторов в сценарии, поэтому технически их можно разместить где угодно, даже в самом конце сценария. Тем не менее мы рекомендуем располагать эти операторы в начале сценария, потому что именно там их будут искать пользователи, знакомые с программированием.read max "/foo/bar*.xyz" as MyTable with "Foo1" as Id "Foo2" as Date "Foo 3" as Foo3
min
: первый файл при сортировке файлов по именам (лексикографическое упорядочение).max
: последний файл при сортировке файлов по именам (лексикографическое упорядочение).latest
: последний файл при сортировке файлов по дате последнего изменения.stocks-2016-12-21.csv
, последняя часть которого показывает текущую дату, то использование фильтра позволит прочитать только последний файл. В данном случае использование и max
, и latest
дает один и тот же результат, потому что при сортировке по имени и по дате обновления файл будет расположен на одной и той же позиции.Items
в Envision, должны содержать столбцы Id
и Date
, которые можно получить путем переименования соответствующих столбцов, как говорилось в предыдущем разделе. Тем не менее иногда таблицы не совпадают с такими ожиданиями, и синтаксис Envision используется для прояснения ожиданий, привязанных к таблице. Точно так же тип столбца обычно определяется непосредственно сценарием Envision, но иногда простого определения типа недостаточно. Синтаксис Envision позволяет указать любой необходимый тип столбца.read "a.csv" as A[*] read "b.csv" as B[Id] read "c.csv" as C[Id, *] read "d.csv" as D[Date] read "e.csv" as E[Date, *] read "f.csv" as F[Id, Date] read "g.csv" as G[Id, Date, *]Выражение
A[*]
задает таблицу, в которой вообще нет ограничений. Подстановочный знак позволяет применять самые разнообразные сценарии, но если столбец Id
не указан, вы не сможете использовать некоторые полезные функции языка Envision.B[Id]
задает таблицу, в которой на одно наименование приходится не более одной строки. Например, наши параметры запасов попадают в эту категорию.C[Id, *]
таблица может содержать любое количество строк на одно наименование. Например, в данную категорию попадают таблицы, содержащие распределение вероятности. D[Date]
содержится единственное скалярное значение для определенных дней. Например, такая таблица может использоваться для составления списка государственных праздников для отдельных регионов.E[Date, *]
содержится любое количество скалярных значений для определенных дней. Это расширенный вариант предыдущей таблицы: здесь определенный день может быть связан с различными факторами.F[Id, Date]
содержит не более одного значения для каждой пары (Id, Date)
. Например, такая таблица может использоваться для составления списка случаев дефицита товара в прошлом.G[Id, Date, *]
является стандартной. Она отображается, если вы опускаете скобки. На практике в эту категорию попадает большинство исторических данных, например история продаж.text
, number
, date
и boolean
, и эти типы обычно определяются непосредственно сценарием. Тем не менее можно указать ожидание типа следующим образом:
read "a.csv" as A[*] with "Foo" as X : text Y : number Z : dateЗатем, возвращаясь к образцу набора данных, пропишем следующий код:
// эти три строки стандартные // теперь их можно опускать read "/sample/Lokad_Items.tsv" read "/sample/Lokad_Orders.tsv" as Orders read "/sample/Lokad_PurchaseOrders.tsv" as PO Quantity = sum(Orders.Quantity)Тогда вектору
Orders.Quantity
скрыто присваивается числовой тип, потому что только числа можно складывать. В результате, когда Envision анализирует файлLokad_Orders.tsv
, ожидается, что столбец Quantity
должен содержать значения, которые можно обрабатывать как числа. Если бы мы написали:
Nonsense = sum(Orders.Client)Envision попробовал бы обработать столбец
Client
в файле Lokad_Orders.tsv
как числа, и процесс дал бы сбой, потому что данный столбец содержит идентификаторы клиентов, которые не являются числами.
Помимо механизма определения типа синтаксис Envision позволяет открыто указывать ожидаемый тип каждого столбца в каждой таблице. Например, для образца набора данных можно открыто указать типы с помощью следующих операторов:
expect Supplier : text expect Orders.NetAmount : number expect PO.ArrivalDate : dateВыражение просто составляется следующим образом:
expect MyTable.MyColumn : type
, где type
— один из четырех доступных типов: text
, number
, date
или boolean
. Чаще всего приходится прописывать тип date
, потому что с помощью арифметических операций и механизма определения типа не всегда получается точно сказать, что данные, содержащиеся в столбце, являются датами.skip
можно использовать для пропуска N первых строк простого файла. Синтаксис данной функции выглядит так:
read "/foo/bar*.csv" skip:2 as MyTable with "Foo1" as Id "Foo2" as DateВ примере выше анализатор пропускает первые две строки простого файла и делает заголовками столбцов данные, находящиеся в третьей строке. Оператор
skip
не является обязательным, по умолчанию значение данного параметра равно skip:0
. Данная опция предназначена для систем, которые вводят метаданные в самом начале простых файлов.read
программа выдаст ошибку. Как правило, при возникновении таких ошибок в Envision рекомендуется выяснить, почему данные в файле повреждены. Система Envision распознает различные форматы дат и чисел, поэтому если она выдает ошибку, то, скорее всего, данные действительно повреждены. Повреждение данных может привести к возникновению самых разных ошибок. Если Envision выдает ошибку, то это обычно свидетельствует о проблеме, которая возникла где-то раньше.unsafe
. Синтаксис показан ниже:
read "/foo/orders.tsv" unsafe with "My Id" as Id "My Date" as DateПри использовании оператора
unsafe
Envision рассматривает проблемы с прочтением данных как предупреждения, а не ошибки. Благодаря этой функции расчеты не будут прерываться, даже если значения или строки блокируются анализатором из-за того, что их невозможно прочитать.