2014-04-30 91 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

相關問題