我正尝试使用Python将数据从MySQL数据库迁移到HANA。我们目前正在实施此迁移的方式是手动执行,但计划是每天运行脚本以收集前一天的数据(存储在MySQL中)并将其移至HANA以使用其分析工具。我写了一个包含两个函数的脚本,一个连接到MySQL,并将查询中的数据临时存储在熊猫数据框中。第二个函数使用sqlalchemy-hana连接器创建一个引擎,将其馈入Pandas的函数中,以将数据存储到HANA中。使用python将数据从MySQL移动到SAP HANA
下面是第一个函数调用到MySQL
def connect_to_mysql(query):
try:
#connect to the db
stagedb = myscon.connect(
user = 'user-name',
password = 'password',
host = 'awshost.com',
database = 'sampletable',
raise_on_warnings = True)
df = pandas.read_sql(query, stagedb)
except myscon.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print('Incorrect user name or password')
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exit")
else:
print(err)
finally:
if central_stagedb:
central_stagecur.close()
central_stagedb.close()
return df
这是第二个函数调用来连接到HANA
def connect_to_hana(query):
#connect to HANA db
try:
engine = create_engine('hana://username:[email protected]:port')
#return dataframe from first function
to_df = connect_to_mysql(query)
to_df.to_sql('sample_data', engine, if_exists = 'append', index = False, chunksize=20000)
except: raise
我HAHA DB在目录文件夹多个方案,其中不乏“SYS”或“_SYS”相关。我已经创建了一个单独的模式来测试我的代码并进行游戏,它与我的用户名具有相同的名称。
我的问题是这样的:1)是否有更高效的方式将数据从MySQL加载到Hana,而不使用像CSV文件一样的中介,或者在我的情况下是Pandas Dataframe。使用VS代码大约需要90秒才能完成脚本,并且2)使用sqlalchemy-hana连接器时,它如何知道创建表和存储数据/将数据追加到哪个模式?读我文件没有真正解释。幸运的是,它将其存储在正确的模式中(使用我的用户名),但是我创建了另一个作为测试,当然,该表并没有显示在该模式下。如果我试图指定的create_engine线数据库像这样:
engine = create_engine('hana://username:[email protected]:port/Username')
我得到这个错误:类型错误:连接()得到了一个意想不到的关键字参数“数据库”。
另外,我注意到如果我要运行我的脚本两次并计算创建表中的行数,它会添加两行 - 实质上是创建重复项。因此,3)迭代抛出Dataframe的行并使用pyhdb包一个接一个地插入行会更好吗?
任何意见/建议/答案将非常感激!谢谢!
谢谢你的回应。 SDA是否不支持与MySQL的交互?或者至少这是我从我的经理那里得到的信息,因此需要这个python工作流程 – Nirav
请查阅文档(管理指南 - 数据提供)。 SDA支持通用的ODBC访问以及定义自定义适配器的选项。 –