通过 SQL 或 R 对大型数据集进行有效分析? [关闭]
Posted
技术标签:
【中文标题】通过 SQL 或 R 对大型数据集进行有效分析? [关闭]【英文标题】:efficient analysis for large data set by SQL or R? [closed] 【发布时间】:2014-04-30 17:11:16 【问题描述】:我有一个包含 8 亿行和 3 列的数据文件。 csv 文件大小为 30 GB。
我需要对数据进行一些分析。将其加载到 SQL 服务器需要很长时间。 此外,SQL 查询大约需要 10 分钟,例如:
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
已经给出了一些解决方案。我真的很感激。但是,我想知道我们是否有更有效的解决方案。
【问题讨论】:
如果你想玩大数据,你需要大盒子(或大耐心),别无他法。 您是否在表中的列上创建了索引?这会让事情变得更快。 数据文件和csv文件是一回事吗? 请编辑您的问题并包含您用于 SQL 查询的表格的格式。你已经回答了你自己关于 R 的问题:基本产品的数据不适合内存。 @Dan Bracuk,感谢您对我之前的问题的回答。我只想找到更有效的。谢谢! 【参考方案1】:您可以通过为数据编制索引来大大加快 SQL 查询的速度,尤其是对于大型表。
CREATE CLUSTERED INDEX index_name
ON [myDB].[dbo].[myTable] (value, cardID, locationID)
上面的命令为您的表创建一个聚集索引。将您的实际列名放在圆括号内。聚集索引按圆括号内指定的顺序对行进行排序。您可以创建额外的非聚集索引,但通常建议您的表上至少有一个聚集索引。
如果您的数据中有一个唯一标识符(例如,每个观察值的真正不同的 id),您可以使用 CREATE UNIQUE INDEX 语句创建一个 UNIQUE INDEX。这通常是加快查询速度的最佳方式。
一般来说,您应该按基数降序对数据进行索引;这意味着在您的“ON table (...)”语句中,具有最多不同值的列首先出现,然后是具有逐渐减少不同值的列。
Index syntax
Some more information on indexes
【讨论】:
以上是关于通过 SQL 或 R 对大型数据集进行有效分析? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]
如何使用 PHP 和 MySQL 有效地对大型数据集进行分页?