./teracli create <table-schema> [<tablet-delimiter-file>]
./teracli createbyfile <schema-file> [<tablet-delimiter-file>]
-
Table-schema is a string used for describing the table schema. SeePropTree for more details.
-
Table name specification: the first character should be a letter (case insensitive); valid character includes alphanumeric character([a-z] and [A-Z]), digits([0-9]), underscores(
_
), dashes(-
); table name's valid length should be [1, 512]. -
Tera supports pre-sharding while creating table, key range describes in tablet-delimiter-file, while each range ends with '\n'
-
User also can use
createbyfile
with a schema-file to create a table with complicated schema.
Table's schema includes table name, locality groups properties and column families descriptions, a typical schema describes as follow:
# Tablet splitsize 4096M, mergesize 512M
# There are three locality groups, configure as mem, flash and disk
table_hello <splitsize=4096, mergesize=512> {
lg_index <storage=flash, blocksize=4> {
update_flag <maxversions=1>
},
lg_props <storage=flash, blocksize=32> {
level,
weight
},
lg_raw <storage=disk, blocksize=128> {
data <maxversions=10>
}
}
If schema does not include locality group information, tera will create default lg in disk type, just like:
table_hello {cf0, cf1, cf2}
Tera supports high performance kv table, its schema can only include table name or add some optional locality groups's properties.
# kv mode
kv_hello
# kv mode with lg configuration
kv_hello <storage=flash, splitsize=2048, mergesize=128>
Span | Properties | Meanings | Legal value | Unit | Default value | Others |
---|---|---|---|---|---|---|
table | splitsize | If tablet's size has grown to exceed this value, the tablet is splited in two | >=0, when splitsize = 0, disable automatic split | MB | 512 | |
table | mergesize | If tablet's size has reduced to this value, the adjacent two tablet is merged in one | >=0, when mergesize = 0, disable automatic merge | MB | 0 | splitsize is at least 5 times larger than mergesize |
lg | storage | storage type | "disk" / "flash" / "memory" | - | "disk" | |
lg | blocksize | Leveldb's block size | >0 | KB | 4 | |
lg | use_memtable_on_leveldb | whether enable memory compact strategy | "true" / "false" | - | false | |
lg | sst_size | sst's size in level0 | >0 | MB | 8 | |
cf | maxversions | max number of version keeps in tera | >0 | - | 1 | |
cf | ttl | time-to-live | >=0, ttl=0 means never timeout | second | 0 | if ttl conflicts with minversions, minversions has the last word |
./teracli update <tableschema>
Update table syntax is the same as create. Update operation can apply to one or more properties at one time.
- When update locality group's properties, user need to disable table
- Table and column family's properties support online update.
Update table properties:
./teracli update "oops<mergesize=512>"
./teracli update "oops<splitsize=1024,mergesize=128>"
Update locality groups properties:
./teracli update "oops{lg0<sst_size=9>}"
# update table properties, while update lg property
./teracli update "oops<splitsize=512>{lg0<sst_size=9>}"
Update column family properties:
./teracli update "oops{lg0{cf0<ttl=999>}}"
#update table and lg property, while update cf property
./teracli update "oops<splitsize=512>{lg0<sst_size=9>{cf0<ttl=999>}}"
Online add/delete column family:
# add cf1 to lg0, and set ttl = 123
# op means operation, op=add need put in front of other cf's properties
./teracli update "oops{lg0{cf1<op=add,ttl=123>}}"
# delete cf1 from lg0
./teracli update "oops{lg0{cf1<op=del>}}"
# When update kv schema, user need to disable table
./teracli update "kvtable<splitsize=1024>"
Set table into disable state; disable read and write service:
./teracli disable <tablename>
Set a table into enable state; recovery read and write service:
./teracli enable <tablename>
Delete a disable table, this operation could not rollback:
./teracli drop <tablename>
Show single table in formation:
./teracli show <tablename>
./teracli showx <tablename> // for more details
Show all tables' information:
./teracli show
./teracli showx // for more details
Show table schema, including properties of column family or locality group, etc.
./teracli showschema <tablename>
./teracli showschemax <tablename> // more details
Show single tablet server information as belove:
./teracli showts "example.company.com:7770"
./teracli showtsx "example.company.com:7770" // more details
Show all tablet servers's information:
./teracli showts
./teracli showtsx // more details
Use put to insert a key into table:
./teracli put <tablename> <rowkey> [<columnfamily:qualifier>] <value>
# In kv mode, columnfamily:qualifier should not be set.
./teracli put <tablename> <rowkey> <value>
For example:
./teracli put mytable rowkey cf0:qu0 value
put-ttl
is the same as put
, except that key will be invalid after ttl:
./teracli put-ttl <tablename> <rowkey> [<columnfamily:qualifier>] <value> <ttl(second)>
For example:
# key will be invalid after 20 seconds
./teracli put-ttl mytable rowkey cf0:qu0 value 20
putif
is the same as put
, except that putif will fail if key already in table; it works like std::map::insert():
./teracli putif <tablename> <rowkey> [<columnfamily:qualifier>] <value>
Use get to read value from table:
./teracli get <tablename> <rowkey> [<columnfamily:qualifier>]
For example:
./teracli get mytable rowkey cf0:qu0
Use scan to get a sorted key ranged data from table:
# all the key belonging to [start, end), will be scaned out
./teracli scan <tablename> <startkey> <endkey>
# scan all the versions of qualifier
./teracli scanallv <tablename> <startkey> <endkey>
Delete a qualifier:
./teracli delete <tablename> <rowkey> [<columnfamily:qualifier>]
# delete the newest version of the qualifier
./teracli delete1v <tablename> <rowkey> [<columnfamily:qualifier>]
Tera support setting qualifier's type into int64, use putint64 for initializtion:
# set cell of cf0:qu0 to be 67
./teracli putint64 mytable row1 cf0:qu0 67
Use getint64 to read counter from cell:
./teracli getint64 mytable row1 cf0:qu0
Use addint64 to increase value of cell; the value can be positive or negative:
# add -3 into cell
./teracli addint64 mytable row1 cf0:qu0 -3
Tera supports distributed atomic counter, use put_counter to set a counter:
./teracli put_counter <tablename> <rowkey> [<columnfamily:qualifier>] <integer(int64_t)>
For example:
./teracli put_counter mytable rowkey cf0:qu0 3
Use get_counter to read counter from cell:
./teracli get_counter <tablename> <rowkey> [<columnfamily:qualifier>]
For example:
./teracli get_counter mytable rowkey cf0:qu0
Use add to increase counter's value:
./teracli add <tablename> <rowkey> <columnfamily:qualifier> delta
For example, set counter=3 and add 2 on it, then counter will be 5:
./teracli add mytable rowkey cf0:qu0 2
Note:User should apply put_counter
, get_counter
, or add
operations to atomic counter, while use putint64
, getint64
, addint64
to operate int64 counter. Both of these two counters cannot be confused.
Append operation's syntax describe as follow, it works like std::string::append():
./teracli append <tablename> <rowkey> [<columnfamily:qualifier>] <value>
For example:
# before append, rowkey:cf0:qu0 = 'hello'
./teracli put mytalbe rowkey cf0:qu0 hello
# exec append
./teracli append mytable rowkey cf0:qu0 world
# after append, rowkey:cf0:qu0 = 'helloworld'
./teracli get mytable rowkey cf0:qu0