Если тебе нужно определить собственный сервер для загрузки драйвера программы, работающей с внутренним сетевым подключением, необходимо изменить этот файл.
Если тебе нужно определить свой собственный драйвер базы данных, необходимо изменить этот файл.
После установки можно сразу выполнить команду sqlcli в командной строке.
Если папка <PYTHON_HOME>/Scripts не была добавлена в текущую среду $PATH, возможно, потребуется указать полный путь.
(base) >sqlcli
SQL*Cli Release 0.0.32
SQL>
Если ты видишь информацию о версии, поздравляем — программа установлена успешно.
(base) >sqlcli
SQL*Cli Release 0.0.32
SQL> connect mem;
SQL> Connected.
Если у тебя есть драйвер как минимум для H2, и ты выполнил эту команду, то подключишься к встроенной базе данных H2. Ещё раз поздравляем — твоя программа работает нормально.
Sqlcli — это инструмент для работы с базами данных на основе JDBC/ODBC. Для работы с базой данных через JDBC требуется наличие соответствующего jar-файла в текущей среде. Для ODBC требуется установка соответствующего драйвера.
Файл конфигурации находится в каталоге conf в папке SQLCli. Имя файла конфигурации: sqlcli.conf.
Пример конфигурации:
[driver]
oracle=oracle_driver
mysql=mysql_driver
....
[oracle_driver]
filename=ojdbc8.jar
downloadurl=http://xxxxxx/driver/ojdbc8.jar
md5=1aa96cecf04433bc929fca57e417fd06
driver=oracle.jdbc.driver.OracleDriver
jdbcurl=jdbc:oracle:thin:@${host}:${port}/${service}
[mysql_driver]
filename=mysql-connector-java-8.0.20.jar
downloadurl=http://xxxxx/driver/mysql-connector-java-8.0.20.jar
md5=48d69b9a82cbe275af9e45cb80f6b15f
driver=com.mysql.cj.jdbc.Driver
jdbcurl=jdbc:mysql://${host}:${port}/${service}
jdbcprop=socket_timeout:360000000
odbcurl=DRIVER={driver_name};SERVER=${host};PORT=${port};DATABASE=${service};UID=${username};PWD=${password};
Для добавления новых соединений с другими базами данных следует использовать аналогичный пример конфигурации.
Здесь:
[driver]
oracle=oracle_driver
mysql=mysql_driver
[oracle_driver]
filename=ojdbc8.jar
driver=oracle.jdbc.driver.OracleDriver
jdbcurl=jdbc:oracle:thin:@${host}:${port}/${service}
[mysql_driver]
filename=mysql-connector-java-8.0.20.jar
driver=com.mysql.cj.jdbc.Driver
jdbcurl=jdbc:mysql://${host}:${port}/${service}
На основе правильно настроенного файла параметров можно использовать --syncdriver для обновления необходимых jar-файлов для подключения к базе данных с сервера.
Например:
(base) C:\Work\linkoop\sqlcli>sqlcli --syncdriver
Checking driver [oracle] ...
File=[ojdbc8.jar], MD5=[1aa96cecf04433bc929fca57e417fd06]
Driver [oracle_driver] is up-to-date.
Checking driver [mysql] ...
File=[mysql-connector-java-8.0.20.jar], MD5=[48d69b9a82cbe275af9e45cb80f6b15f]
Driver [mysql_driver] is up-to-date.
(base) sqlcli --help
Usage: sqlcli [OPTIONS]
Options:
--version Output sqlcli's version.
--logon TEXT logon user name and password. user/pass
--logfile TEXT Log every query and its results to a file.
--execute TEXT Execute SQL script.
--nologo Execute with silent mode.
--sqlperf TEXT SQL performance Log.
--syncdriver Download jdbc jar from file server.
--clientcharset TEXT Set client charset. Default is UTF-8.
--resultcharset TEXT Set result charset. Default is same to clientcharset.
--help Show this message and exit.
--version используется для отображения текущей версии инструмента.
(base) sqlcli --version
Version: 0.0.32
--logon используется для ввода имени пользователя и пароля для подключения к базе данных.
(base) sqlcli --logon user/pass
Version: 0.0.32
Driver loaded.
Database connected.
SQL>
При успешном выполнении этой команды предполагается, что в переменных среды уже задана необходимая информация для подключения к базе данных. Здесь необходима переменная среды SQLCLI_CONNECTION_URL, формат параметра: jdbc:[тип базы данных]:[протокол связи с базой данных]://[адрес хоста базы данных]:[порт базы данных]/[имя службы базы данных].
--logfile используется для записи всей информации о процессе текущей операции командной строки.
В этом случае информация о процессе включает все выходные данные, которые появляются после выполнения команды в командной строке. Если в командной строке впоследствии будет установлен SET ECHO ON, информация также будет включать исходные операторы SQL, выполненные в командной строке. Символьный набор выходного файла определяется параметром resultcharset.
(base) sqlcli --logon user/pass --logfile test.log Version: 0.0.32 Driver loaded. Database connected. set echo on select * from test_tab; +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+ SQL> exit Disconnected.
(base) type test.log Driver loaded. Database connected. SQL> select * from test_tab; ``` +----+----------+ | ID | COL2 | +----+----------+ | 1 | XYXYXYXY | | 1 | XYXYXYXY | +----+----------+
2 rows selected.
SQL> exit
Disconnected.
**Выполнение SQL-скриптов в SQLCli**
— execute — это команда, которая позволяет выполнять SQL-скрипт после запуска SQLCli. Скрипт обычно сохраняется в файле с расширением .sql.
Команда execute позволяет автоматизировать выполнение серии SQL-запросов без необходимости вводить их вручную в командной строке.
В скрипте можно использовать различные команды и параметры, такие как set echo on для отображения выполняемых команд на экране.
После выполнения скрипта SQLCli автоматически завершает работу, даже если скрипт не содержит команду exit.
Если в скрипте отсутствуют команды загрузки драйвера или подключения к базе данных, необходимо установить соответствующие переменные среды перед выполнением команды.
Также в SQLCli есть опция --nologo, которая подавляет вывод информации о версии программы при подключении к базе данных.
— sqlperf — это опция, которая выводит журнал выполнения SQL-операций в формате CSV-файла. Этот журнал может быть использован для анализа поведения SQL-кода.
Журнал включает информацию о сценарии выполнения, времени начала и окончания операции, затраченном времени, исходном и выполненном SQL-коде, результате выполнения и сообщении об ошибке (если она произошла).
Эта информация разделена табуляцией, а символьные данные заключены в одинарные кавычки.
Пример записи в журнале:
Script Started elapsed SQLPrefix SQLStatus ErrorMessage Scenario
sub_1.sql 2020-05-25 17:46:23 0.00 loaddriver localtest\linkoopdb-jdbc-2.3. 0 Scenario1
Для просмотра доступных команд в SQLCli используется команда help. | TIME | OFF | |
|---------------------|----------------------|-----------------------|
| OUTPUT_FORMAT | LEGACY | TAB|CSV|LEGACY |
| CSV_HEADER | OFF | ON|OFF |
| CSV_DELIMITER | , | |
| CSV_QUOTECHAR | | |
| FEEDBACK | ON | ON|OFF |
| TERMOUT | ON | ON|OFF |
| ARRAYSIZE | 10000 | |
| SQLREWRITE | OFF | ON|OFF |
| LOB_LENGTH | 20 | |
| FLOAT_FORMAT | %.7g | |
| DECIMAL_FORMAT | | |
| DATE_FORMAT | %Y-%m-%d | |
| DATETIME_FORMAT | %Y-%m-%d %H:%M:%S %f | |
| TIME_FORMAT | %H:%M:%S %f | |
| CONN_RETRY_TIMES | 1 | Connect retry times. |
| OUTPUT_PREFIX | | Output Prefix |
| SQL_EXECUTE | PREPARE | DIRECT|PREPARE |
| JOBMANAGER | OFF | ON|OFF |
| JOBMANAGER_METAURL | | |
| SCRIPT_TIMEOUT | -1 | |
| SQL_TIMEOUT | -1 | |
+--------------------+----------------------+----------------------+
**Объяснение параметров управления — ECHO**
Основные параметры управления:
1. **ECHO**: SQL-эхо-флаг, по умолчанию включён (ON), что означает, что содержимое SQL будет отображаться в журнале.
Пример: выполнение SELECT 3 + 5 COL1 FROM DUAL;
В журнале с включённым ECHO будет следующее:
SQL> SELECT 3 + 5 COL1 FROM DUAL;
SQL> ===========
SQL> = COL1 ===
SQL> ===========
SQL> 8
SQL> 1 rows selected.
С выключенным ECHO в журнале будет следующее:
SQL> ===========
SQL> = COL1 ===
SQL> ===========
SQL> 8
SQL> 1 rows selected.
**Объяснение параметров управления — WHENEVER_SQLERROR**
2. **WHENEVER_SQLERROR**: флаг ошибки SQL-терминала, который используется для управления продолжением выполнения при возникновении ошибки SQL. По умолчанию CONTINUE, то есть продолжение.
На данный момент поддерживаются следующие опции:
CONTINUE | — продолжить выполнение при ошибке SQL
EXIT | — выйти из программы SQLCli при ошибке SQL
**Объяснение параметров управления — PAGE**
3. **PAGE**: показывать ли постраничное отображение. Если результаты выполнения SQL превышают отображаемый контент, будет ли приостановлено отображение и ожидание ввода пользователем любой клавиши для продолжения отображения следующей страницы. По умолчанию отключено (OFF).
**Объяснение параметров управления — OUTPUT_FORMAT**
4. **OUTPUT_FORMAT**: формат отображения, по умолчанию ASCII (может меняться в зависимости от платформы).
Поддерживаемые опции на данный момент:
LEGACY | — формат отображения в виде таблицы (сохраняется временно для совместимости)
CSV | — формат отображения CSV-файла
TAB | — формат отображения таблицы
Пример:
SQL> set output_format legacy
SQL> select * from test_tab;
+----+----------+
| ID | COL2 |
+----+----------+
| 1 | XYXYXYXY |
| 1 | XYXYXYXY |
+----+----------+
2 rows selected.
SQL> set output_format csv
SQL> select * from test_tab;
"ID","COL2"
"1","XYXYXYXY"
"1","XYXYXYXY"
2 rows selected.
SQL>
**Объяснение параметров управления — LOB_LENGTH**
5. **LOB_LENGTH**: контролирует длину вывода полей LOB, по умолчанию 20.
Поскольку длина текста в полях LOB может быть довольно большой, по умолчанию весь текст не отображается в текущем выводе, а только максимальная длина, указанная в LOB_LENGTH. Для полей BLOB вывод по умолчанию в шестнадцатеричном формате. Для значений, превышающих максимальную длину, добавляется многоточие. **ABCDEFGHIJKLMNO...**
SQL> 1 rows selected.
6. FEEDBACK 控制是否回显执行影响的行数,默认是ON,显示
SQL> set feedback on
SQL> select * from test_tab;
+----+----------+
| ID | COL2 |
+----+----------+
| 1 | XYXYXYXY |
| 1 | XYXYXYXY |
+----+----------+
2 rows selected.
SQL> set feedback off
SQL> select * from test_tab;
...
Основной язык текста запроса — английский. 1. Когда происходит SQL-тайм-аут, программа запустит механизм отмены вызова базы данных для отката текущего состояния выполнения, но не каждая база данных поддерживает механизм отмены.
Поэтому не следует ожидать определённого состояния соединения с базой данных после тайм-аута, что может привести к сбою в выполнении всех последующих SQL-запросов.
2. В настоящее время функция TimeOut применяется только к следующим функциям: Connect и Execute.
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint SQLCli будет сортировать и выводить результаты SQL-запроса. Исходный порядок вывода программы игнорируется.
SQL> -- [Hint] LogFilter .*Error.*
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint SQLCli не будет отображать строки, содержащие «Error» в выводе.
«.*Error.*» — это регулярное выражение.
SQL> -- [Hint] LogFilter ^((?!Error).)*$
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint SQLCli будет отображать только строки, содержащие «Error».
^((?!Error).)*$ — это другое регулярное выражение.
SQL> -- [Hint] LogMask Password:.*=>Password:******
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint SQLCli заменит все данные, соответствующие «Password:», на «Password:*****» в журнале вывода.
SQL> -- [Hint] SQL_PREPARE
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint при выполнении SQLCli сначала проанализирует SQL-запрос, а затем выполнит его. Это поведение по умолчанию.
SQL> -- [Hint] SQL_DIRECT
SQL> Select ID,Name From TestTab;
....
После добавления этого Hint SQLCli пропустит этап анализа (PrepareStatement) при выполнении запроса. Это альтернативный режим работы, который можно использовать вместо SQL_PREPARE. Некоторые специальные SQL-операторы не поддерживают PREPARE, и этот метод позволяет обойти эту проблему. Можно настроить этот параметр глобально, используя переменные.
SQL> SET SQL_EXECUTE PREPARE|DIRECT
SQL> -- [Hint] LOOP [LoopTimes] UNTIL [EXPRESSION] INTERVAL [INTERVAL]
Цикл будет выполняться до тех пор, пока выражение EXPRESSION не станет истинным или количество циклов не достигнет значения LoopTimes. Интервал между циклами равен INTERVAL (в секундах).
### Использование переменных в SQL
В некоторых сценариях нам нужно изменить выполнение SQL с помощью переменных. Здесь предлагается следующее решение:
* Используйте команду set для определения переменной.
SQL> set @var1 value1
Если value1 содержит специальные символы, такие как пробелы, необходимо заключить их в символы ^. Например: SQL> set @var1 ^value1 fafsadfd^ Здесь строка внутри символов ^ будет использоваться как значение параметра, но сами символы ^ не будут включены.
Обратите внимание, что value1 является выражением eval, которое может быть записано как 3+5, ${a}+1 и т. д. Если вы хотите передать строку в value1, обязательно заключите её в кавычки, например 'value1'.
SQL> select ${var1} from dual;
REWROTED SQL> Your SQL has been changed to:
REWROTED > select value1 from dual
Здесь фактически означает: select value1 from dual, где ${var1} заменяется соответствующей переменной.
### Использование команды spool для вывода результатов SQL в файл
SQL> spool test.log SQL> select 1+2 from dual; 3 1 rows selected. SQL> spool off
$> type test.log SQL> select 1+2 from dual; 3 1 rows selected.
spool [имя файла] указывает, что начиная с этого момента, последующие SQL-команды будут выводиться в новый файл. spool off указывает, что с этого момента вывод будет направлен в новый файл, а не в предыдущий.
Во время выполнения команды spool, если указать новое имя файла, текущий файл будет закрыт, и вывод переключится на новый файл.
Расположение файла результатов spool:
В некоторых ситуациях требуется использовать результат предыдущего SQL в качестве параметра для следующего SQL. Здесь предлагается решение с использованием выражения JQ. Пример: {$LastSQLResult(JQPattern)}
LastSQLResult — это JSON-выражение, содержащее результаты последнего выполненного запроса, включая: { "desc": [column name1, column name2, ....], "rows": rowcount, "elapsed": sql elapsed time, "result": [[row1-column1 , row1-column2,...] [row2-column1 , row2-column2,...] ...] }
SQL> — возвращает количество записей, затронутых предыдущим SQL. SQL> select '${LastSQLResult(.rows)}' from dual; REWROTED SQL> Your SQL has been changed to: REWROTED > select '1' from dual +-----+ | '1' | +-----+ | 1 | +-----+ 1 row selected.
SQL> — возвращает содержимое нулевой строки и нулевого столбца из результата предыдущего SQL. SQL> select '${LastSQLResult(.result.0.0)}' from dual; REWROTED SQL> Your SQL has been changed to: REWROTED > select '1' from dual +-----+ | '1' | +-----+ | 1 | +-----+ 1 row selected.
Поддерживаемые выражения фильтрации JQ: dict key фильтрация: .key dict список ключей: .keys() dict список значений: .values() list фильтрация: .3 или .[3] list отрицательный индекс: -2 или .[-2] list срез 1: 2:6 или .[2:6] list срез 2: 2: или .[2:] list срез 3: :6 или .[:6] step list 1: 1:6:2 или .[1:6:2] step list 2: 1::2 или .[1::2] step list 3: ::2 или .[::2] string фильтрация: аналогично списку string срез Использование SQLCli для работы с Kafka
SQLCli — это инструмент, который позволяет выполнять различные операции с Kafka. С его помощью можно создавать и удалять топики, просматривать их состояние и отправлять в них сообщения.
Подготовка:
Этот запрос устанавливает соединение с сервером Kafka. Здесь не проверяется достоверность информации о сервере.
Запрос создаёт топик Kafka. По умолчанию количество разделов равно 16, а коэффициент репликации — 1. Параметр timeout of creation по умолчанию равен 60. Также можно указать другие параметры конфигурации Kafka.
Пример:
internal kafka create topic mytopic;
SQL> internal kafka get info topic [topic name] group [gruop id];
Получает информацию о топике Kafka, включая верхнюю и нижнюю границы очереди сообщений. Можно опустить параметр group id.
Пример:
internal kafka get info topic mytopic Partition 0 group abcd;
SQL> internal kafka produce message from file [text file name] to topic [topic name];
Отправляет содержимое текстового файла в указанный топик Kafka построчно.
Пример:
internal kafka produce message from file Doc.md to topic Hello;
SQL> internal kafka consume message from topic [topic name] to file [text file name];
Потребляет все сообщения из указанного топика Kafka и сохраняет их в текстовый файл.
Пример:
internal kafka consume message from topic Hello to file xxx.md;
SQL> internal kafka produce message topic [topic name]
( [message item1] [message item2] [message item3] );
Отправляет три сообщения в указанный топик Kafka.
Также можно отправить несколько сообщений, указав количество строк и частоту отправки:
( [message part1] [message part2] [message part3] ) rows [num of rowcount] frequency [num of frequency];
Здесь num of frequency указывает максимальное количество сообщений, отправляемых в секунду. Если этот параметр не указан, ограничение на частоту отправки не применяется.
Использование SQLCli для работы с HDFS
С помощью SQLCli можно подключаться к HDFS, менять текущий каталог и получать информацию о файлах.
Для подключения к HDFS используется команда:
После успешного подключения можно изменить текущий каталог с помощью команды:
Чтобы получить информацию о файле, используется команда:
Согласно условию выражения выносится результат. Если он равен True, то выводится Assert Successful. В противном случае — Assert Failed.
Здесь показан типичный пример использования метода сравнения для проверки результатов регрессии:
SQL> connect mem Database connected.
— 开始 запись вывода в aa.log SQL> spool aa.log SQL> select 3+5 from dual; +---+ | 8 | +---+ | 8 | +---+ 1 row selected.
SQL> spool off SQL> internal test set CompareReportDetailMode True; set successful.
— здесь сравниваются только что созданный SQL-журнал и ранее сохранённый файл сравнения (aa.ref), а также отображаются результаты сравнения SQL> internal test compare aa.log aa.ref; Compare text files: Workfile: [aa.log] Reffile: [aa.ref] +----------+------------+ | Scenario | Result | +----------+------------+ | NONE-0 | Successful | +----------+------------+ Compare Successful!
— если сравнение не удаётся, результаты будут выглядеть следующим образом: Compare text files: Workfile: [aa.log] Reffile: [aa.ref] +----------+--------+ | Scenario | Result | +----------+--------+ | NONE-0 | Failed | +----------+--------+ Compare Failed! ... >>>>>>> ... Scenario:[NONE-0] 1 SQL> select 3+5 from dual; 2 +---+ 3 | 8 | 4 +---+ — 5 | 8 | + 5 | 9 | 6 +---+ 7 1 row selected.
Вы можете использовать exit для выхода из программы командной строки или Exit для завершения выполняемого скрипта.
SQL> exit
Disconnected.
Примечание: если есть фоновые задачи, EXIT не завершает их немедленно. 1: для приложений с интерфейсом командной строки EXIT не выходит, а запрашивает ожидание завершения фоновых процессов. 2: для скриптов EXIT не завершается сразу, а ожидает завершения фонового процесса.
SQLCli разработан для параллельного выполнения скриптов и поддержки фоновых операций. Для этого предусмотрены следующие команды: 1: Create — создание фоновой задачи. 2: Set — установка параметров JOB. 3: Show — отображение текущих запущенных фоновых задач и их состояния. 4: Start — запуск фоновой операции. 5: Abort — отмена текущей выполняемой JOB, текущий SQL будет принудительно прерван. 6: Shutdown — остановка текущей выполняемой JOB и ожидание нормального завершения текущего SQL. 7: WaitJob — ожидание завершения очереди операций. 8: Timer — ожидание точки синхронизации Worker-процессов.
Во многих случаях нам нужно, чтобы SQLCli выполнял сценарии базы данных, но мы не хотим ждать завершения выполнения. Create может иметь несколько параметров: Параметр 1: имя JOB. Параметры 2–: параметры JOB, которые должны появляться попарно ParameterName ParameterValue.
SQL> __internal__ job create jobtest;
JOB [jobtest] create successful.
SQL> __internal__ job create jobtest2 loop 4;
JOB [jobtest2] create successful.
SQL> __internal__ job create jobtest3 loop 4 parallel 2;
JOB [jobtest3] create successful.
2: настройка параметров JOB с помощью set. Поддерживаемые параметры:
script : обязательный параметр. Имя сценария фоновой операции. Можно указать абсолютный путь или относительный путь к текущему каталогу.
parallel : необязательный параметр. Степень параллелизма фоновых операций, т. е. сколько операций может выполняться одновременно. По умолчанию 1.
loop : необязательный параметр. Общее количество циклов выполнения. По умолчанию 1.
timeout : необязательный параметр. Ограничение времени ожидания фоновой операции в секундах. По умолчанию равно 0, что означает отсутствие ограничения.
Если установлено ненулевое значение, операция будет принудительно завершена по истечении указанного времени.
starter_maxprocess : для уменьшения нагрузки при первом запуске. Максимальное количество одновременных запусков при каждом запуске операции. Значение по умолчанию — 9999, что означает полное отсутствие ограничений.
Например: parallel установлено на 10, starter_maxprocess на 2,
затем: с интервалом starter_interval запускаются 2 операции за раз, пока не будет достигнуто значение parallel.
starter_interval : для уменьшения нагрузки при первом запуске. Интервал времени между каждым запуском операции, по умолчанию равен 0, что означает немедленный запуск.
think_time : интервал времени после завершения каждой операции перед запуском следующей операции, по умолчанию равен 0, что означает немедленное выполнение.
blowout_threshold_count : порог полного сбоя, после достижения которого считается, что последующие операции не нужны. По умолчанию равен 0, что означает отсутствие ограничений.
tag : идентификатор группы программ, все Worker-процессы с одинаковым тегом будут синхронизированы при определении точки синхронизации.
Пример:
SQL> __internal__ job set jobtest parallel 2;
JOB [jobtest] set successful.
SQL> __internal__ job set jobtest loop 4;
JOB [jobtest] set successful.
SQL> __internal__ job set jobtest script bb.sql;
JOB [jobtest] set successful.
SQL>
С помощью show можно просмотреть информацию о ранее отправленных задачах, статусе выполнения сценариев, времени начала и окончания выполнения, текущем SQL и т. д. Как запускать, останавливать и ждать выполнения фоновых задач в SQL
Здесь можно увидеть, что уже отправлена одна задача.
SQL> — Просмотр конкретной информации о JOB SQL> internal job show jobtest; JOB_Name = [jobtest ]; ID = [ 3]; Status = [Submitted ] ActiveJobs/FailedJobs/FinishedJobs: [ 0/ 0/ 0] Submit Time: [2020-12-02 11:00:41 ] Start Time : [Нет ] ; End Time: [Нет ] Script : [bb.sql ] Script Full FileName: [Нет ] Parallel: [ 2]; Loop: [ 4]; Starter: [ 9999/ 0s] Think time: [ 0]; Timeout: [ 0]; Elapsed: [ 0.00] Blowout Threshold Count: [ 9999] Error Message : [Нет ] Detail Tasks: +----------+----------+--------------------+--------------------+ |Task-ID |PID |Start_Time |End_Time | +----------+----------+--------------------+--------------------+ Здесь можно увидеть подробную информацию о задаче с именем jobtst.
#### Как запустить фоновый скрипт в фоне
С помощью команды start можно запустить все фоновые скрипты или только часть из них.
SQL> set jobmanager on SQL> internal job start all; 1 Jobs Started. Здесь будут запущены все ранее отправленные фоновые скрипты. SQL> internal job start jobtest; 1 Jobs Started. Здесь будет запущен только фоновый скрипт с названием jobtest. Затем, если снова посмотреть информацию с помощью show, можно заметить, что соответствующие задачи были запущены.
#### Как остановить фоновый скрипт
Во время выполнения скрипта вы можете использовать команду shutdown для остановки одной или всех задач.
SQL> internal job shutdown all; Total [1] jobs shutdowned. Здесь все текущие фоновые скрипты будут остановлены. SQL> internal job shutdown jobtst; Total [1] jobs shutdowned. Обратите внимание: shutdown не останавливает текущую выполняемую задачу, но после этой задачи все последующие задачи не выполняются, а также не повторяются запросы, требующие циклического выполнения. Только после завершения дочерней задачи shutdownjob может быть выполнен. Это означает, что если у вас есть большой длинный SQL-запрос, shutdownjob не сможет быстро завершить выполнение задачи.
#### Как принудительно остановить фоновый скрипт
В процессе выполнения скрипта можно использовать команду abort для принудительной остановки одной или нескольких задач.
SQL> internal job abort all; Total [1] jobs aborted. Здесь все текущие фоновые скрипты будут остановлены. SQL> internal job abort jobtst; Total [1] jobs aborted.
#### Ожидание завершения выполнения фонового скрипта
В процессе выполнения скрипта можно использовать wait для ожидания завершения фоновых скриптов.
SQL> internal job wait all; All jobs [all] finished. SQL> internal job wait jobtest; All jobs [jobtest] finished. waitjob не завершает работу, а ждёт завершения соответствующих скриптов перед выходом.
#### Создание нескольких рабочих приложений, которые сохраняют агрегацию точек
Основной скрипт диспетчера задач:
SQL> set jobmanager on SQL> internal job create mytest loop 2 parallel 2 script slave1.sql tag group1; SQL> internal job create mytest2 loop 2 parallel 2 script slave2.sql tag group1; SQL> internal job start mytest; SQL> internal job start mytest2; SQL> internal job wait all;
Скрипт рабочего приложения (slave1.sql, slave2.sq):
— Два рабочих приложения (slave1.sql,slave2.sql) завершат агрегацию точки all_slave_started одновременно. SQL> internal job timer all_slave_started; SQL> do some sql SQL> internal job timer slave_point1; SQL> do some sql SQL> internal job timer slave_finished;
***
#### Влияние фоновых программ на основную программу при выходе
Если в данный момент выполняется фоновая программа:
1. Консольное приложение: EXIT не выйдет, а сообщит вам, что нужно дождаться завершения работы фоновой программы.
2. Скриптовое приложение: EXIT сразу не выйдет, а дождётся завершения работы фоновых процессов, прежде чем выйти.
#### Запуск SQLCli в качестве сервера в режиме C/S
OS> sqlcli --server [Port] Здесь Port — это допустимый номер порта, после запуска SQLCli привяжется к этому порту и будет принимать клиентские запросы.
#### Запуск SQLCli в качестве клиента в режиме C/S
OS> SET SQLCLI_REMOTESERVER XXX.XXXX.XXXX.XXXX:PORT OS> sqlcli Здесь IP и Port — адрес сервера, после указания этих параметров последующие команды и локальный Standalone режим будут полностью совпадать.
### Обязательная часть для программистов
#### Структура программного кода
---------- sqlcli --------------- init.py # Файл идентификации пакета, используемый для записи информации о версии --------------- commandanalyze.py # Анализ команд, вводимых пользователем или скриптом, определение необходимости последующего анализа или выполнения внутренних команд --------------- datawrapper.py # Поддержка тестовых данных в программе --------------- testwrapper.py # Поддержка тестирования команд в программе --------------- kafkawrapper.py # Поддержка операций Kafka в программе --------------- hdfswrapper.py # Поддержка операций HDFS в программе --------------- main.py # Основная программа, интерфейс командной строки, управление параметрами ввода --------------- sqlcli.py # Основная программа --------------- sqlcliexception.py # Пользовательский класс исключений программы --------------- sqlclijdbcapi.py # Пакетная обработка операций с базой данных, JDBC-режим --------------- sqlcliodbcapi.py # Обработка операций с базой данных в пакете, ODBC-режим, здесь только упаковка, используется для компилятора, реальная логика находится в каталоге odbc --------------- sqlclitransactionmanager.py # Управление бизнес-статистикой в фоновых задачах
В настоящее время программа полностью учитывает требования к потокобезопасности в своей конструкции.
#### Вызов приложения через Python API
from sqlcli.sqlcli import SQLCli
m_SQLCli = SQLCli(HeadlessMode=True)
for title, cur, headers, columnTypes, status in m_SQLCli.SQLExecuteHandler.run("Connect ....."): print(title, cur, headers, columnTypes, status)
for title, cur, headers, columnTypes, status in m_SQLCli.SQLExecuteHandler.run("Select * FROM XXX"): print(title, cur, headers, columnTypes, status)
logon=None, # По умолчанию используется информация для входа, None означает, что она не нужна. logfilename=None, # Имя файла вывода программы, None означает, что оно не нужно. sqlscript=None, # Имя файла сценария SQL, None означает, что он не нужен. sqlmap=None, # Имя файла сопоставления SQL, None означает, что оно не требуется. nologo=False, # При входе в систему отображается ли логотип, True означает, что логотип не отображается. breakwitherror=False, # Если при выполнении SQL возникает ошибка, немедленно ли выйти из системы, False означает не выходить из системы. sqlperf=None, # Имя выходного файла аудита SQL, None означает, что он не требуется. Console=sys.stdout, # Вывод на консоль, по умолчанию sys.stdout, то есть стандартный вывод. HeadlessMode=False, # Является ли это безголовым режимом, безголовый режим не выводит информацию на экран. WorkerName='MAIN', # Псевдоним программы, используемый для различения разных программ. logger=None, # Дескриптор вывода журнала программы. clientcharset='UTF-8', # Набор символов клиента, используется при чтении файлов SQL. По умолчанию UTF-8. resultcharset='UTF-8', # Выходной набор символов, используемый при печати выходных файлов и журналов. EnableJobManager=True, # Включить модуль управления фоновыми заданиями, иначе невозможно использовать команды JOB. profile=None # Скрипт инициализации программы.
#### Удаленный вызов приложения через локальный API
Код не предоставлен.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )