Попытка проверить источник на этапе (ETL) SQL Информационная схема. Я подключил два сервера / базы данных через pyodbc + pandas и назначил эти информационные схемы как 'sourceDF' и 'StageDF'. Проблема в том, что 'COLUMN_NAME' не совпадает одинаково в двух фреймах данных.
Пример: 'Account_ID' и 'AccountId'
Но я хочу проверить 'IS_NULLABLE' с источником и этапом, относящимися к каждому строка.
Источник
База данных: Source_Database / Server: Source_Server >>> stageDF
<table><tbody><tr><th>|TABLE_SCHEMA|</th><th>|TABLE_NAME|</th><th>|COLUMN_NAME|</th><th>|IS_NULLABLE|</th></tr><tr><td>Stage</td><td>AccountDetails</td><td>Account_ID</td><td>Yes</td></tr><tr><td>Stage</td><td>AccountDetails</td><td>Engagement_ID</td><td>Yes</td></tr><tr><td>Stage</td><td>AccountDetails</td><td>Client_ID</td><td>NO</td></tr></tbody></table>
База данных: Stage_Databse / Сервер: Stage_Server >>> sourceDF
<table><tbody><tr><th>|TABLE_SCHEMA|</th><th>|TABLE_NAME|</th><th>|COLUMN_NAME|</th><th>|IS_NULLABLE|</th></tr><tr><td>Source</td><td>AccountDetails</td><td>AccountID</td><td>NO</td></tr><tr><td>Source</td><td>AccountDetails</td><td>EngagementID</td><td>NO</td></tr><tr><td>Source</td><td>AccountDetails</td><td>ClientID</td><td>NO</td></tr></tbody></table>
python код для соединения двух серверов / База данных:
import pyodbc
import pandas as pd
import time
from termcolor import colored, cprint
server1 = "serverSource.net"
database1 = "SourceDBneu01"
username1 = "SourceAdmin"
password1 = "Sourcepassword"
conn = pyodbc.connect(
"DRIVER={ODBC Driver};SERVER="
+ server1
+ ";DATABASE="
+ database1
+ ";UID="
+ username1
+ ";PWD="
+ password1
)
SQL_QuerySource = pd.read_sql_query("""SELECT [TABLE_SCHEMA], [TABLE_NAME], [COLUMN_NAME ], [IS_NULLABLE]
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'AccountDetails'""", conn)
sourceDF = pd.DataFrame(SQL_QuerySource, columns=('TABLE_SCHEMA'
, 'TABLE_NAME'
, 'COLUMN_NAME'
, 'IS_NULLABLE''))
print(sourceDF)
server1 = "Stageserver1.net"
database1 = "StageDBneu01"
username1 = "StageAdmin"
password1 = "Stagepassword"
conn = pyodbc.connect(
"DRIVER={ODBC Driver};SERVER="
+ server1
+ ";DATABASE="
+ database1
+ ";UID="
+ username1
+ ";PWD="
+ password1
)
SQL_QueryStage = pd.read_sql_query("""SELECT [TABLE_SCHEMA], [TABLE_NAME], [COLUMN_NAME ], [IS_NULLABLE]
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'AccountDetails' AND TABLE_SCHEMA = 'Stage'""", conn)
stageDF = pd.DataFrame(SQL_QueryStage, columns=('TABLE_SCHEMA'
, 'TABLE_NAME'
, 'COLUMN_NAME'
, 'IS_NULLABLE''))
print(stageDF)
Примечание: привязка к подготовке кода автоматической проверки базы данных для «SQL информационной схемы», в которой источник фокусируется на этап проверки (проверка теста ETL). Застрял из-за другого названия столбца