1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/RobotSlacker-sqlcli

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

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

Если тебе нужно определить свой собственный драйвер базы данных, необходимо изменить этот файл.

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

После установки можно сразу выполнить команду 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].
    Если для подключения к одной базе данных требуется более одного jar-файла, здесь следует указать несколько параметров конфигурации. Например: mydb=mydb1_driver1, mydb1_driver2
  • Конкретная конфигурация должна быть указана в соответствующем разделе.
    filename: необязательный параметр, имя jar-файла.
    driver: необязательный параметр, основной класс соединения с базой данных.
    jdbcurl: необязательный параметр, строка подключения jdbc, где ${host}${port}${service} обозначают хост базы данных, порт и имя базы данных соответственно.
    downloadurl: необязательный параметр, путь загрузки файла, если файл отсутствует локально.
    md5: необязательный параметр, контрольная сумма MD5 для проверки загруженного файла.
    jdbcprop: необязательный параметр, дополнительные параметры, необходимые для соединения с этой базой данных, если таковые имеются.
    odbcurl: необязательный параметр, если соединение с базой данных должно осуществляться через ODBC, укажите здесь конфигурацию.
    Параметры jdbcurl и odbcurl должны быть настроены хотя бы один из них. Если настроен jdbcurl, также необходимо настроить filename и driver.
  • В соответствии с этим принципом, минимальная конфигурация для запуска должна выглядеть следующим образом:
[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.

控制参数解释-FEEDBACK

    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.

Использование Hint-информации в SQL

  • В некоторых случаях мы используем Hint для управления конкретным поведением SQL.
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:

  1. Если во время выполнения программы указан logfile, то файл результатов spool находится в том же каталоге, что и logfile.
  2. Если во время выполнения программы не указан logfile, файл результатов spool является текущим файлом.

Просмотр результатов предыдущего SQL с использованием встроенных переменных

В некоторых ситуациях требуется использовать результат предыдущего 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. С его помощью можно создавать и удалять топики, просматривать их состояние и отправлять в них сообщения.

Подготовка:

  • SQL> internal kafka connect server [bootstrap_server];

Этот запрос устанавливает соединение с сервером Kafka. Здесь не проверяется достоверность информации о сервере.

  • SQL> internal kafka create topic [topic name] [ Partitions [number of partitions] replication_factor [number of replication factor] timeout [timeout of creation] .... kafka valid configuration ... ];

Запрос создаёт топик 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.

Также можно отправить несколько сообщений, указав количество строк и частоту отправки:

  • SQL> internal kafka produce message topic [topic name]

    ( [message part1] [message part2] [message part3] ) rows [num of rowcount] frequency [num of frequency];

Здесь num of frequency указывает максимальное количество сообщений, отправляемых в секунду. Если этот параметр не указан, ограничение на частоту отправки не применяется.

Использование SQLCli для работы с HDFS

С помощью SQLCli можно подключаться к HDFS, менять текущий каталог и получать информацию о файлах.

Для подключения к HDFS используется команда:

  • SQL> internal hdfs connect [hdfs webui url] with user [hdfs user name]

После успешного подключения можно изменить текущий каталог с помощью команды:

  • SQL> internal hdfs cd [hdfs new dir]

Чтобы получить информацию о файле, используется команда:

  • SQL> internal hdfs status [hdfs path] SQL> internal test assert 判断表达式

Согласно условию выражения выносится результат. Если он равен 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)

SQLExecuteHandler.run использует yield для возврата результатов выполнения SQL по частям.

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)

Возвращаемый результат содержит 5 частей (title, rows, headers, columnTypes, status).

title — информация о заголовке таблицы.

rows — набор данных результата.

headers — определение заголовка результата, имя столбца.

columnTypes — тип столбца, строковый формат.

status — сводное сообщение о результате.

Параметры инициализации SQLCli включают:

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 )

Вы можете оставить комментарий после Вход в систему

Введение

Инструмент тестирования SQL для Python. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/RobotSlacker-sqlcli.git
git@api.gitlife.ru:oschina-mirror/RobotSlacker-sqlcli.git
oschina-mirror
RobotSlacker-sqlcli
RobotSlacker-sqlcli
master