Перенести таблицу SQLServer напрямую в DuckDB в R

Недавно я читал DuckDB, и большинство примеров связано с наличием каких-то данных уже в сеансе R, а затем их отправкой в ​​DuckDB.

Вот базовый пример использования набора данных радужной оболочки глаза;

      library("DBI")
con = dbConnect(duckdb::duckdb(), ":memory:")
dbWriteTable(con, "iris_table", iris)
dbGetQuery(con, 'SELECT "Species", MIN("Sepal.Width") FROM iris_table GROUP BY "Species"')

Скажем, у меня есть данные в таблице сервера sql и я хочу напрямую записать эти данные в duck db.

Есть ли способ сделать это?

если бы у меня был запрос sql

      ' SELECT * FROM iris_table "

и хотел прочитать это прямо в DuckDB, как это будет работать? Я не видел примеров этого в Интернете

  1. Как это сработает?
  2. Будет ли это разумным или желательным подходом?

4 ответа

Я бы попробовал этот подход

  • В R импортируйте данные из SQL Server в фрейм данных R.
  • В R экспортируйте данные из фрейма данных R в DuckDB.

Я бы попытался экспортировать из SQL Server в файлы Parquet, а затем напрямую запросить их или импортировать в DuckDB.

В Duckdb вы можете использовать как в базе данных памяти, поэтому в настоящее время нет прямого доступа к серверу базы данных sql, но вы можете сделать это

первый

загрузите данные с сервера sql в фрейм данных pandas с помощью Pyodbc, а затем прочитайте данные из фрейма данных pandas

      pip install pyodbc 
pip install duckdb
pip install pandas

import pyodbc
import pasndas as pd
import duckdb
SERVER = '<server-address>'
DATABASE = '<database-name>'
USERNAME = '<username>'
PASSWORD = '<password>'

cnx = f'DRIVER={{ODBC Driver 18 for SQL Server}};SERVER={SERVER};DATABASE={DATABASE};UID={USERNAME};PWD={PASSWORD}'

conn = pyodbc.connect(cnx)
SQL_QUERY = """
SELECT 
*
FROM 
Sales;
"""
cursor = conn.cursor()
cursor.execute(SQL_QUERY)

records = cursor.fetchall()

После того, как вы вытащите дату из SQL SERVER, загрузите ее в фрейм данных Pandas.

      df = pd.Dataframe.from_records(records)

затем прочитайте данные из кадра данных pandas

       duckdb.sql('SELECT * FROM df').fetchall()

Вы можете настроить соединение ODBC с DuckDB. Затем экспортируйте необходимые данные из сервера SQL в базу данных DuckDB. Дополнительную информацию см. на https://duckdb.org/docs/archive/0.8.1/api/odbc/overview .

Другие вопросы по тегам