184 похожих чатов

Все привет Подскажите как правильно работать с питонячей библиотекой для взаимодействия

с кликом. Задача простая - просто пулять insert as select from s3 и отслеживать чтобы этот запрос успешно выполнился

Сначала делал через def execute(self, query

, но оно получается раьотает даже если сам запрос на сервере отработал и падает только по таймауту. Те как будто не отслеживает статус выполнения запроса в клике.

Далее заюзал def execute_with_progress(

который возвращает tuple с кол-вом обоаботанных строк + общим количеством строк. И вроде то что нужно и можно сделать cancel клиенту если num_rows = processed rows вроде такого

for num_rows, total_rows in progress:
print(f"{num_rows} was processed from {total_rows}")

, но меня смущает что мне эта функция вот такое возвращает

319237761065 was processed from 319235351580
319237772198 was processed from 319235351580

Ну те как кол-во строк может больше итоговых? )
Конечно можно поставить условие num_rows >= processed_rows но как-то очково и не остановлю ли я запрос раньше времени в таком случае

4 ответов

22 просмотра

Я сделал такой тайм-аут {"send_receive_timeout": 18000} и больше не парился с execute

Vitaly-Pismarev Автор вопроса
Константин
Я сделал такой тайм-аут {"send_receive_timeout": 1...

Так у меня висит он пока не отвалится

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

Vitaly-Pismarev Автор вопроса
Kostya
Количество строк, в случае execute_with_progress, ...

я просто дергал INSERT SELECT который долгий (необязательно загрузку с S3) вот так: self.client.execute(query=sql_query, settings={'connect_timeout': 3000, 'send_receive_timeout': 1500}) Клиент объявлял вот так: self.client = Client( host=self.job_config['host'], port=self.job_config['port'], user=self.credentials['user'], password=self.credentials['password'], database=self.job_config['db'] ) При маленьком таймауте он обрывал соединение по запрос на сервере продолжал крутиться. При большом таймауте код продолжал работать даже после того как запрос на сервере отработал и его не видно в system.process progress = self.client.execute_with_progress(query) for num_rows, total_rows in progress: print(f"{num_rows} was processed from {total_rows}") такой вот код тоже не заканчивается и продолжает работать даже когда у нас все строки обработаны (это видно по сообщениям) Версии: Python 3.8.12 clickhouse-driver==0.2.4 Версия КХ: 22.9.3.18

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта