지원되는 경우 중첩 가비지 컬렉션 정책에 따라 column family를 만듭니다.
더 살펴보기
이 코드 샘플이 포함된 자세한 문서는 다음을 참조하세요.
코드 샘플
C++
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
namespace cbt = ::google::cloud::bigtable;
namespace cbta = ::google::cloud::bigtable_admin;
using ::google::bigtable::admin::v2::ModifyColumnFamiliesRequest;
using ::google::cloud::StatusOr;
[](cbta::BigtableTableAdminClient admin, std::string const& project_id,
std::string const& instance_id, std::string const& table_id,
std::string const& family_name) {
std::string table_name = cbt::TableName(project_id, instance_id, table_id);
auto constexpr kSecondsPerDay =
std::chrono::seconds(std::chrono::hours(24)).count();
ModifyColumnFamiliesRequest::Modification mod;
mod.set_id(family_name);
auto& gc = *mod.mutable_create()->mutable_gc_rule();
auto& gc_1 = *gc.mutable_union_()->add_rules();
auto& gc_2 = *gc.mutable_union_()->add_rules();
auto& gc_2_1 = *gc_2.mutable_intersection()->add_rules();
auto& gc_2_2 = *gc_2.mutable_intersection()->add_rules();
gc_1.set_max_num_versions(10);
gc_2_1.set_max_num_versions(1);
gc_2_2.mutable_max_age()->set_seconds(5 * kSecondsPerDay);
StatusOr<google::bigtable::admin::v2::Table> schema =
admin.ModifyColumnFamilies(table_name, {std::move(mod)});
if (!schema) throw std::move(schema).status();
std::cout << "Schema modified to: " << schema->DebugString() << "\n";
}
C#
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
// Create a nested GC rule:
// Drop cells that are either older than the 10 recent versions
// OR
// Drop cells that are older than 5 days AND older than the 2 recent versions.
// Initialize request argument(s).
GcRule.Types.Intersection intersectionRule = new GcRule.Types.Intersection
{
Rules =
{
new GcRule { MaxNumVersions = 2 },
new GcRule { MaxAge = Duration.FromTimeSpan(TimeSpan.FromDays(5)) }
}
};
GcRule.Types.Union nestedRule = new GcRule.Types.Union
{
Rules =
{
new GcRule { MaxNumVersions = 10 },
new GcRule { Intersection = intersectionRule }
}
};
GcRule gcRule = new GcRule { Union = nestedRule };
// Column family to create
ColumnFamily columnFamily = new ColumnFamily { GcRule = gcRule };
TableName tableName = new TableName(projectId, instanceId, tableId);
// Modification to create column family
ModifyColumnFamiliesRequest.Types.Modification modification = new ModifyColumnFamiliesRequest.Types.Modification
{
Create = columnFamily,
Id = "cf5"
};
ModifyColumnFamiliesRequest request = new ModifyColumnFamiliesRequest
{
TableName = tableName,
Modifications = { modification }
};
try
{
// Make the request
Table response = bigtableTableAdminClient.ModifyColumnFamilies(request);
Console.WriteLine("Created column family");
}
catch (Exception ex)
{
Console.WriteLine($"Error creating column family {ex.Message}");
}
Go
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
import (
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/bigtable"
)
func createFamilyGCNested(w io.Writer, projectID, instanceID string, tableName string) error {
// projectID := "my-project-id"
// instanceID := "my-instance-id"
// tableName := "my-table-name"
ctx := context.Background()
adminClient, err := bigtable.NewAdminClient(ctx, projectID, instanceID)
if err != nil {
return fmt.Errorf("bigtable.NewAdminClient: %v", err)
}
defer adminClient.Close()
columnFamilyName := "cf5"
if err := adminClient.CreateColumnFamily(ctx, tableName, columnFamilyName); err != nil {
return fmt.Errorf("CreateColumnFamily(%s): %v", columnFamilyName, err)
}
// Create a nested GC rule:
// Drop cells that are either older than the 10 recent versions
// OR
// Drop cells that are older than a month AND older than the 2 recent versions
maxAge := time.Hour * 24 * 5
maxAgePolicy := bigtable.MaxAgePolicy(maxAge)
policy := bigtable.UnionPolicy(
bigtable.MaxVersionsPolicy(10),
bigtable.IntersectionPolicy(
bigtable.MaxVersionsPolicy(2),
maxAgePolicy))
if err := adminClient.SetGCPolicy(ctx, tableName, columnFamilyName, policy); err != nil {
return fmt.Errorf("SetGCPolicy(%s): %v", policy, err)
}
fmt.Fprintf(w, "created column family %s with policy: %v\n", columnFamilyName, policy)
return nil
}
Java
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
// Creates a nested GC rule:
// Drop cells that are either older than the 10 recent versions
// OR
// Drop cells that are older than a month AND older than the 2 recent versions
VersionRule versionRule1 = GCRULES.maxVersions(10);
VersionRule versionRule2 = GCRULES.maxVersions(2);
DurationRule maxAgeRule = GCRULES.maxAge(30, TimeUnit.DAYS);
IntersectionRule intersectionRule = GCRULES.intersection().rule(maxAgeRule).rule(versionRule2);
UnionRule unionRule = GCRULES.union().rule(intersectionRule).rule(versionRule1);
// Creates column family with given GC rule.
try {
// ModifyColumnFamiliesRequest can be used both for adding and modifying families, here it is
// being used to add a family
ModifyColumnFamiliesRequest columnFamiliesRequest =
ModifyColumnFamiliesRequest.of(tableId).addFamily(COLUMN_FAMILY_5, unionRule);
adminClient.modifyFamilies(columnFamiliesRequest);
System.out.println("Created column family: " + COLUMN_FAMILY_5);
} catch (AlreadyExistsException e) {
System.err.println(
"Failed to create column family with rule, already exists: " + e.getMessage());
}
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
// Create a nested GC rule:
// Drop cells that are either older than the 10 recent versions
// OR
// Drop cells that are older than a month AND older than the 2 recent versions
const nestedRule = {
union: true,
versions: 10,
rule: {
versions: 2,
age: {
// one month
seconds: 60 * 60 * 24 * 30,
nanos: 0,
},
},
};
[family] = await table.createFamily('cf5', nestedRule);
console.log(`Created column family ${family.id}`);
PHP
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
use Google\Cloud\Bigtable\Admin\V2\GcRule\Intersection as GcRuleIntersection;
use Google\Cloud\Bigtable\Admin\V2\ModifyColumnFamiliesRequest\Modification;
use Google\Cloud\Bigtable\Admin\V2\GcRule\Union as GcRuleUnion;
use Google\Cloud\Bigtable\Admin\V2\BigtableTableAdminClient;
use Google\Cloud\Bigtable\Admin\V2\ColumnFamily;
use Google\Cloud\Bigtable\Admin\V2\GcRule;
use Google\Protobuf\Duration;
/**
* Create a new column family with a nested GC rule
*
* @param string $projectId The Google Cloud project ID
* @param string $instanceId The ID of the Bigtable instance where the table resides
* @param string $tableId The ID of the table in which the rule needs to be created
*/
function create_family_gc_nested(
string $projectId,
string $instanceId,
string $tableId
): void {
$tableAdminClient = new BigtableTableAdminClient();
$tableName = $tableAdminClient->tableName($projectId, $instanceId, $tableId);
print('Creating column family cf5 with a Nested GC rule...' . PHP_EOL);
// Create a column family with nested GC policies.
// Create a nested GC rule:
// Drop cells that are either older than the 10 recent versions
// OR
// Drop cells that are older than a month AND older than the
// 2 recent versions
$columnFamily5 = new ColumnFamily();
$rule1 = (new GcRule())->setMaxNumVersions(10);
$rule2Intersection = new GcRuleIntersection();
$rule2Duration1 = new Duration();
$rule2Duration1->setSeconds(3600 * 24 * 30);
$rule2Array = [
(new GcRule())->setMaxAge($rule2Duration1),
(new GcRule())->setMaxNumVersions(2)
];
$rule2Intersection->setRules($rule2Array);
$rule2 = new GcRule();
$rule2->setIntersection($rule2Intersection);
$nestedRule = new GcRuleUnion();
$nestedRule->setRules([
$rule1,
$rule2
]);
$nestedRule = (new GcRule())->setUnion($nestedRule);
$columnFamily5->setGCRule($nestedRule);
$columnModification = new Modification();
$columnModification->setId('cf5');
$columnModification->setCreate($columnFamily5);
$tableAdminClient->modifyColumnFamilies($tableName, [$columnModification]);
print('Created column family cf5 with a Nested GC rule.' . PHP_EOL);
}
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
print("Creating column family cf5 with a Nested GC rule...")
# Create a column family with nested GC policies.
# Create a nested GC rule:
# Drop cells that are either older than the 10 recent versions
# OR
# Drop cells that are older than a month AND older than the
# 2 recent versions
rule1 = column_family.MaxVersionsGCRule(10)
rule2 = column_family.GCRuleIntersection(
[
column_family.MaxAgeGCRule(datetime.timedelta(days=30)),
column_family.MaxVersionsGCRule(2),
]
)
nested_rule = column_family.GCRuleUnion([rule1, rule2])
column_family5 = table.column_family("cf5", nested_rule)
column_family5.create()
print("Created column family cf5 with a Nested GC rule.")
Ruby
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
# Create a nested GC rule:
# Drop cells that are either older than the 10 recent versions
# OR
# Drop cells that are older than a month AND older than the 2 recent versions
max_versions_rule1 = Google::Cloud::Bigtable::GcRule.max_versions 10
max_age_rule = Google::Cloud::Bigtable::GcRule.max_age 60 * 60 * 24 * 5
max_versions_rule2 = Google::Cloud::Bigtable::GcRule.max_versions 2
intersection_gc_rule = Google::Cloud::Bigtable::GcRule.intersection max_age_rule, max_versions_rule2
nested_gc_rule = Google::Cloud::Bigtable::GcRule.union max_versions_rule1, intersection_gc_rule
다음 단계
다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저를 참조하세요.