【问题标题】:efficient analysis for large data set by SQL or R? [closed]通过 SQL 或 R 对大型数据集进行有效分析? [关闭]
【发布时间】: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,感谢您对我之前的问题的回答。我只想找到更有效的。谢谢!

标签: sql sql-server r bigdata


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2010-11-24
    相关资源
    最近更新 更多