От источника к этапу SQL Проверка информационной схемы: сравните 'IS_NULLABLE', используя столбцы 'COLUMN_NAME', из двух фреймов данных в python (Pandas) - PullRequest
2 голосов
/ 25 января 2020

Попытка проверить источник на этапе (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). Застрял из-за другого названия столбца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...