Python — запрос к базе данных и объединение данных без создания новой таблицы

Мой вопрос касается лучших практик ETL и того, как сделать вещи немного проще / эффективнее.

У меня есть данные, которые я извлекаю из API, которые затем преобразуются. Назовем это df_upc и предположим, что это фрейм данных Pandas для UPC, и я опущу предыдущий процесс преобразования из-за отсутствия релевантности. Эти данные отправляются в SQL Server с помощью метода Pandas to_sql: создание / обновление таблицы, а затем оператор Select в SQL присоединяется к таблице и некоторым другим данным для получения текущих уровней запасов. Таблица SQL Server, содержащая уровни инвентаризации, содержит миллионы SKU.

Мне не нравится создавать / обновлять таблицу каждый раз, когда я хочу присоединить некоторые данные с сервера к моему локальному файлу, и мне нужен лучший способ их чтения. Я пробовал запрашивать данные без соединения, но затем он загружает все миллионы строк, прежде чем присоединиться к ним в Python, и в итоге работает очень медленно. Ищете способ сделать это в скрипте Python, чтобы он мог оставаться автоматизированным. На данный момент процесс работает нормально, я просто чувствую, что есть способ получше. Спасибо за любую помощь / предложения!

import sqlalchemy, pandas as pd from sqlalchemy import create_engine engine1 = sqlalchemy.create_engine(‘mssql+pyodbc://@SERVER/DATABASE?trusted_connection=yes&driver=SQL+Server’) engine2 = sqlalchemy.create_engine(‘mssql+pyodbc://@SAME_SERVER/ANOTHER_DATABASE?trusted_connection=yes&driver=SQL+Server’) df_upc.to_sql(‘myTable’, engine1, if_exists=’replace’, index=False) #query has been stripped down for this example query = pd.read_sql_query( »’SELECT s.qty, s.upc, m.sku FROM StyleInventory s INNER JOIN marketing.dbo.myTable m on s.upc = m.upc;»’, engine2) df_joined = pd.DataFrame(query) df_joined.to_excel(«joined.xlsx», index=False)

Соответствующий ответ здесь. В этом примере для ОБНОВЛЕНИЯ используется TVP, но SP мог так же легко выполнить SELECT.   —  person BHOC    schedule 19.05.2021

Насколько велик myTable (строки и столбцы)?   —  person BHOC    schedule 19.05.2021

Этот вопрос / ответ или Используйте временная таблица с SQLAlchemy может дать вам альтернативное решение с использованием CTE   —  person BHOC    schedule 19.05.2021

@van, около 4000 строк, часто только UPC и, возможно, столбец SKU.   —  person BHOC    schedule 19.05.2021

Я понимаю. Я бы все равно посмотрел на первую ссылку в моем комментарии выше, используя конструкцию VALUES. Какую СУБД вы используете?   —  person BHOC    schedule 19.05.2021

@van это SQL Server. После дальнейшего рассмотрения лучшим вариантом будет временная таблица. Но как мне отправить данные на SQL Server из Pandas Dataframe, а затем выполнить соединения во временной таблице?   —  person BHOC    schedule 25.05.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!