Problem Statement : Create a HBase table by giving the specifications as run configuration to the program and entire data file by accessing it.
__________________________________________________
create a java program in any IDE as HBaseCreateLoad.java(code below)
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
//import java.util.ArrayList;
//import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
//import org.apache.hadoop.hbase.client.Delete;
//import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;
public class HBaseCreateLoad {
/**
* @param args
*/
private static Configuration conf = null;
/**
* Initialization
*/
static {
conf = HBaseConfiguration.create();
// Passing the HBase configurations to the program
}
/**
* Create a table
*/
public static void creatTable(String tableName, String[] familys)
throws Exception
{
HBaseAdmin admin = new HBaseAdmin(conf);
if (admin.tableExists(tableName)) {
System.out.println("table already exists!");
}
else {
@SuppressWarnings("deprecation")
HTableDescriptor tableDesc = new HTableDescriptor(tableName);
for (int i = 0; i < familys.length; i++) {
tableDesc.addFamily(new HColumnDescriptor(familys[i]));
}
admin.createTable(tableDesc);
System.out.println("create table " + tableName + " ok.");
}
}
public static void deleteTable(String tableName) throws Exception {
try {
HBaseAdmin admin = new HBaseAdmin(conf);
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("delete table " + tableName + " ok.");
}
catch (MasterNotRunningException e)
{
e.printStackTrace();
}
catch (ZooKeeperConnectionException e) {
e.printStackTrace();
}
}
/**
* Put (or insert) a row
*/
public static void addRecords(String tableName, String[] cFamily,String fp,String[] cols) throws Exception {
//Here fp is location url to file to load , tableName is the name of the table
// cFamily is the string array to notify how many column families should be in table
//cols is the string array carrying names of column qualifiers that goes with column family
try {
//reading comma seperated file
String csvfile = fp.toString();
BufferedReader br = new BufferedReader(new FileReader(csvfile));
String line;
int row= 0;
//Accessing the table in hbase
HTable table = new HTable(conf,tableName);
Put p ;
while((line = br.readLine())!=null){
int i =0;
row++;
String value[] = line.split(",");
String rowid = Integer.toString(row);
// int colNum = cols.length;
// here we are adding the value[] values from the csv file we read
//cFamily[0],cFamily[1] which are basically passed in run configurations of the program run
//cFamily[0],cFamily[1] would be "exName" "stkNm" as per requirement
//cols[] is the column qualifiers names as per requirement passed in program execution
//cols[] names are "exnm" "tkr" "tdate" "opr" "hpr" "lpr" "cpr" "svol" "pravg"
//As per problem statement the first data values in csv file goes into first column family of
//"exName" with column qualifier "exnm" while the remaining in column family "stkNm"
p = new Put(Bytes.toBytes(rowid));
p.add(Bytes.toBytes(cFamily[0].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[0]));
//increment of column qualifier position every time after adding the current one in varaible i
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[1]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[2]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[3]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[4]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[5]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[6]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[7]));
i=i+1;
p.add(Bytes.toBytes(cFamily[1].toString()), Bytes.toBytes(cols[i]),Bytes.toBytes(value[8]));
table.put(p);
//System.out.println("Value : "+ value[8]);
}
/*HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(rowKey));
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes
.toBytes(value));
table.put(put);
System.out.println("insert recored " + rowKey + " to table "
+ tableName + " ok."); */
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("deprecation")
public static void getAllRecord (String tableName) {
try{
HTable table = new HTable(conf, tableName);
Scan s = new Scan();
ResultScanner ss = table.getScanner(s);
for(Result r :ss){
for(KeyValue kv : r.raw()){
System.out.print(new String(kv.getRow()) + " ");
System.out.print(new String(kv.getFamily()) + ":");
System.out.print(new String(kv.getQualifier()) + " ");
System.out.print(kv.getTimestamp() + " ");
System.out.println(new String(kv.getValue()));
}
}
} catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//A String of ARGS is passed in the main method as per our problem statement
// args[] contains the data "stocktable" 2 "exName" "stkNm" "/home/hadoop/Desktop/nyse" "exnm"
//"tkr" "tdate" "opr" "hpr" "lpr" "cpr" "svol" "pravg"
try {
//access the table name from args in position 0
String tablename = args[0].toString();
//Access the total number of column family must be in the table which is identified by a number in args position number 1 and relating their names
String[] familys =new String[Integer.parseInt(args[1])];
for(int i=0;(i < Integer.parseInt(args[1]));i++ ){
int temp1 =(2+i);
familys[i] = args[temp1].toString();
}
//create a table with table name and column family information by accessing ceatTable() function
HBaseCreateLoad.creatTable(tablename, familys);
// To find the file csv path url in args[] position of 4
int fpath = ((Integer.parseInt(args[1]))+2);
System.out.println("fpath variable postion value " +fpath);
// Retrieving the names of the columns qualifier and their starting position in args[]
int colNames =fpath+1;
System.out.println("column variables postion start value " +colNames);
int argsLen =(args.length-1);
String[] colTemp = new String[argsLen-fpath];
int cVar1=0;
while(colNames<=argsLen){
colTemp[cVar1]= args[colNames].toString();
System.out.println("column variables value " +colTemp[cVar1]);
cVar1=cVar1+1;
colNames =colNames+1;
}
//add entire file
System.out.println("fpath variable value " + args[fpath].toString());
HBaseCreateLoad.addRecords(tablename,familys,args[fpath],colTemp);
System.out.println("===========show all record========");
HBaseCreateLoad.getAllRecord(tablename);
} catch (Exception e) {
e.printStackTrace();
}
}
}
________________________________________________________________
Run the HBaseCreateLoad.java with Run configurations shown below.
"stocktable" 2 "exName" "stkNm" "/home/hadoop/Desktop/nyse" "exnm" "tkr" "tdate" "opr" "hpr" "lpr" "cpr" "svol" "pravg"
------
Note:(By analyzing the data in data file "nyse") see above
1)Given table name as "stocktable"
2)configured the entire data in two column families , (exName, stkNm)
3)the data file location (/home/hadoop/Desktop/nyse)
4) the column Qualifiers give as("exnm" "tkr" "tdate" "opr" "hpr" "lpr" "cpr" "svol" "pravg")
_______________________________________________________
Once the program is executed .Go to $HBASE_HOME/bin>hbase shell
Make sure the HBase is running .
In Hbase shell
hbase>list
hbase>scan 'stocktable'
___________________________________________________________________
The data file used:
file named nyse (on Desktop)
NYSE,QTM,08-02-2010,2.37,2.42,2.29,2.36,3013600,2.36
NYSE,QTM,05-02-2010,2.38,2.5,2.34,2.41,2687600,2.41
NYSE,QTM,04-02-2010,2.57,2.64,2.39,2.46,4529800,2.46
NYSE,QTM,03-02-2010,2.64,2.67,2.55,2.63,2688600,2.63
NYSE,QTM,02-02-2010,2.69,2.76,2.56,2.66,2959700,2.66
NYSE,QTM,01-02-2010,2.6,2.8,2.52,2.67,5050100,2.67
NYSE,QTM,29-01-2010,2.63,2.73,2.26,2.56,16484000,2.56
NYSE,QTM,28-01-2010,3.09,3.09,2.95,3.06,3986400,3.06
NYSE,QTM,27-01-2010,3.03,3.1,2.99,3.03,2431900,3.03
NYSE,QTM,26-01-2010,3.07,3.18,3,3.03,4027600,3.03
NYSE,QTM,25-01-2010,2.94,3.07,2.93,3.03,2285400,3.03
NYSE,QTM,22-01-2010,2.94,3.1,2.89,2.9,2986700,2.9
NYSE,QTM,21-01-2010,2.94,3.11,2.92,2.95,4547800,2.95
NYSE,QTM,20-01-2010,2.94,2.97,2.88,2.93,1883900,2.93
NYSE,QTM,19-01-2010,2.89,2.94,2.88,2.94,2089700,2.94
NYSE,QTM,15-01-2010,2.86,2.96,2.85,2.88,2908000,2.88
NYSE,QTM,14-01-2010,2.91,2.98,2.88,2.92,3425500,2.92
NYSE,QTM,13-01-2010,2.69,2.93,2.61,2.91,4795700,2.91
NYSE,QTM,12-01-2010,2.98,2.99,2.18,2.65,8417400,2.65
NYSE,QTM,11-01-2010,3.03,3.03,2.99,3,2082400,3
NYSE,QTM,08-01-2010,2.96,3.07,2.95,2.99,2863600,2.99
NYSE,QTM,07-01-2010,2.88,2.97,2.86,2.96,2580700,2.96
NYSE,QTM,06-01-2010,2.87,2.98,2.85,2.89,2425200,2.89
NYSE,QTM,05-01-2010,3.06,3.1,2.83,2.97,4879600,2.97
NYSE,QTM,04-01-2010,3.1,3.1,2.98,3,5793500,3
NYSE,QTM,31-12-2009,2.96,3,2.92,2.93,1422900,2.93
NYSE,QTM,30-12-2009,2.96,3.04,2.95,2.97,1447900,2.97
NYSE,QTM,29-12-2009,3.05,3.08,2.95,2.98,1763000,2.98
NYSE,QTM,28-12-2009,3.08,3.15,3.03,3.05,2873700,3.05
NYSE,QTM,24-12-2009,2.98,3.04,2.96,3.03,1442300,3.03
NYSE,QTM,23-12-2009,2.95,2.99,2.92,2.97,1823300,2.97
NYSE,QTM,22-12-2009,2.93,2.95,2.9,2.92,1926200,2.92
NYSE,QTM,21-12-2009,2.8,2.92,2.76,2.9,2660100,2.9
NYSE,QTM,18-12-2009,2.89,2.94,2.76,2.76,3187100,2.76
NYSE,QTM,17-12-2009,2.93,2.94,2.85,2.85,1850300,2.85
NYSE,QTM,16-12-2009,2.95,2.95,2.83,2.86,1530500,2.86
NYSE,QTM,15-12-2009,2.82,2.91,2.7,2.88,1574900,2.88
NYSE,QTM,14-12-2009,2.91,2.94,2.87,2.88,1673600,2.88
NYSE,QTM,11-12-2009,2.85,2.94,2.85,2.91,2095100,2.91
NYSE,QTM,10-12-2009,2.81,2.88,2.81,2.87,2141900,2.87
NYSE,QTM,09-12-2009,2.67,2.82,2.65,2.81,2275600,2.81
NYSE,QTM,08-12-2009,2.66,2.79,2.65,2.74,1872800,2.74
NYSE,QTM,07-12-2009,2.72,2.82,2.72,2.78,2544900,2.78
NYSE,QTM,04-12-2009,2.71,2.74,2.63,2.7,1939700,2.7
NYSE,QTM,03-12-2009,2.66,2.71,2.62,2.63,2376900,2.63
NYSE,QTM,02-12-2009,2.6,2.65,2.56,2.62,2133700,2.62
NYSE,QTM,01-12-2009,2.48,2.56,2.42,2.54,4108700,2.54
NYSE,QTM,30-11-2009,2.43,2.44,2.34,2.44,4220700,2.44
NYSE,QTM,27-11-2009,2.33,2.39,2.29,2.34,1254000,2.34
NYSE,QTM,25-11-2009,2.49,2.51,2.41,2.42,1540400,2.42
NYSE,QTM,24-11-2009,2.52,2.55,2.37,2.5,1861800,2.5
NYSE,QTM,23-11-2009,2.55,2.62,2.51,2.53,1701800,2.53
NYSE,QTM,20-11-2009,2.55,2.58,2.5,2.51,1137200,2.51
NYSE,QTM,19-11-2009,2.65,2.67,2.5,2.57,2395200,2.57
NYSE,QTM,18-11-2009,2.78,2.78,2.63,2.66,2107100,2.66
NYSE,QTM,17-11-2009,2.63,2.72,2.58,2.68,3477400,2.68
NYSE,QTM,16-11-2009,2.5,2.61,2.47,2.6,3787700,2.6
NYSE,QTM,13-11-2009,2.47,2.48,2.39,2.45,1478500,2.45
NYSE,QTM,12-11-2009,2.42,2.48,2.42,2.47,2417200,2.47
NYSE,QTM,11-11-2009,2.53,2.53,2.4,2.43,1678000,2.43
NYSE,QTM,10-11-2009,2.54,2.54,2.26,2.4,3190800,2.4
NYSE,QTM,09-11-2009,2.36,2.5,2.36,2.45,2284700,2.45
NYSE,QTM,06-11-2009,2.4,2.5,2.4,2.44,1877000,2.44
NYSE,QTM,05-11-2009,2.54,2.56,2.41,2.46,4835000,2.46
NYSE,QTM,04-11-2009,2.07,2.64,2.05,2.35,8634300,2.35
NYSE,QTM,03-11-2009,1.77,2.05,1.77,2.05,3125400,2.05
NYSE,QTM,02-11-2009,1.82,1.88,1.72,1.79,3163600,1.79
NYSE,QTM,30-10-2009,1.91,1.92,1.81,1.85,2931000,1.85
NYSE,QTM,29-10-2009,2.01,2.02,1.81,1.91,4891300,1.91
NYSE,QTM,28-10-2009,1.8,2.04,1.8,1.98,13317100,1.98
NYSE,QTM,27-10-2009,1.54,1.73,1.53,1.63,3051700,1.63
NYSE,QTM,26-10-2009,1.51,1.57,1.5,1.53,1754700,1.53
NYSE,QTM,23-10-2009,1.54,1.55,1.47,1.51,2100100,1.51
NYSE,QTM,22-10-2009,1.47,1.55,1.46,1.53,2165800,1.53
NYSE,QTM,21-10-2009,1.36,1.6,1.34,1.47,4227400,1.47
NYSE,QTM,20-10-2009,1.45,1.45,1.36,1.36,1008700,1.36
NYSE,QTM,19-10-2009,1.44,1.46,1.42,1.43,675500,1.43
NYSE,QTM,16-10-2009,1.46,1.46,1.41,1.43,927500,1.43
NYSE,QTM,15-10-2009,1.45,1.49,1.44,1.47,1340900,1.47
NYSE,QTM,14-10-2009,1.51,1.52,1.45,1.47,2875900,1.47
NYSE,QTM,13-10-2009,1.44,1.47,1.42,1.46,1077300,1.46
NYSE,QTM,12-10-2009,1.52,1.54,1.42,1.45,1730800,1.45
NYSE,QTM,09-10-2009,1.39,1.5,1.39,1.47,2522100,1.47
NYSE,QTM,08-10-2009,1.31,1.47,1.3,1.38,3701200,1.38
NYSE,QTM,07-10-2009,1.27,1.31,1.27,1.3,738900,1.3
NYSE,QTM,06-10-2009,1.25,1.32,1.24,1.27,2059300,1.27
NYSE,QTM,05-10-2009,1.22,1.25,1.21,1.24,1233500,1.24
NYSE,QTM,02-10-2009,1.21,1.29,1.15,1.22,1220200,1.22
NYSE,QTM,01-10-2009,1.25,1.27,1.18,1.23,1299400,1.23
NYSE,QTM,30-09-2009,1.25,1.3,1.23,1.26,1039800,1.26
NYSE,QTM,29-09-2009,1.25,1.3,1.24,1.25,1016900,1.25
NYSE,QTM,28-09-2009,1.19,1.28,1.18,1.27,1229900,1.27
NYSE,QTM,25-09-2009,1.16,1.19,1.14,1.18,728800,1.18
NYSE,QTM,24-09-2009,1.21,1.24,1.14,1.16,1057300,1.16
NYSE,QTM,23-09-2009,1.25,1.28,1.21,1.21,903700,1.21
NYSE,QTM,22-09-2009,1.25,1.27,1.22,1.24,670900,1.24
NYSE,QTM,21-09-2009,1.26,1.27,1.22,1.23,999900,1.23
NYSE,QTM,18-09-2009,1.28,1.29,1.24,1.27,1466500,1.27
NYSE,QTM,17-09-2009,1.25,1.29,1.22,1.28,1140400,1.28
NYSE,QTM,16-09-2009,1.21,1.28,1.2,1.25,1321300,1.25
NYSE,QTM,15-09-2009,1.17,1.24,1.15,1.2,2024700,1.2
NYSE,QTM,14-09-2009,1.16,1.18,1.14,1.17,555600,1.17
NYSE,QTM,11-09-2009,1.2,1.22,1.15,1.17,600400,1.17
NYSE,QTM,10-09-2009,1.17,1.23,1.16,1.2,1014900,1.2
NYSE,QTM,09-09-2009,1.15,1.19,1.13,1.17,607000,1.17
NYSE,QTM,08-09-2009,1.17,1.18,1.11,1.14,1166900,1.14
NYSE,QTM,04-09-2009,1.13,1.18,1.12,1.17,640400,1.17
NYSE,QTM,03-09-2009,1.14,1.15,1.12,1.14,500700,1.14
NYSE,QTM,02-09-2009,1.15,1.2,1.1,1.14,746000,1.14
NYSE,QTM,01-09-2009,1.19,1.23,1.13,1.16,1123200,1.16
NYSE,QTM,31-08-2009,1.17,1.23,1.15,1.23,2709900,1.23
NYSE,QTM,28-08-2009,1.23,1.24,1.17,1.2,876600,1.2
NYSE,QTM,27-08-2009,1.15,1.22,1.12,1.22,1162500,1.22
NYSE,QTM,26-08-2009,1.16,1.19,1.13,1.16,759800,1.16
NYSE,QTM,25-08-2009,1.19,1.21,1.15,1.16,1218200,1.16
NYSE,QTM,24-08-2009,1.2,1.2,1.16,1.2,1811900,1.2
NYSE,QTM,21-08-2009,1.15,1.18,1.11,1.17,1939200,1.17
NYSE,QTM,20-08-2009,1.05,1.15,1.04,1.12,1940000,1.12
NYSE,QTM,19-08-2009,1.01,1.05,1,1.05,688400,1.05
NYSE,QTM,18-08-2009,1,1.04,1,1.02,551200,1.02
NYSE,QTM,17-08-2009,1.01,1.02,0.97,0.99,1208700,0.99
NYSE,QTM,14-08-2009,1.06,1.07,1.02,1.05,1189300,1.05
NYSE,QTM,13-08-2009,1,1.1,0.99,1.08,2659000,1.08
NYSE,QTM,12-08-2009,0.97,0.99,0.95,0.99,1771900,0.99
NYSE,QTM,11-08-2009,0.97,0.98,0.94,0.96,716200,0.96
NYSE,QTM,10-08-2009,0.91,0.97,0.91,0.97,856900,0.97
NYSE,QTM,07-08-2009,0.96,0.97,0.85,0.92,1311000,0.92
NYSE,QTM,06-08-2009,0.96,0.96,0.91,0.95,596200,0.95
NYSE,QTM,05-08-2009,0.91,0.95,0.89,0.95,1220200,0.95
NYSE,QTM,04-08-2009,0.9,0.94,0.85,0.9,1503300,0.9
NYSE,QTM,03-08-2009,0.93,0.95,0.89,0.91,1809200,0.91
NYSE,QTM,31-07-2009,0.93,0.97,0.92,0.92,850000,0.92
NYSE,QTM,30-07-2009,0.93,0.98,0.93,0.94,758500,0.94
NYSE,QTM,29-07-2009,1,1,0.92,0.92,1766000,0.92
NYSE,QTM,28-07-2009,0.99,1.04,0.95,1.01,1441300,1.01
NYSE,QTM,27-07-2009,0.97,0.99,0.95,0.96,778300,0.96
NYSE,QTM,24-07-2009,0.95,1,0.93,0.97,443700,0.97
NYSE,QTM,23-07-2009,1.02,1.04,0.94,0.98,1808400,0.98
NYSE,QTM,22-07-2009,0.95,0.99,0.93,0.99,636900,0.99
NYSE,QTM,21-07-2009,1.01,1.01,0.96,0.97,416700,0.97
NYSE,QTM,20-07-2009,1.04,1.05,1,1.01,838500,1.01
NYSE,QTM,17-07-2009,0.95,1.05,0.95,1.03,923800,1.03
NYSE,QTM,16-07-2009,1.04,1.05,0.98,1.02,869800,1.02
NYSE,QTM,15-07-2009,0.99,1.05,0.97,1.05,1845900,1.05
NYSE,QTM,14-07-2009,0.92,0.99,0.91,0.99,978200,0.99
NYSE,QTM,13-07-2009,0.84,0.92,0.83,0.92,821200,0.92
NYSE,QTM,10-07-2009,0.82,0.83,0.79,0.83,404000,0.83
NYSE,QTM,09-07-2009,0.88,0.88,0.82,0.82,665500,0.82
NYSE,QTM,08-07-2009,0.88,0.89,0.79,0.87,1068800,0.87
NYSE,QTM,07-07-2009,0.89,0.9,0.86,0.88,494000,0.88
NYSE,QTM,06-07-2009,0.92,0.92,0.85,0.89,695300,0.89
NYSE,QTM,02-07-2009,0.94,0.96,0.9,0.91,846300,0.91
NYSE,QTM,01-07-2009,0.89,0.99,0.89,0.98,2543300,0.98
NYSE,QTM,30-06-2009,0.85,0.89,0.83,0.83,683700,0.83
NYSE,QTM,29-06-2009,0.85,0.88,0.81,0.85,613400,0.85
NYSE,QTM,26-06-2009,0.88,0.88,0.79,0.79,2731700,0.79
NYSE,QTM,25-06-2009,0.81,0.88,0.8,0.88,437600,0.88
NYSE,QTM,24-06-2009,0.82,0.82,0.78,0.81,581500,0.81
NYSE,QTM,23-06-2009,0.8,0.82,0.76,0.8,528000,0.8
NYSE,QTM,22-06-2009,0.85,0.85,0.8,0.8,702400,0.8
NYSE,QTM,19-06-2009,0.83,0.88,0.82,0.85,1002500,0.85
NYSE,QTM,18-06-2009,0.87,0.89,0.8,0.83,1062200,0.83
NYSE,QTM,17-06-2009,0.92,0.92,0.86,0.86,698300,0.86
NYSE,QTM,16-06-2009,0.95,0.95,0.91,0.92,687100,0.92
NYSE,QTM,15-06-2009,0.95,0.96,0.92,0.94,1067700,0.94
NYSE,QTM,12-06-2009,0.92,0.96,0.91,0.95,881300,0.95
NYSE,QTM,11-06-2009,0.9,0.94,0.9,0.92,1183900,0.92
NYSE,QTM,10-06-2009,0.93,0.95,0.87,0.89,1526100,0.89
NYSE,QTM,09-06-2009,0.9,0.95,0.87,0.9,2633000,0.9
NYSE,QTM,08-06-2009,0.98,0.98,0.85,0.86,2143400,0.86
NYSE,QTM,05-06-2009,0.97,0.99,0.95,0.96,1026000,0.96