2017-06-22 58 views
0

我正尝试使用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包一个接一个地插入行会更好吗?

任何意见/建议/答案将非常感激!谢谢!

回答

0

哎...这似乎是一个相当复杂的工作流程。或者,您可能需要检查HANA功能智能数据访问(SDA)和智能数据集成(SDI)。有了这些,您可以在SAP HANA中建立“虚拟”数据访问,即在运行分析查询时,将数据从MySQL DB读取到HANA流程中。或者你实际上可以将数据加载到HANA中,使其成为数据集市。

如果真的只是这个数据传输的“管道”,我可能不会把第三方工具放到场景中。这只会使设置比必要更复杂。

+0

谢谢你的回应。 SDA是否不支持与MySQL的交互?或者至少这是我从我的经理那里得到的信息,因此需要这个python工作流程 – Nirav

+0

请查阅文档(管理指南 - 数据提供)。 SDA支持通用的ODBC访问以及定义自定义适配器的选项。 –