var bigtable = gcloud.bigtable();
bigtable.getZones(function(err, zones, apiResponse) {});
var zone = bigtable.zone('my-zone');
zone.getClusters(function(err, clusters, apiResponse) {});
zone.createCluster(clusterOptions, function(err, cluster, apiResponse) {});
cluster.getMetadata(function (err, metadata, apiResponse) {});
cluster.setMetadata(metaData, function(err, metadata, apiResponse) {});
cluster.delete(function (err, apiResponse) {});
cluster.restore(function (err, apiResponse) {});
cluster.createTable('my-table', function(err, table, apiResponse) {});
// or
cluster.createTable(tableOptions, function(err, table, apiResponse) {});
var myTable = cluster.table('my-table');
cluster.getTables(function (err, tables, apiResponse) {});
table.getMetadata(function (err, tableSchema, apiResponse) {});
table.delete(function (err, table, apiResponse) {});
table.rename('awesome-table', function (err, table, apiResponse) {});
table.createFamily('user', function (err, family, apiResponse) {});
var userFamily = table.family('user');
userFamily.setMetadata(metaData, function(err, family, apiResponse) {});
userFamily.delete(function(err, apiResponse) {});
If a callback is not provided a stream will be returned
table.getSampleKeys(function (err, keys, apiResponse) {});
If callback is not provided a stream is returned
var rowOptions = {
prefix: 'com.google.'
};
table.getRows(rowOptions, function(err, rows, apiResponse) {});
rowOptions
would be filters used to determine which rows to delete
table.deleteRows(rowOptions, function(err, apiResponse) {});
table.createRow(rowData, function(err, row, apiResponse) {});
table.createRows([rowData], function(err, rows, apiResponse) {});
var myRow = table.row('my-row');
myRow.set('user:name', 'stephen', function(err, row, apiResponse) {});
// or for multiple columns
var rowData = {
user: { // family
name: 'stephen', // column
age: 99 // column
}
};
myRow.set(rowData, function(err, row, apiResponse) {});
myRow.get(['user:name'], function(err, columns, apiResponse) {});
myRow.delete(['user:name'], function(err, columns, apiResponse) {});
myRow.delete(function(err, columns, apiResponse) {});
This should not be confused with the Table#family
which allows you to update/delete families for the entire Table.
var myFamily = myRow.family('user');
// get column
myFamily.get('name', function(err, name, apiResponse) {});
// set column(s)
myFamily.set('name', 'peter', function(err, family, apiResponse) {});
// or
myFamily.set({ name: 'peter' }, function (err, family, apiResponse) {});
// delete column(s)
myFamily.delete(['name'], function(err, family, apiResponse) {});
// delete all columns associated with family
myFamily.delete(function(err, apiResponse) {});
I'm not a big fan of the "reverse hierarchy" (hope there's not a word for this that I don't know) and defaults. It's easy enough to get a zone from a cluster directly:
That makes the most sense to me ¯_(ツ)_/¯
Can you get clusters without specifying a zone?
Can you list tables without specifying a cluster and zone?
Our usual way of handling this is having a
getMetadata
method on Cluster:Most of the time, a user might want to "do something" with the cluster, so making an extra API request up front to download details that will be discarded isn't helpful or cost-effective.
😮 That's a thing? Maybe
restore
for a name, unlessundelete
is a convention?Does an endpoint exist for this, or do we parse out a part of the response from the resource (i.e. what would come back from
getMetadata
)?(For
table.getRows
,table.deleteRows
)What would
rowOptions
look like?General notes:
getMetaData
andsetMetaData
, just renamegetMetadata
andsetMetadata
:)table.rows([rowObj1, rowObj2])
would make it easier to modify family values at once.