Перейти к содержанию

Команды постобработки

Команды постобработки запускаются на архитектуре WDC.Платформы v.2.0, в которой возможны подключения нескольких вычислительных узлов.

Команды постобработки выполняются на вычислительном узле на Python.

В предыдущей версии платформы (v 1.0) был доступен был только один вычислительный узел на Spark с OTL-командами (см. http://docs.isgneuro.com/1.0.0/OTL/OTL_commands/OTL_commands/).

Чтобы использовать архитектуру WDC.Платформы v.2.0, нужно в начале запроса указывать: v2 | ..

Если "v2" не указать, то запрос будет выполнен на архитектуре предыдущей версии.

Чтобы в запросе к WDC.Платформы v.2.0 выполнить команды предыдущей версии платформы, то нужно использовать команду otl_v1. Например:

v2 | otl_v1 <# makeresults count=2 #>

Типы параметров:

  • Обязательные параметры – параметры, наличие которых в команде является обязательным.

  • Опциональные параметры – параметры, которые могут отсутствовать в команде. В случае их отсутствия используется значение по умолчанию, определённое для параметров.

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

Команды используют следующие типы значений параметров и их оформление для корректной обработки:

  • term – буквы, цифры, знак подчеркивания.

    Пример: _some_word342

  • string – любые символы, обрамленные в двойные или одинарные кавычки, где: \n – перенос строки.

    Пример: "First line. some_word1 some_word2\nSecond line\nThird line"

  • inline – текст, обрамленный символами <##>

    Пример: <# makeresults count=5 | eval a=8 #>

  • text – либо term, либо string, либо inline.

  • integer – целое число.

  • double – дробное число.

  • numeric – целое или дробное число.

  • boolean – логический тип, принимает значение: true или false.

otl_v1

Команда запускает otl-запрос на архитектуре WDC.Платформы v.1.0.

Синтаксис команды

| otl_v1 <code>[, timeout=<integer1>][, cache_ttl=<integer2>]

Обязательный параметр:

  • code – текст otl-запроса для работы на WDC.Платформе v.1.0. Тип: text, чаще всего используется inline.

Опциональные параметры:

  • timeout=<integer1> – время ожидания ответа в секундах – тип: integer. Если запрос за это время не будет выполнен, то он завершается с ошибкой.

    Значение по умолчанию: 60.

  • cache_ttl=<integer2> – время хранения результата запроса в секундах – тип: integer.

    Значение по умолчанию: 60.

Пример использования

Запрос:

otl_v1 <# makeresults count=4 | eval a=3 #>, timeout=15, cache_ttl=10

Результат выполнения:

Index _time a
0 1680009770 3
1 1680009770 3
2 1680009770 3
3 1680009770 3

datalines

Команда принимает csv-файл в качестве первого параметра и создает из него таблицу данных.

Синтаксис команды

| datalines <data>[, sep=<string>]

Обязательный параметр:

  • data – строка, содержащая csv-выражение (тип: string).

Опциональный параметр:

  • sep=<string> – разделитель, используемый в csv-выражении (тип: string). Значение по умолчанию: "," (запятая).

Пример использования

Запрос:

| datalines "a,b,c\n1.2,2,3\n2.3,4,5", sep=","

Результат выполнения:

a b c
0 1.2 2 3
1 2.3 4 5

ensure

Команда добавляет столбцы с указанными именами, если они ранее отсутствовали в таблице данных.

Синтаксис команды

| ensure <column-list>

Обязательный параметр:

  • column-list – перечень имён столбцов (через запятую), которые следует добавить в таблицу данных. Тип: text.

    Синтаксис: <column1>, <column2>, ...

Пример использования

Исходные данные:

a b c
0 0.438921 0.118680 0.863670
1 0.138138 0.577363 0.686602
2 0.595307 0.564592 0.520630
3 0.913052 0.926075 0.616184

Запрос:

| readFile a.csv | ensure c,d,f

Результат выполнения:

a b c d f
0 0.438921 0.118680 0.863670 NaN NaN
1 0.138138 0.577363 0.686602 NaN NaN
2 0.595307 0.564592 0.520630 NaN NaN
3 0.913052 0.926075 0.616184 NaN NaN

fields

Команда возвращает набор данных с заданными столбцами.

Синтаксис команды

| fields <field-list>

Обязательный параметр:

  • field-list – список имён столбцов (через запятую), которые следует добавить в таблицу данных. Тип: text.

    Синтаксис: <field1>, <field2>, ...

Пример использования

Исходные данные:

a b c
0 0.438921 0.118680 0.863670
1 0.138138 0.577363 0.686602
2 0.595307 0.564592 0.520630
3 0.913052 0.926075 0.616184
4 0.078718 0.854477 0.898725
5 0.076404 0.523211 0.591538
6 0.792342 0.216974 0.564056
7 0.397890 0.454131 0.915716
8 0.074315 0.437913 0.019794
9 0.559209 0.502065 0.026437

Запрос:

| readFile a.csv | fields a,b

Результат выполнения:

a b
0 0.438921 0.118680
1 0.138138 0.577363
2 0.595307 0.564592
3 0.913052 0.926075
4 0.078718 0.854477
5 0.076404 0.523211
6 0.792342 0.216974
7 0.397890 0.454131
8 0.074315 0.437913
9 0.559209 0.502065

head

Команда возвращает первые n строк.

Синтаксис команды

| head [<number>]

Опциональный параметр:

  • number – количество возвращаемых строк – тип: integer.

    Значение по умолчанию: 10.

Пример использования

Исходные данные:

a b c
0 0.438921 0.118680 0.863670
1 0.138138 0.577363 0.686602
2 0.595307 0.564592 0.520630
3 0.913052 0.926075 0.616184
4 0.078718 0.854477 0.898725
5 0.076404 0.523211 0.591538
6 0.792342 0.216974 0.564056
7 0.397890 0.454131 0.915716
8 0.074315 0.437913 0.019794
9 0.559209 0.502065 0.026437

Запрос:

| read a.csv | head 3

Результат выполнения:

a b
0 0.438921 0.118680
1 0.138138 0.577363
2 0.595307 0.564592

mapcolumns

Команда переименовывает столбцы в наборе данных, используя подзапрос, задающий сопоставление имен столбцов.

Синтаксис команды

| mapcolumns [source=<old_name>][, target=<new_name>,] <mapping_df>

Обязательный параметр:

  • mapping_df – подзапрос, содержащий служебную таблицу с сопоставлением имён столбцов – тип: subsearch. Подзапрос заключается в квадратные скобки.

Опциональные параметры:

  • source=<old_name> – столбец служебной таблицы, указанной в подзапросе, содержащий имена столбцов основной таблицы, которые требуется изменить.

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

  • target=<new_name> – столбец служебной таблицы, указанной в подзапросе, содержащий новые имена для столбцов основной таблицы.

    По умолчанию используется длинное имя столбца основной таблицы.

Пример использования

Исходные данные:

Файл map.csv содержит служебную таблицу с сопоставлением старых и новых имён столбцов для основной таблицы:

| readFile map.csv
old_names new_names
0 A A_new_name
1 B B_new_name

Файл d.csv содержит основную таблицу данных, в которой нужно переименовать столбцы:

| readFile d.csv
date A B C D
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646

Запрос:

| readFile d.csv | mapcolumns source=old_names, target=new_names, [readFile map.csv]

Результат выполнения:

date A_new_name B_new_name C D
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646

orderby

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

Синтаксис команды

| orderby [<columns>][, asc=<bool>]>

Опциональные параметры:

  • columns – список столбцов для сортировки (через запятую) – тип: text.

    Синтаксис: <column1>, <column2>, ...

  • asc=<bool>:

    • если asc=True, то строки будут сортироваться по возрастанию значений в заданных столбцах.

    • если asc=False, то строки будут отсортированы по убыванию значений в заданных столбцах.

      Значение по умолчанию: True.

Примеры использования

Исходные данные:

| readFile d.csv
date A B C D
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646

Пример 1

Выполнить сортировку строк набора данных по убыванию значений в столбце A:

| readFile d.csv | orderby A, asc=False
date A B C D
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035

Пример 2

Выполнить сортировку строк набора данных по возрастанию значений в столбце A:

| readFile d.csv | orderby A
date A B C D
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388

pd_merge

Команда выполняет объединение входного набора данных с набором данных, указанным в подзапросе, по заданным условиям.

Примечание.

Команда использует функцию pandas.DataFrame.merge. Описание pandas-функции см.

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html.

Синтаксис команды

| pd_merge <right>, on=<field-list>[, how=<type>]

Обязательные параметры:

  • right – подзапрос, который содержит набор данных (второй), используемый для объединения с входным набором данных (первым) – тип: subsearch. Подзапрос должен быть заключён в квадратные скобки.

  • on=<field-list> – список полей, разделенных запятыми, по которым должно быть выполнено объединение наборов данных – тип: string. Поля должны быть заключены в кавычки.

    Синтаксис: <field1>, <field2>, ...

Опциональный параметр:

  • how=<type> – тип выполняемого объединения:

    • left – используются значения только из первого набора данных.

    • right – используются значения только из второго набора данных.

    • inner выбираются строки, если значения заданных полей присутствуют в обоих наборах данных.

    • outer берутся строки по значениям из обоих наборов данных, порядок значений аналогичен первому набору.

    • cross создаётся декартово произведение из обоих наборов, сохраняется порядок значений из первого набора.

      Значение по умолчанию: inner.

      Синтаксис: how=left | right | inner | outer | cross.

Примеры использования

Исходные данные:

| readFile a.csv
a b
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
| readFile b.csv
a c
0 1 100
1 2 200
2 3 300
3 6 600

Пример 1

Объединить наборы данных a.csv и b.csv по столбцу a и типу inner.

| readFile a.csv | pd_merge [readFile b.csv], on="a", how=inner

Итоговый набор данных содержит строки, в которых столбцы а в первом и втором наборах имели идентичные значения.

a b c
0 1 10 100
1 2 20 200
2 3 30 300

Пример 2

Объединить наборы данных a.csv и b.csv по столбцу a и типу right:

| readFile a.csv | pd_merge [readFile b.csv], on="a", how=right

Итоговый набор данных содержит все строки со значениями столбца а из набора b.csv, а значения, отсутствующие в наборе a.csv, будут заполнены NaN.

a b c
0 1 10.0 100
1 2 20.0 200
2 3 30.0 300
3 6 NaN 600

Пример 3

Объединить наборы данных a.csv и b.csv по столбцу a и типу left.

| readFile a.csv | pd_merge [readFile b.csv], on="a", how=left

Итоговый набор содержит все строки со значениями столбца а из исходного набора а.csv, а значений, которых нет в наборе b.csv, будут заполнены NaN.

a b c
0 1 10 100.0
1 2 20 200.0
2 3 30 300.0
3 4 40 NaN
4 5 50 NaN

pddf

Команда вызывает любые pandas.DataFrame-функции (за исключением eval).

Описание pandas-функций находится по ссылке:

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html.

Синтаксис команды

| pddf <function>[, <columns>] [, <kwargs>][, subsearch_to_positional_list=<bool>][, subsearch_key=<bool>][, <subsearchs>] 

Обязательный параметр:

  • function – имя pandas.DataFrame-функции – тип: text.

Опциональные параметры:

  • columns – перечень имён столбцов (через запятую), которые будут переданы в функцию – тип: text. По умолчанию используется весь набор данных.

  • kwargs – перечень аргументов (имена параметров со значениями), разделенных запятыми, которые будут переданы в функцию – тип: string. Значения параметров должны быть заключены в кавычки.

    Синтаксис: <arg1>, <arg2>, ...

  • subsearch_to_positional_list=<boolean> – параметр определяет как функция будет принимать наборы данных, заданные в параметре subsearchs:

    • если subsearch_to_positional_list=true, то функция будет принимать их в качестве первого позиционного аргумента;

    • если subsearch_to_positional_list=true, то функция будет их принимать как именованные параметры. Значение по умолчанию: false.

  • subsearch_key – имя набора данных, которое будет передано в функцию в качестве именованного параметра – тип: text.

  • subsearchs – перечень подзапросов для передачи в функцию.

Примеры использования

Пример 1 – Использование pandas-функции compare с подзапросом

Найти отличия в наборах данных a.csv и b.csv.

| readFile a.csv
a b c
0 1 2 3
1 4 5 6
| readFile b.csv
a b c
0 1 2 3
1 4 5 7

Для этого используется pandas-функция compare. В качестве первого аргумента функция принимает набор a.csv, следовательно, команде pddf указываем подзапрос с набором b.csv:

readFile a.csv | pddf compare [readFile b.csv]

Результат отображён в таблице:

с self other
1 6.0 7.0

Пример 2 – Использование pandas-функции query

В наборе данных a.csv отфильтровать все строки, в которых столбец а имеет значение 1.

Для этого вызывается pandas-функция query, которая принимает аргумент expr, равный "a==1":

| readFile a.csv | pddf query, expr="a==1"
a b c
0 1 2 3

Пример 3 – Использование pandas-функции round

В наборе данных d.csv требуется округлить дробные числа до двух знаков после запятой:

| readFile d.csv 
date A B C D
0 2013-01-01 1.075770 -0.109050 1.643563 -1.469388
1 2013-01-02 0.357021 -0.674600 -1.776904 -0.968914
2 2013-01-03 -1.294524 0.413738 0.276662 -0.472035
3 2013-01-04 -0.013960 -0.362543 -0.006154 -0.923061
4 2013-01-05 0.895717 0.805244 -1.206412 2.565646

Вызывается pandas-функции round, которая принимает аргумент decimals (количество знаков после запятой, которые следует оставить):

readFile d.csv | pddf round, decimals=2
date A B C D
0 2013-01-01 1.08 -0.11 1.64 -1.47
1 2013-01-02 0.36 -0.67 -1.78 -0.97
2 2013-01-03 -1.29 0.41 0.28 -0.47
3 2013-01-04 -0.01 -0.36 -0.01 -0.92
4 2013-01-05 0.90 0.81 -1.21 2.57

Пример 4

В наборе данных d.csv требуется оставить столбцы А и В и округлить в них дробные числа до двух знаков после запятой.

Т.к. в pandas-функцию round требуется передать только два столбца, используем параметр columns:

readFile с.csv | pddf round,A,B decimals=2
A B
0 1.08 -0.11
1 0.36 -0.67
2 -1.29 0.41
3 -0.01 -0.36
4 0.90 0.81

rand

Команда добавляет столбец со случайными целыми числами от 0 до 1000.

Синтаксис команды

| rand <column>[, <count>]

Опциональные параметры:

  • column – новое имя столбца – тип: text.

Опциональные параметры:

  • count – количество строк для добавления – тип: integer. Параметр игнорируется, если входной набор данных передан слева (до начала выполнения команды, см. Пример 2).

    Значение по умолчанию: 10.

Примеры использования

Пример 1

| rand new_col, 4
new_col
0 444
1 57
2 515
3 742

Пример 2

| otl_v1 <# makeresults count=5#> | rand new_col, 2
Index _time new_col
0 1679975374 353
1 1679975374 618
2 1679975374 738
3 1679975374 372
4 1679975374 36

range

Команда добавляет столбец в набор данных или создает новый, если это первая команда, и заполняет столбцы значениями от a до b по следующим правилам:

  • Если требуется вернуть заданное количество равномерно распределенных чисел в интервале от a до b, то используется параметр number.

  • Если требуется вернуть числа в интервале от a до b с заданным шагом, то используется параметр step.

    Важно!

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

Синтаксис команды

| range <column>, <a>, <b> [, step=<step>] [, number=<num>] [, <dtype>]

Обязательные параметры:

  • column – имя столбца для заполнения его значениями из интервала, заданного параметрами а и b – тип: text. Помещается в двойные кавычки.

  • a – начало интервала. Интервал включает это значение. Тип: number.

  • b – окончание интервала – тип: number. Интервал не содержит это значение, за исключением случаев, когда шаг не является целым числом и при округлении дробных чисел может попасть в заданное значение.

Опциональные параметры:

  • step=<step> – величина, на которую должны различаться соседние значения в столбце column в рамках интервала, заданного параметрами a и b – тип: number.

    Значение по умолчанию равно: 1.

  • number=<num> – количество значений, которое должно быть в столбце в рамках интервала, заданного параметрами а и b – тип: number.

  • dtype – pandas-тип данных выходного массива в столбце, заданном параметром column – тип: text. Если параметр не задан, тип данных определяется по параметрам a и b.

Примеры использования

Пример 1

Запрос:

| range "column_name", 10, 30, step=5

Результат:

column_name
0 10
1 15
2 20
3 25

Пример 2

Запрос:

| range "column_name", 2,3, step=0.3

Результат:

column_name
0 2.0
1 2.3
2 2.6
3 2.9

Пример 3

Запрос:

| range "column_name", 2,3, number=7

Результат:

column_name
0 2.000000
1 2.166667
2 2.333333
3 2.500000
4 2.666667
5 2.833333
6 3.000000

Пример 4

Запрос:

| otl_v1 <# makeresults count=2 #> | range "new_col", 2, 7, step=3

Результат:

Index _time new_col
0 1679906285 2
1 1679906285 5

Пример 5

Пример, когда длина входного набора данных не равна количеству значений:

otl_v1 <# makeresults count=3 #> | range "new_col", 2, 7, step=3 

Слева передается набор данных с тремя строками, а чисел от 2 до 7 с интервалом 3 всего два – 2 и 5 (см. предыдущий пример).

В результате будет выведена ошибка:

ValueError: Length of values (2) does not match length of index (3)

Пример 6

Добавить новый новый столбец, указать значения от 2 до 8 с шагом 2 с pandas-типом float:

| range "column_name", 2, 8, step=2 dtype=float

Результат:

column_name
0 2.0
1 4.0
2 6.0

readFile

Команда readFile читает файл из хранилища.

Хранилища настроены в файле config.ini в разделе storages.

Синтаксис команд

| readFile <filename>, type=<type>[, storage=<storage>][, private=<bool>]

Обязательные параметры:

  • filename – имя файла в хранилище. Параметр может включать путь, например: "путь1/путь2/имя_файла.csv".

  • type=<type> – тип файла. Поддерживаемые типы: csv, json, parquet.

Опциональные параметры:

  • storage=<storage> – хранилище для чтения файла. Значение по умолчанию: lookups.

  • private=<bool> – условия чтения файла из пользовательской папки хранилища:

    • если private=true, то файл будет прочитан из пользовательской папки;

    • если private=false, то будет прочитан файл, размещённый в общедоступном месте хранилища, даже если одноимённый файл имеется в пользовательской папке. Значение по умолчанию.

Примеры использования

Пример 1

Использование путей в хранилище:

... | readFile "some_folder_in_storage/books.csv, type=csv"

Пример 2

Использование другого хранилища:

... | readFile "some_folder_in_storage/books.csv, type=csv, storage=pp_shared"

Пример 3

Использование личной папки пользователя:

... | readFile "some_folder_in_storage/books.csv, type=csv, storage=pp_shared", private=true


rename

Команда переименовывает столбцы набора данных.

Синтаксис команд

| rename <field> AS <newfield>[, ...]

Обязательный параметр:

  • <field> AS <newfield>, где:

    • field – имя столбца,

    • newfield – новое имя столбца.

      Имена с пробелами должны быть заключены в кавычки.

Пример использования

... | rename _time AS Time, p50 AS Median, p25 AS Quartile

str_match

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

Синтаксис команды

| str_match <column>=<val>, …

Обязательный параметр:

  • <column>=<val>, где:

    • column – имя столбца,

    • val – значение в виде последовательности символов или регулярного выражения.

Пример использования

Исходные данные:

Входной набор данных:

a b c
0 ab11c dfag bbbl33asdd
1 zdf fffa22fff znowaty
2 zd111f fffa22fff zno33waty

Пример 1

Найти строку таблицы, имеющую в столбце c значение, начинающееся с "zno33":

| readFile test.csv | str_match c="zno33"
a b c
2 zd111f fffa22fff zno33waty

Пример 2

Найти строки, имеющие значения, соответствующие регулярному выражению ".*11.*":

| readFile test.csv | str_match a=".*11.*"
a b c
0 ab11c dfag bbbl33asdd
2 zd111f fffa22fff zno33waty

Пример 3

Найти строки таблицы, содержащие в столбце a регулярное выражение ".*c" или в столбце c – регулярное выражение "\^zno3":

| readFile test.csv | str_match a=".*c", c="^zno3"
a b c
0 ab11c dfag bbbl33asdd
2 zd111f fffa22fff zno33waty

writeFile

Команда writeFile записывает файл в хранилище.

Хранилища настроены в файле config.ini в разделе storages.

Синтаксис команд

| writeFile <filename>, type=<type>[, storage=<storage>][, private=<bool>][,mode=<mode>]

Обязательные параметры:

  • filename – имя файла в хранилище. Параметр может включать путь, например: "путь1/путь2/имя_файла.csv".

  • type=<type> – тип файла. Поддерживаемые типы: csv, json, parquet.

Опциональные параметры:

  • storage=<storage> – хранилище для сохранения (чтения) файла. Значение по умолчанию: lookups.

  • private=<bool> – условие сохранения файла в пользовательскую папку хранилища:

    • если private=true, то файл будет сохранён в пользовательскую папку хранилища.

    • если private=false, то файл будет сохранён в общедоступную папку. Значение по умолчанию.

  • mode=<mode> – режим записи.

    Возможные значения:

    • overwrite – перезаписать файл в хранилище. Значение по умолчанию.

    • append – добавить набор данных в файл.

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

    • ignore – игнорировать операцию записи, если файл уже существует.

Пример использования

Использование режима добавления (mode=append) в writeFile:

... | writeFile books.csv, mode=append
К началу