2014-04-30 54 views
-3

我有一个拥有8亿行和3列的数据文件。 csv文件大小为30 GB。通过SQL或R对大数据集进行高效分析?

我需要对数据做一些分析。花费很长时间将其加载到SQL服务器。 此外,花了约10分钟到一个SQL查询,如:

SELECT MAX(VALUE) AS max_s 
FROM [myDB].[dbo].[myTable] 

另外,我需要为每列做其他的统计分析。

SELECT COUNT(*) as num_rows, COUNT(DISTINCT VARIABLE1) as num_var1 FROM [myDB].[dbo].[myTable] 

如果我想提高分析/查询效率,SQL server或其他工具可以帮我吗?

R怎么样?但是,我的笔记本电脑只有8 GB内存。将整个数据加载到数据框是不可能的。有关数据

更多信息是这里 get statistics information by SQL query efficiently for table with 3 columns and 800 million rows

一些解决方案已经给出。我真的很感激。但是,我想知道我们是否有更有效的解决方案。

+4

如果你想与大数据,您将需要大箱子(或大的耐心)玩,周围没有其他办法。 –

+1

您是否在表中的列上创建了索引?这会让事情变得更快。 –

+0

数据文件和csv文件是一样的吗? –

回答

1

通过对数据进行索引,尤其是对于大型表,您可以大大加快SQL查询的速度。

CREATE CLUSTERED INDEX index_name 
ON [myDB].[dbo].[myTable] (value, cardID, locationID) 

上面的命令为您的表创建聚簇索引。将实际列名放在圆括号内。聚簇索引按照在圆括号中指定的顺序对行进行排序。您可以创建其他非聚簇索引,但通常建议您的表上至少有一个聚簇索引。

如果你在你的数据的唯一标识符(例如,为每一个真正独特的观察的ID),您可以通过使用CREATE UNIQUE INDEX语句创建一个UNIQUE INDEX。这通常是加快查询的最佳方式。

一般来说,您应该再次按照基数的降序来索引您的数据;这意味着具有最多不同值的列首先出现在“ON表(...)”语句中,接着是具有逐渐更少不同值的列。

Index syntax

Some more information on indexes

相关问题