将大量数据集从 SQL 服务器导入 HDF5

Posted

技术标签:

【中文标题】将大量数据集从 SQL 服务器导入 HDF5【英文标题】:Import huge data-set from SQL server to HDF5 【发布时间】:2017-12-25 08:03:33 【问题描述】:

我正在尝试将具有 8 列的约 1200 万条记录导入 Python。由于它的巨大尺寸,我的笔记本电脑内存不足以完成此操作。现在我正在尝试将 SQL 数据导入 HDF5 文件格式。如果有人可以共享从 SQL 查询数据并将其保存为 HDF5 格式的代码的 sn-p 代码,那将非常有帮助。我愿意使用任何其他更易于使用的文件格式。

我计划做一些基本的探索性分析,稍后可能会使用 pandas 创建一些决策树/线性回归模型。

import pyodbc 
import numpy as np
import pandas as pd

con = pyodbc.connect('Trusted_Connection=yes',
                     driver = 'ODBC Driver 13 for SQL Server',
                     server = 'SQL_ServerName')
df = pd.read_sql("select * from table_a",con,index_col=['Accountid'],chunksize=1000)

【问题讨论】:

【参考方案1】:

试试这个:

sql_reader = pd.read_sql("select * from table_a", con, chunksize=10**5)

hdf_fn = '/path/to/result.h5'
hdf_key = 'my_huge_df'
store = pd.HDFStore(hdf_fn)
cols_to_index = [<LIST OF COLUMNS THAT WE WANT TO INDEX in HDF5 FILE>]

for chunk in sql_reader:
     store.append(hdf_key, chunk, data_columns=cols_to_index, index=False)

# index data columns in HDFStore
store.create_table_index(hdf_key, columns=cols_to_index, optlevel=9, kind='full')
store.close()

【讨论】:

@user3510503,很高兴它有帮助:) 伙计们,这段代码对于我的加载问题需要很长时间。有没有办法进一步加快这个过程?谢谢! @Mike_H,我认为首先你必须找出你的情况的瓶颈是什么...... 瓶颈是内存。 8GB。 @MaxU 或者你的意思是代码块的哪一部分运行时间最长? @Mike_H,是的,我的意思是你的代码中最慢的部分......它可能正在从数据库中读取或将块保存到 HDF5......

以上是关于将大量数据集从 SQL 服务器导入 HDF5的主要内容,如果未能解决你的问题,请参考以下文章

我们如何将大型数据集从 Google BigQuery 导入 R?

连接大量 HDF5 文件

如何像调度程序一样将大数据从 MongoDB 导入 SQL Server

如何删除大量数据 sql server2005 数据量在8千万左右??

Webservice 在新的 SQL Server 2014 实例上出现大量死锁

如何避免Spark SQL做数据导入时产生大量小文件