python - 使用 python 将数据从 MySQL 迁移到 SAP HANA

标签 python mysql sqlalchemy hana

我正在尝试使用 Python 将数据从 MySQL 数据库迁移到 HANA。我们目前在工作中实现此迁移的方式是手动,但计划是每天运行一个脚本来收集前一天的数据(存储在 MySQL 中)并将其移动到 HANA 以使用他们的分析工具。我编写了一个包含 2 个函数的脚本,其中一个函数连接到 MySQL 并将查询中的数据临时存储在 Pandas Dataframe 中。第二个函数使用 sqlalchemy-hana 连接器创建一个引擎,将其输入到 Pandas 的 to_sql 函数中,以将数据存储到 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:password@host: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 Code 完成脚本大约需要 90 秒,2) 使用 sqlalchemy-hana 连接器时,它如何知道创建表并存储数据/将数据附加到哪个模式?自述文件并没有真正解释。幸运的是,它将它存储在正确的架构中(带有我的用户名的架构),但我创建了另一个架构作为测试,当然该表没有显示在该架构下。如果我尝试在 create_engine 行中指定数据库,如下所示:

engine = create_engine('hana://username:password@host:port/Username')

我收到此错误:TypeError:connect() 收到意外的关键字参数“数据库”。

此外,我注意到,如果我运行脚本两次并计算创建的表中的行数,它会添加行两次 - 本质上是创建重复项。因此,3) 迭代抛出 Dataframe 的行并使用 pyhdb 包 逐一插入行会更好吗?

任何意见/建议/答案将不胜感激!谢谢!

最佳答案

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

如果这真的只是关于数据传输的“管道”,我可能不会将第 3 方工具放入该场景中。这只会使设置变得比必要的更加复杂。

关于python - 使用 python 将数据从 MySQL 迁移到 SAP HANA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44688029/

相关文章:

python - 高效查询多列 SQLAlchemy ORM

python - pandas to_csv 参数 float_format 为百分比

python - 索引范围错误

mysql - 如何从数据库记录中删除 ¶ (pilcrow) 符号

mysql - ToListAsync 将第一项的数据重复到每个列表项中

python - 通过反射用 python 填充复杂的 SQL 数据库?

python - 无法显示图像网络服务器python

python - 如何将 csv 中的行插入到 postgres+python 中现有表中的特定列?

mysql - 如何在谷歌云sql实例数据库中创建触发器

python - 在 Sqlalchemy/Postgres 中使用绑定(bind)参数执行 WHERE IN