如何在数据集中生成值

时间:2014-03-28 07:38:27

标签: mysql sql hadoop dataset

我将数据集放在文本文件中,格式如下:

user ID   Song ID   Rating
0         7171      5
0         8637      4
0         21966     4
0         35821     5

(它们之间只有一个TAB空间之间没有破折号)

我有大约100万条这样的记录。我需要生成具有流派ID的第四条记录。这个类型ID我在另一个文本文件中有它,如下面的格式:

Song ID   Album ID   Artist ID  Genre ID
4         243        2282       0
5         7783       3832       0
6         11704      1655       106
7         10126      6328       114
8         10672      4121       0

如何为数据集中相应的“歌曲ID”生成“流派ID”。 能否请您提出最简单的方法来生成第四列。

2 个答案:

答案 0 :(得分:1)

@ Anders Finn:他正在使用MySQL,它不支持SELECT ....INTO(Oracle)

 INSERT INTO newTable
 SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
 FROM tab1
 LEFT JOIN tab2
 ON tab1.SongID = tab2.SongID

我会将其添加为评论,但我仍然不能。

答案 1 :(得分:0)

创建一个包含所有四列的新表:

CREATE TABLE newTable
( 
  userid int,
  SongID int,
  Rating int,
  GenreID int
)

填充它:

SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
INTO newTable
FROM tab1
LEFT JOIN tab2
ON tab1.SongID = tab2.SongID

下面 它表示语法不适用于mySQL,仅适用于Oracle。这里描述了语法fra mysql:http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

在这种情况下,结果将是:

INSERT INTO newTable (userID, SongID, Rating, GenreID)
SELECT tb1.userID, tb1.SongID, tb1.Rating, tb2.GenreID
FROM tab1
LEFT JOIN tab2
ON tab1.SongID = tab2.SongID

如果有数百万条记录,则可以在tab1和tab2上的SONGID上创建索引。