Cassandra MLB 狀況劇 (0) 建立表單
想說寫點 Cassandra 的筆記,但單純敘述各種用法也是滿無聊的。我去 FAN GRAPHS上找些表格,實際示範如何在 Cassandra shell 中紀錄這些資料。
今天要做的事情就是把下面的表格選幾個欄位轉存起來,完整資料來自https://www.fangraphs.com/teams/redsox):
shell 操作流程:
- 建立一個名為 redsox 的 keyspace(class='SimpleStrategy', replication_factor=1)
- 建立一個名為 pitchers 的 table,table 包含 Name, G, GS 和 IP 等欄位。
- 我們把名字設成主鍵(假設名字沒有重複)
- 匯入資料
- 查詢資料
- 刪除 table
- 刪除 keyspace
1. 建立一個名為 redsox 的 keyspace:
用終端機開啟 cassandra shell:
$ cqlsh
建立 keyspace,SimpleStrategy 用於 standalone data center,replication_factor 是資料複製的份數:
CREATE KEYSPACE redsox WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': 1 };
觀察 keyspace:
DESCRIBE KEYSPACES ;
除了 default 的 keyspace 外我們還多了 redsox。
system_schema system_auth system system_distributed redsox system_traces
2. 建立一個名為 pitchers 的 table:
使用 redsox 這個 keyspace
USE redsox ;
這時候 shell 會變成 cqlsh:redsox>。
建立 pitchers 表單,並幫其欄位設置型態。tinyint 是 8 bits 有號整數,應該不會有投手一季可以先發超過 +128 場 XD:
CREATE TABLE pitchers ( name text, g tinyint , gs tinyint , ip float, PRIMARY KEY(name) );
我們將 name 設為主鍵,如果沒有設定其它鍵之後我們查詢時只能以 name 為條件查詢。
觀察一下 table:
DESCRIBE TABLE pitchers ; CREATE TABLE redsox.pitchers ( name text PRIMARY KEY, g tinyint, gs tinyint, ip float ) ...
3. 開始灌香腸:
來把資料輸進 table 裡:
INSERT INTO pitchers (name , g, gs, ip) VALUES ( 'Rick Porcello', 25, 25, 151.2) ;
觀察一下表格目前的狀態,星號代表所有 columns:
SELECT * FROM redsox.pitchers ; name | g | gs | ip ---------------+----+----+------- Rick Porcello | 25 | 25 | 151.2
再塞一筆資料:
INSERT INTO pitchers (name, g, gs, ip) VALUES ( 'Chris Sale', 23, 23, 146.0);
查看表格目前的狀態,注意這次我沒有指定 keyspace,因為 keyspace 其實是可以省略的:
SELECT * FROM pitchers ; name | g | gs | ip ---------------+----+----+------- Rick Porcello | 25 | 25 | 151.2 Chris Sale | 23 | 23 | 146
4. 查詢資料:
我們一直在用的 SELECT 其實就是查詢啦,比方說我要取得 Sale 的所有資料:
SELECT * FROM pitchers WHERE name='Chris Sale' ; name | g | gs | ip ------------+----+----+----- Chris Sale | 23 | 23 | 146
假設我只關心 Sale 目前的投球局數,可以用下面的方法只列出名字和局數:
SELECT name, ip FROM pitchers WHERE name='Chris Sale' ; name | ip ------------+----- Chris Sale | 146
!! 注意,目前我們的鍵只有 name 所以我們只以 name 為條件進行查詢 !!
5. 刪除 table:
如果都玩夠了我們來把 table 刪掉:
DROP TABLE pitchers ;
查看一下 redsox 底下所有的 tables:
DESCRIBE TABLES ; <empty>
6. 刪除 keyspace
最後也把 redsox 殺了,不留一點痕跡:
DROP KEYSPACE redsox ;
DESCRIBE KEYSPACES ; system_schema system_auth system system_distributed system_traces
留言
張貼留言