통합 가비지 컬렉션 정책(저장기간 및 버전)에 따라 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_union = *mod.mutable_create()->mutable_gc_rule()->mutable_union_();
gc_union.add_rules()->set_max_num_versions(1);
gc_union.add_rules()->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 column family with GC policy to drop data that matches at least one condition.
// Initialize request argument(s).
// Define a GC rule to drop cells older than 5 days or not the most recent version.
GcRule.Types.Union unionRule = new GcRule.Types.Union
{
Rules =
{
new GcRule { MaxNumVersions = 1 },
new GcRule { MaxAge = Duration.FromTimeSpan(TimeSpan.FromDays(5)) }
}
};
GcRule gcRule = new GcRule { Union = unionRule };
// 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 = "cf3"
};
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 createFamilyGCUnion(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 := "cf3"
if err := adminClient.CreateColumnFamily(ctx, tableName, columnFamilyName); err != nil {
return fmt.Errorf("CreateColumnFamily(%s): %v", columnFamilyName, err)
}
// Define a GC rule to drop cells older than 5 days or not the most recent version
maxAge := time.Hour * 24 * 5
maxAgePolicy := bigtable.MaxAgePolicy(maxAge)
policy := bigtable.UnionPolicy(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 column family with GC policy to drop data that matches at least one condition.
// Defines a list of GC rules to drop cells older than 5 days OR not the most recent
// version.
UnionRule unionRule =
GCRULES.union().rule(GCRULES.maxAge(5, TimeUnit.DAYS)).rule(GCRULES.maxVersions(1));
// 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_3, unionRule);
adminClient.modifyFamilies(columnFamiliesRequest);
System.out.println("Created column family: " + COLUMN_FAMILY_3);
} catch (AlreadyExistsException e) {
System.err.println(
"Failed to create column family with rule, already exists: " + e.getMessage());
}
Node.js
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
// Create a column family with GC policy to drop data that matches at least one condition.
// Define a GC rule to drop cells older than 5 days or not the most recent version
const unionRule = {
rule: {
versions: 1,
age: {
seconds: 60 * 60 * 24 * 5,
nanos: 0,
},
union: true,
},
};
[family] = await table.createFamily('cf3', unionRule);
console.log(`Created column family ${family.id}`);
PHP
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
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 union 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_union(
string $projectId,
string $instanceId,
string $tableId
): void {
$tableAdminClient = new BigtableTableAdminClient();
$tableName = $tableAdminClient->tableName($projectId, $instanceId, $tableId);
print('Creating column family cf3 with union GC rule...' . PHP_EOL);
// Create a column family with GC policy to drop data that matches
// at least one condition.
// Define a GC rule to drop cells older than 5 days or not the
// most recent version
$columnFamily3 = new ColumnFamily();
$ruleUnion = new GcRuleUnion();
$ruleUnionArray = [
(new GcRule())->setMaxNumVersions(2),
(new GcRule())->setMaxAge((new Duration())->setSeconds(3600 * 24 * 5))
];
$ruleUnion->setRules($ruleUnionArray);
$union = new GcRule();
$union->setUnion($ruleUnion);
$columnFamily3->setGCRule($union);
$columnModification = new Modification();
$columnModification->setId('cf3');
$columnModification->setCreate($columnFamily3);
$tableAdminClient->modifyColumnFamilies($tableName, [$columnModification]);
print('Created column family cf3 with Union GC rule.' . PHP_EOL);
}
Python
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
print("Creating column family cf3 with union GC rule...")
# Create a column family with GC policy to drop data that matches
# at least one condition.
# Define a GC rule to drop cells older than 5 days or not the
# most recent version
union_rule = column_family.GCRuleUnion(
[
column_family.MaxAgeGCRule(datetime.timedelta(days=5)),
column_family.MaxVersionsGCRule(2),
]
)
column_family3 = table.column_family("cf3", union_rule)
column_family3.create()
print("Created column family cf3 with Union GC rule")
Ruby
Bigtable용 클라이언트 라이브러리를 설치하고 사용하는 방법은 Bigtable 클라이언트 라이브러리를 참조하세요.
# Create a column family with GC policy to drop data that matches at least
# one condition
max_age_rule = Google::Cloud::Bigtable::GcRule.max_age 60 * 60 * 24 * 5
max_versions_rule = Google::Cloud::Bigtable::GcRule.max_versions 2
union_gc_rule = Google::Cloud::Bigtable::GcRule.union max_age_rule, max_versions_rule
column_families = table.column_families do |cfs|
cfs.add "cf3", gc_rule: union_gc_rule
end
family = column_families["cf3"]
다음 단계
다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저를 참조하세요.