【发布时间】:2021-09-12 19:19:46
【问题描述】:
我正在开展一个项目,该项目将采用我们旧的数据库系统查询并将它们映射到新的数据库系统查询。我希望能够读取 FROM 语句,将它们拆分为数据库、模式、表和别名。数据如下所示:
FROM DatabaseA.SchemaA.Table1 tbl
INNER JOIN DatabaseB.SchemaC.Table13 tbl13
ON tbl.column12 = tbl.column12
我从完整的 SQL 查询中创建了一个数据框,并将 FROM 语句提取到一个新的数据框中(我使用了两个不同的函数):
# Reads file - creates dataframe
def readSQL(file_path):
# convert to a string
file_path=file_path.decode("utf-8")
# Set sql_script as a global variable
# Once sql_script is populated it can
# be called from other functions
global sql_script
# Open file
# Separate every line
df = open(file_path,'r')
lines = df.readlines()
df.close()
# print(lines)
# Create the dataframe
sql_script = pd.DataFrame(columns=('StatementDSC','ColumnTable'))
i = 0
StatementDSC = ""
ColumnTable = ""
for line in lines:
if ('SELECT' in line) or ('FROM' in line) or ('WHERE' in line):
StatementDSC = line.strip() # remove \n
else: #(',' in line) or ('.' in line):
ColumnTable = line.strip() # remove \t and /n
# Create next line
sql_script.loc[i] = [StatementDSC,ColumnTable]
i = i + 1
return sql_script
# print(sql_script)
# Reads FROM Statement breaks down tables/aliases/joins
def readFROM(full_SQL):
# Create FROM Dataframe
df = full_SQL.loc[full_SQL['StatementDSC']== 'FROM']
# Drop empty rows
# df.drop(df.ColumnTable == "",axis=0)
print(df)
# split ColumnTable by periods
# Create new Columns:
# Database, Schema, Table
split_data = df["ColumnTable"].str.split('.')
data = split_data.to_list()
names = ["Database","Schema","TableAlias"]
new_df = pd.DataFrame(data,columns=names)
print(new_df)
我可以从中拆分数据:
StatementDSC ColumnTable
5 FROM
6 FROM PPDAC.PLAN.DOCTORS Docs
7 FROM INNER JOIN PPDAC.PLAN.DOCTORSINFO DocInfo
8 FROM ON Docs.DocID = DocInfo.DocID
到这里:
Database Schema TableAlias
0 None None
1 PPDAC PLAN DOCTORS Docs
2 INNER JOIN PPDAC PLAN DOCTORSINFO DocInfo
如何添加另一个分隔符以同时使用句点和空格将它们分成四个?
我看过其他答案,但它们是针对一行而不是在多行上重复的。
【问题讨论】:
-
你是如何得到第 2 行的?我在您原来的
df中没有看到“CLARITY”? -
我的错误 - 我删除了我们的专有名称并错过了它。我会解决的。
-
所以如果你的第一个数据框是
df,你不只需要df["ColumnTable"].str.split(".", expand=True)吗? -
我可能会改变它,但这不是我的问题。我需要知道如何用多个分隔符分隔。
-
这正是我要告诉你的。你先和一个分开。然后和另一个。
标签: python dataframe split csv