public final class BigtableTableAdminClient extends Object implements AutoCloseable
Provides access to the table schemas only, not the data stored within the tables.
See the individual methods for example code.
Sample code to get started:
// One instance per application.
BigtableTableAdminClient client = BigtableTableAdminClient.create("[PROJECT]", "[INSTANCE]");
CreateTable request =
CreateTableRequest.of("my-table")
.addFamily("cf1")
.addFamily("cf2", GCRULES.maxVersions(10))
.addSplit(ByteString.copyFromUtf8("b"))
.addSplit(ByteString.copyFromUtf8("q"));
client.createTable(request);
// Cleanup during application shutdown.
client.close();
Creating a new client is a very expensive operation and should only be done once and shared in an application. However, close() needs to be called on the client object to clean up resources such as threads during application shutdown.
This class can be customized by passing in a custom instance of BigtableTableAdminSettings to create(). For example:
To customize credentials:
BigtableTableAdminSettings settings = BigtableTableAdminSettings.newBuilder()
.setProjectId("[PROJECT]")
.setInstanceId("[INSTANCE]")
.setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
.build();
BigtableTableAdminClient client = BigtableTableAdminClient.create(settings);
To customize the endpoint:
BigtableTableAdminSettings.Builder settingsBuilder = BigtableTableAdminSettings.newBuilder()
.setProjectId("[PROJECT]")
.setInstanceId("[INSTANCE]");
settingsBuilder.stubSettings()
.setEndpoint(myEndpoint).build();
BigtableTableAdminClient client = BigtableTableAdminClient.create(settingsBuilder.build());
Modifier and Type | Method and Description |
---|---|
void |
awaitReplication(String tableId)
Blocks the current thread until replication has caught up to the point when this method was
called.
|
com.google.api.core.ApiFuture<Void> |
awaitReplicationAsync(String tableId)
Returns a future that is resolved when replication has caught up to the point when this method
was called.
|
void |
close() |
static BigtableTableAdminClient |
create(BigtableTableAdminSettings settings)
Constructs an instance of BigtableTableAdminClient with the given settings.
|
static BigtableTableAdminClient |
create(String projectId,
String instanceId)
Constructs an instance of BigtableTableAdminClient with the given project and instance IDs.
|
static BigtableTableAdminClient |
create(String projectId,
String instanceId,
com.google.cloud.bigtable.admin.v2.stub.EnhancedBigtableTableAdminStub stub)
Constructs an instance of BigtableTableAdminClient with the given instance name and stub.
|
Table |
createTable(CreateTableRequest request)
Creates a new table with the specified configuration.
|
com.google.api.core.ApiFuture<Table> |
createTableAsync(CreateTableRequest request)
Asynchronously creates a new table with the specified configuration.
|
void |
deleteTable(String tableId)
Deletes the table specified by the table ID.
|
com.google.api.core.ApiFuture<Void> |
deleteTableAsync(String tableId)
Asynchronously deletes the table specified by the table ID.
|
void |
dropAllRows(String tableId)
Drops all data in the table.
|
com.google.api.core.ApiFuture<Void> |
dropAllRowsAsync(String tableId)
Asynchronously drops all data in the table.
|
void |
dropRowRange(String tableId,
ByteString rowKeyPrefix)
Drops rows by the specified row key prefix and table ID.
|
void |
dropRowRange(String tableId,
String rowKeyPrefix)
Drops rows by the specified row key prefix and table ID.
|
com.google.api.core.ApiFuture<Void> |
dropRowRangeAsync(String tableId,
ByteString rowKeyPrefix)
Asynchronously drops rows by the specified row key prefix and table ID.
|
com.google.api.core.ApiFuture<Void> |
dropRowRangeAsync(String tableId,
String rowKeyPrefix)
Asynchronously drops rows by the specified row key prefix and table ID.
|
boolean |
exists(String tableId)
Checks if the table specified by the table ID exists.
|
com.google.api.core.ApiFuture<Boolean> |
existsAsync(String tableId)
Asynchronously checks if the table specified by the table ID exists.
|
com.google.cloud.Policy |
getIamPolicy(String tableId)
Gets the IAM access control policy for the specified table.
|
com.google.api.core.ApiFuture<com.google.cloud.Policy> |
getIamPolicyAsync(String tableId)
Asynchronously gets the IAM access control policy for the specified table.
|
String |
getInstanceId()
Gets the ID of the instance whose tables this client manages.
|
String |
getProjectId()
Gets the project ID of the instance whose tables this client manages.
|
Table |
getTable(String tableId)
Gets the table metadata by table ID.
|
com.google.api.core.ApiFuture<Table> |
getTableAsync(String tableId)
Asynchronously gets the table metadata by table ID.
|
List<String> |
listTables()
Lists all table IDs in the instance.
|
com.google.api.core.ApiFuture<List<String>> |
listTablesAsync()
Asynchronously lists all table IDs in the instance.
|
Table |
modifyFamilies(ModifyColumnFamiliesRequest request)
Creates, updates and drops column families as specified in the request.
|
com.google.api.core.ApiFuture<Table> |
modifyFamiliesAsync(ModifyColumnFamiliesRequest request)
Asynchronously creates, updates, and drops column families as specified in the request.
|
com.google.cloud.Policy |
setIamPolicy(String tableId,
com.google.cloud.Policy policy)
Replaces the IAM policy associated with the specified table.
|
com.google.api.core.ApiFuture<com.google.cloud.Policy> |
setIamPolicyAsync(String tableId,
com.google.cloud.Policy policy)
Asynchronously replaces the IAM policy associated with the specified table.
|
List<String> |
testIamPermission(String tableId,
String... permissions)
Tests whether the caller has the given permissions for the specified table.
|
com.google.api.core.ApiFuture<List<String>> |
testIamPermissionAsync(String tableId,
String... permissions)
Asynchronously tests whether the caller has the given permissions for the specified table.
|
public static BigtableTableAdminClient create(@Nonnull String projectId, @Nonnull String instanceId) throws IOException
IOException
public static BigtableTableAdminClient create(@Nonnull BigtableTableAdminSettings settings) throws IOException
IOException
public static BigtableTableAdminClient create(@Nonnull String projectId, @Nonnull String instanceId, @Nonnull com.google.cloud.bigtable.admin.v2.stub.EnhancedBigtableTableAdminStub stub)
public String getProjectId()
public String getInstanceId()
public void close()
close
in interface AutoCloseable
public Table createTable(CreateTableRequest request)
Sample code:
// A table with a single column family, which retains only the latest value.
Table table = client.createTable(
CreateTableRequest.of("my-table")
.addFamily("cf2", GCRULES.maxVersions(1))
);
// Another table with more complex garbage collection rules.
Table table = client.createTable(
CreateTableRequest.of("my-table")
.addFamily("cf2", GCRULES.union()
.rule(GCRULES.maxAge(Duration.ofDays(30)))
.rule(GCRULES.maxVersions(5))
)
);
public com.google.api.core.ApiFuture<Table> createTableAsync(CreateTableRequest request)
Sample code:
// A table with a single column family, which retains values up to 7 days.
ApiFuture<Table> tableFuture = client.createTableAsync(
CreateTableRequest.of("my-table")
.addFamily("cf", GCRULES.maxAge(Duration.ofDays(7)))
);
// Another table with more complex garbage collection rules.
ApiFuture<Table> tableFuture = client.createTableAsync(
CreateTableRequest.of("my-table")
.addFamily("cf", GCRULES.intersection()
.rule(GCRULES.maxAge(120, TimeUnit.HOURS))
.rule(GCRULES.maxVersions(10))
)
);
ApiFutures.addCallback(
tableFuture,
new ApiFutureCallback<Table>() {
public void onSuccess(Table table) {
System.out.println("Created table: " + table.getTableName());
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public Table modifyFamilies(ModifyColumnFamiliesRequest request)
Sample code:
Table modifiedTable = client.modifyFamilies(
ModifyColumnFamiliesRequest.of(tableId)
.addFamily("cf1")
.addFamily("cf2", GCRULES.maxAge(Duration.ofSeconds(1000, 20000)))
.updateFamily(
"cf3",
GCRULES.union()
.rule(GCRULES.maxAge(Duration.ofSeconds(100)))
.rule(GCRULES.maxVersions(1))
)
.addFamily(
"cf4",
GCRULES.intersection()
.rule(GCRULES.maxAge(Duration.ofSeconds(2000)))
.rule(GCRULES.maxVersions(10))
)
.dropFamily("cf5")
);
System.out.println("Resulting families:");
for (ColumnFamily cf : modifiedTable.getColumnFamilies()) {
System.out.println(cf.getId());
}
for available options.
public com.google.api.core.ApiFuture<Table> modifyFamiliesAsync(ModifyColumnFamiliesRequest request)
Sample code:
ApiFuture<Table> modifiedTableFuture = client.modifyFamiliesAsync(
ModifyColumnFamiliesRequest.of(tableId)
.addFamily("cf1")
.addFamily("cf2", GCRULES.maxAge(Duration.ofSeconds(1000, 20000)))
.updateFamily(
"cf3",
GCRULES.union()
.rule(GCRULES.maxAge(Duration.ofSeconds(100)))
.rule(GCRULES.maxVersions(1))
)
.addFamily(
"cf4",
GCRULES.intersection()
.rule(GCRULES.maxAge(Duration.ofSeconds(2000)))
.rule(GCRULES.maxVersions(10))
)
.dropFamily("cf5")
);
ApiFutures.addCallback(
modifiedTableFuture,
new ApiFutureCallback<Table>() {
public void onSuccess(Table table) {
System.out.println("Modified table: " + table.getTableName());
System.out.println("Resulting families:");
for (ColumnFamily cf : modifiedTable.getColumnFamilies()) {
System.out.println(cf.getId());
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
for available options.
public void deleteTable(String tableId)
Sample code:
client.deleteTable("my-table");
public com.google.api.core.ApiFuture<Void> deleteTableAsync(String tableId)
Sample code:
ApiFuture<Void> future = client.deleteTableAsync("my-table");
ApiFutures.addCallback(
future,
new ApiFutureCallback<Void>() {
public void onSuccess(Void ignored) {
System.out.println("Successfully deleted the table");
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public boolean exists(String tableId)
Sample code:
if(client.exists("my-table")) {
System.out.println("Table exists");
}
public com.google.api.core.ApiFuture<Boolean> existsAsync(String tableId)
Sample code:
ApiFuture<Boolean> found = client.existsAsync("my-table");
ApiFutures.addCallback(
found,
new ApiFutureCallback<Boolean>() {
public void onSuccess(Boolean found) {
if (found) {
System.out.println("Table exists");
} else {
System.out.println("Table not found");
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public Table getTable(String tableId)
Sample code:
Table table = client.getTable("my-table");
System.out.println("Got metadata for table: " + table.getId());
System.out.println("Column families:");
for (ColumnFamily cf : table.getColumnFamilies()) {
System.out.println(cf.getId());
}
public com.google.api.core.ApiFuture<Table> getTableAsync(String tableId)
Sample code:
ApiFuture<Table> tableFuture = client.getTableAsync("my-table");
ApiFutures.addCallback(
tableFuture,
new ApiFutureCallback<Table>() {
public void onSuccess(Table table) {
System.out.println("Got metadata for table: " + table.getId());
System.out.println("Column families:");
for (ColumnFamily cf : table.getColumnFamilies()) {
System.out.println(cf.getId());
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public List<String> listTables()
Sample code:
List<String> tableIds = client.listTables();
for(String tableId: tableIds) {
System.out.println(name.getTable());
}
public com.google.api.core.ApiFuture<List<String>> listTablesAsync()
Sample code:
ApiFuture<List<String>> listFuture = client.listTables();
ApiFutures.addCallback(
listFuture,
new ApiFutureCallback<List<String>>() {
public void onSuccess(List<String> tableIds) {
System.out.println("Got list of tables:");
for (String tableId : tableIds) {
System.out.println(tableId);
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public void dropRowRange(String tableId, String rowKeyPrefix)
Please note that this method is considered part of the admin API and is rate limited.
Sample code:
client.dropRowRange("my-table", "prefix");
public com.google.api.core.ApiFuture<Void> dropRowRangeAsync(String tableId, String rowKeyPrefix)
Please note that this method is considered part of the admin API and is rate limited.
Sample code:
ApiFuture<Void> dropFuture = client.dropRowRangeAsync("my-table", "prefix");
ApiFutures.addCallback(
dropFuture,
new ApiFutureCallback<Void>() {
public void onSuccess(Void tableNames) {
System.out.println("Successfully dropped row range.");
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public void dropRowRange(String tableId, ByteString rowKeyPrefix)
Please note that this method is considered part of the admin API and is rate limited.
Sample code:
client.dropRowRange("my-table", ByteString.copyFromUtf8("prefix"));
public com.google.api.core.ApiFuture<Void> dropRowRangeAsync(String tableId, ByteString rowKeyPrefix)
Please note that this method is considered part of the admin API and is rate limited.
Sample code:
ApiFuture<Void> dropFuture = client.dropRowRangeAsync("my-table", ByteString.copyFromUtf8("prefix"));
ApiFutures.addCallback(
dropFuture,
new ApiFutureCallback<Void>() {
public void onSuccess(Void tableNames) {
System.out.println("Successfully dropped row range.");
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public void dropAllRows(String tableId)
Sample code:
client.dropAllRows("my-table");
public com.google.api.core.ApiFuture<Void> dropAllRowsAsync(String tableId)
Sample code:
ApiFuture<Void> dropFuture = client.dropAllRowsAsync("my-table");
ApiFutures.addCallback(
dropFuture,
new ApiFutureCallback<Void>() {
public void onSuccess(Void tableNames) {
System.out.println("Successfully dropped all data");
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public void awaitReplication(String tableId)
Sample code
client.awaitReplication("my-table");
com.google.api.gax.retrying.PollException
- when polling exceeds the total timeoutpublic com.google.api.core.ApiFuture<Void> awaitReplicationAsync(String tableId)
Sample code:
ApiFuture<Void> replicationFuture = client.awaitReplicationAsync("my-table");
ApiFutures.addCallback(
replicationFuture,
new ApiFutureCallback<Void>() {
public void onSuccess(Table table) {
System.out.println("All clusters are now consistent");
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor()
);
public com.google.cloud.Policy getIamPolicy(String tableId)
Sample code:
Policy policy = client.getIamPolicy("my-table");
for(Map.Entry<Role, Set<Identity>> entry : policy.getBindings().entrySet()) {
System.out.printf("Role: %s Identities: %s\n", entry.getKey(), entry.getValue());
}
public com.google.api.core.ApiFuture<com.google.cloud.Policy> getIamPolicyAsync(String tableId)
Sample code:
ApiFuture<Policy> policyFuture = client.getIamPolicyAsync("my-table");
ApiFutures.addCallback(policyFuture,
new ApiFutureCallback<Policy>() {
public void onSuccess(Policy policy) {
for (Entry<Role, Set<Identity>> entry : policy.getBindings().entrySet()) {
System.out.printf("Role: %s Identities: %s\n", entry.getKey(), entry.getValue());
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor());
public com.google.cloud.Policy setIamPolicy(String tableId, com.google.cloud.Policy policy)
Sample code:
Policy newPolicy = client.setIamPolicy("my-table",
Policy.newBuilder()
.addIdentity(Role.of("bigtable.user"), Identity.user("someone@example.com"))
.addIdentity(Role.of("bigtable.admin"), Identity.group("admins@example.com"))
.build());
public com.google.api.core.ApiFuture<com.google.cloud.Policy> setIamPolicyAsync(String tableId, com.google.cloud.Policy policy)
Sample code:
ApiFuture<Policy> newPolicyFuture = client.setIamPolicyAsync("my-table",
Policy.newBuilder()
.addIdentity(Role.of("bigtable.user"), Identity.user("someone@example.com"))
.addIdentity(Role.of("bigtable.admin"), Identity.group("admins@example.com"))
.build());
ApiFutures.addCallback(policyFuture,
new ApiFutureCallback<Policy>() {
public void onSuccess(Policy policy) {
for (Entry<Role, Set<Identity>> entry : policy.getBindings().entrySet()) {
System.out.printf("Role: %s Identities: %s\n", entry.getKey(), entry.getValue());
}
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor());
public List<String> testIamPermission(String tableId, String... permissions)
Sample code:
List<String> grantedPermissions = client.testIamPermission("my-table",
"bigtable.tables.readRows", "bigtable.tables.mutateRows");
System.out.println("Has read access: " +
grantedPermissions.contains("bigtable.tables.readRows")); System.out.println("Has write access:
" + grantedPermissions.contains("bigtable.tables.mutateRows"));public com.google.api.core.ApiFuture<List<String>> testIamPermissionAsync(String tableId, String... permissions)
Sample code:
ApiFuture<List<String>> grantedPermissionsFuture = client.testIamPermissionAsync("my-table",
"bigtable.tables.readRows", "bigtable.tables.mutateRows");
ApiFutures.addCallback(grantedPermissionsFuture,
new ApiFutureCallback<List<String>>() {
public void onSuccess(List<String> grantedPermissions) {
System.out.println("Has read access: " + grantedPermissions.contains("bigtable.tables.readRows"));
System.out.println("Has write access: " + grantedPermissions.contains("bigtable.tables.mutateRows"));
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
},
MoreExecutors.directExecutor());
Copyright © 2019 Google LLC. All rights reserved.