#blog2navi()
*ニコニコデータビューアー向けテーブルスキーマ [#o0a0d56a]

ニコニコデータセットが公開された。コメントデータが約24億件。動画情報が約800万件ある。動画情報はMySQLに入るが、コメントデータはさすがに入りきらない。いきおいコメントデータは、hadoop等を用いた分散環境での解析が主になる。

しかし、いまだにhadoopを使うような分散環境を構築するのは素人には手が余る。何かを分析しようとしても、分析するための事前準備に多くの手間を取られる。

私は思いついた。それなら、環境構築の部分はこちらでやってWebUIを通してデータ解析に注力してもらうシステムを作れば良いのでは・・・・。

hadoopの上にHiveと言うSQL-Likeな問い合わせができるシステムがある。それを使うと比較的簡単(SQLを書くだけで)にデータの取得ができる。

つまり、Hive->Hadoop->ニコニコ動画のコメント情報を解析->結果出力の部分を詰め込んだ環境を作れば良いのでは。

と思って作ったのが[[これ>http://nicodata.info/]].ニコニコデータセットを手軽に解析できるwebアプリだ。

&ref(./WS000074.JPG,30%);


手始めに、上に書いている

 SELECT count(*) FROM nicodata.comment_data_sampling100 WHERE comment_string LIKE "%wwwwww%"
を下のテキストエリアに貼り付けて、その下のexecuteボタンを押して見てほしい。
しばらくする(5分くらい待つ)と、Query Status:executedと言う表示が出てくるはずだ。

&ref(./WS000078.JPG,30%);

これが出ると言うことはすなわち、解析が終わったと言うことだ。ちなみに上のSQL文は、wwwwwを含むコメントは何個あるか数えるSQLだ。

これを使うことで、色々複雑な前準備無しに手軽にニコニコ動画の解析ができる。
バックエンドは、AmazonEC2を使っているためお金がかかる。当面は、土日だけ立ちあげて、平日は落としておこうと思っている。
SELECTしか使えないようにしているので、初心者がデータを壊すことはありません。安心して使ってください。

** 何故作ったかの説明 [#i068916f]
このスライドに何故作ったの説明がある。
http://www.slideshare.net/shibacow/n-24673260

スライド中あった、日本語が通らない問題は現在解決されている。

** 仕様 [#x4a087ac]
- SELECTは使えます。
- INSERTは使えません。
- ALTERは使えません。
- そのため初心者がデータを壊すことはありませんので安心して使ってください。

** バックエンド [#d8f024d7]
- AmazonEC2-ElasticMapReduce Master-m1.mediam,Slave-m1.large x 4
- [[Shib>https://github.com/tagomoris/shib]](Simple Hive Interface) by tagomoris

* テーブル情報 [#effb0691]
** スキーマ - nicodata [#w910500b]
** テーブルサンプリング [#gf21e395]
全数のデータが入ったテーブルの他に、サンプリングデータを用意した。

10分の位置のレコードを入れたテーブル(sm数値の部分で、10で割り切れるもののみ格納)と100分の1レコードを入れたテーブル(sm数値の部分の100で割り切れるもののみ格納)を用意した。なるだけサンプリングデータで解析してほしい。

全数で検査をする前に、100分の一、10分の一で正しく動くか試してほしい。全数検査はよほどのことが無い限りやら無い方向で。

** テーブル(動画情報) [#u30f7878]

- nicodata.videoinfo_sampling100 (100分の一サンプリング)(八万)
- nicodata.videoinfo_sampling10 (10分の一サンプリング)(八十万)
- nicodata.videoinfo (全数)(八百万)
*** テーブルスキーマ [#m76f1f22]
|カラム名|型|説明|h
|smid| string|動画ID|
|thread_id| string|スレッドID(コメントID)|
|title|string|動画タイトル|
|description|string|動画説明文|
|thumbnail_url|string|サムネイル画像へのURL|
|upload_time|string|投稿日(ISO 8601 形式) 2007-03-06T00:33:00+09:00|
|length|int|動画再生長 (秒数)|
|movie_type|string|動画フォーマット|
|size_high|int|高画質動画のファイルサイズ (byte)|
|size_low|int|低画質動画のファイルサイズ (byte)|
|view_counter|int|動画の再生数|
|comment_counter|int|コメント数|
|mylist_counter|int|マイリスト登録数|
|last_res_body|string|最近のコメントのサマリ|


** テーブル(タグ情報) [#i2bfe700]
- nicodata.tags_sampling100(100分の1サンプリング)(40万)
- nicodata.tags_sampling10(10分の1サンプリング)(400万)
- nicodata.tags (4千万)
*** テーブルスキーマ [#lf6f3c5e]
|カラム名|型|説明|h
|smid|string|動画ID(smid)|
|locked|tinyint|ロックされているか?(1 or 0)|
|category|tinyint|カテゴリータグか(1 or 0)|
|tag|string|タグ名(初音ミク)とか|


** テーブル(コメント情報) [#u51a5dff]
- nicodata.comment_data_sampling100(100分の1サンプリング)(二千万)
- nicodata.comment_data_sampling10(10分の1サンプリング)(二億四千万)
- nicodata.comment_data (24億件)
*** テーブルスキーマ [#la658c13]
|カラム名|型|説明|h
|smid|string|動画ID(smid)|
|date|int|コメント投稿日時 (UNIX秒)|
|vpos|int|コメント書き込み再生位置 (1/100秒)|
|no|int|コメント番号|
|command|string|コマンド(184 sita等)|
|comment_string|string|コメント本文|


- 注意
コメントテーブルのdateを参照する場合には、`date`とした方が良いようです。hiveが自分のコマンドのdateと区別ができず、エラーになります。
 SELECT count(`date`) FROM nicodata.comment_data_sampling100 WHERE `date` > 1341994948
のようにした方が良いです。


RIGHT:Category: [[[ニコニコ動画 hadoop>日記/Category/ニコニコ動画 hadoop]]] - 03:01:45
----
RIGHT:&blog2trackback();
#comment(above)
#blog2navi()

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS