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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: