Работа с СУБД

На этой странице собраны практические сценарии работы с источниками данных из ноутбука.

Когда использовать

  • нужно выполнить SQL к подключенной СУБД;
  • нужно быстро проверить выборку перед дальнейшей обработкой;
  • нужно явно контролировать, к какому источнику уходит запрос.

SQL-ячейки

sql-ячейки подходят для быстрых запросов к выбранному подключению. Это хороший вариант для проверки SQL и первичной диагностики данных. Для отправки запроса необходимо выбрать подключение к БД в селекторе ячейки.

Python

sq.query()

В Python-ячейках используйте:

df = await sq.query("select now() as ts")df.head()

sq.query выполняет SQL на сервере и возвращает pandas.DataFrame.

Аргументы подключения: connection_name и connection_id

Сигнатура метода:

await sq.query(sql, connection_name=None, connection_id=None)
  • Всегда вызывайте метод с await;
  • connection_name или connection_id позволяют выбрать к какой БД произойдет обращение;
  • передавать оба аргумента одновременно нельзя;
  • если оба аргумента не переданы, используется активное подключение ячейки.

Пример с явным подключением:

df = await sq.query(    "select count(*) as cnt from analytics.orders",    connection_name="prod_clickhouse")

sq.insert_df()

Обратная операция к sq.query: загружает pandas.DataFrame в таблицу на выбранном подключении. Данные передаются в формате parquet через сервер SubQuery — без прямого доступа из браузера к СУБД, с тем же контуром прав, что и у sq.query.

result = await sq.insert_df("analytics.orders_checked", df)result

На выходе — pandas.DataFrame с количеством вставленных строк:

   rows_inserted0            184

Сигнатура метода:

await sq.insert_df(table, df, column_names=None, connection_name=None, connection_id=None)
  • table — имя таблицы на подключении (например, analytics.orders_checked);
  • df — pandas.DataFrame с данными; не должен быть пустым;
  • column_names — необязательный список колонок df, которые нужно вставить;
  • connection_name / connection_id — те же правила, что и у sq.query.

Пример с выбором колонок и явным подключением:

await sq.insert_df(    "analytics.orders_checked",    df_merged,    column_names=["date", "amount"],    connection_name="prod_clickhouse",)

Ограничения:

  • объём загружаемых данных — до 200 МБ в parquet;
  • sq.insert_df вставляет строки в указанную таблицу — для массовых загрузок используйте штатные механизмы вашей СУБД, а этот метод держите для результатов исследования и выгрузок, с которыми уже поработали в ноутбуке.

DuckDB-ячейки

duckdb-ячейки подходят для локальных SQL-операций в браузерной WASM-сессии.

Когда это удобно:

  • быстро проверить идею без обращения к внешней СУБД;
  • сделать промежуточные преобразования перед Python-обработкой;
  • работать с локальными файлами через SQL.

Пример:

select *from read_csv_auto('sales.csv')limit 100

Важно учитывать: состояние DuckDB-сессии живет в рамках текущей вкладки браузера.