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 ответов

23 просмотра

Я сделал такой тайм-аут {"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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта