本文将指导您如何使用 Python 与 Google Cloud Bigtable 进行交互,包括设置身份验证、连接到 Bigtable 实例、创建表、写入数据、读取数据以及删除表。
步骤 1:设置身份验证
在开始使用 Bigtable 之前,您需要设置身份验证。以下是步骤:
-
安装 Google Cloud CLI:
bash# 安装 Google Cloud CLI curl https://sdk.cloud.google.com | bash
-
初始化 Google Cloud CLI:
bash# 初始化 Google Cloud CLI gcloud init
-
设置应用默认凭据:
bash# 设置应用默认凭据 gcloud auth application-default login
步骤 2:安装和导入客户端库
-
安装必要的 Python 包:
bash# 安装必要的 Python 包 pip install google-cloud-bigtable google-cloud-core
-
导入模块:
pythonfrom google.cloud import bigtable from google.cloud.bigtable.data import row_filters
步骤 3:连接到 Bigtable
使用 bigtable.Client
连接到 Bigtable 实例:
python
# 连接到 Bigtable 实例
client = bigtable.data.BigtableDataClientAsync(project="your_project_id")
table = client.get_table("your_instance_id", "your_table_id")
步骤 4:创建表
创建一个新表并设置列族:
python
# 创建表
admin_client = bigtable.Client(project="your_project_id", admin=True)
admin_instance = admin_client.instance("your_instance_id")
admin_table = admin_instance.table("your_table_id")
# 创建列族
max_versions_rule = bigtable.column_family.MaxVersionsGCRule(2)
column_family_id = "cf1"
column_families = {column_family_id: max_versions_rule}
if not admin_table.exists():
admin_table.create(column_families=column_families)
else:
print("Table already exists.")
步骤 5:写入数据
将数据写入表中:
python
# 写入数据
greetings = ["Hello World!", "Hello Cloud Bigtable!", "Hello Python!"]
mutations = []
column = "greeting"
for i, value in enumerate(greetings):
row_key = "greeting{}".format(i).encode()
row_mutation = bigtable.data.RowMutationEntry(
row_key, bigtable.data.SetCell(column_family_id, column, value)
)
mutations.append(row_mutation)
await table.bulk_mutate_rows(mutations)
步骤 6:读取数据
使用过滤器读取数据:
python
# 创建过滤器
row_filter = row_filters.CellsColumnLimitFilter(1)
# 读取单行数据
key = "greeting0".encode()
row = await table.read_row(key, row_filter=row_filter)
cell = row.cells[0]
print(cell.value.decode("utf-8"))
# 扫描所有行
query = bigtable.data.ReadRowsQuery(row_filter=row_filter)
async for row in await table.read_rows_stream(query):
cell = row.cells[0]
print(cell.value.decode("utf-8"))
步骤 7:删除表
删除表:
python
# 删除表
admin_table.delete()
完整示例
以下是完整的 Python 脚本示例:
python
import asyncio
from google.cloud import bigtable
from google.cloud.bigtable.data import row_filters
async def main(project_id, instance_id, table_id):
client = bigtable.data.BigtableDataClientAsync(project=project_id)
table = client.get_table(instance_id, table_id)
admin_client = bigtable.Client(project=project_id, admin=True)
admin_instance = admin_client.instance(instance_id)
admin_table = admin_instance.table(table_id)
# 创建表
max_versions_rule = bigtable.column_family.MaxVersionsGCRule(2)
column_family_id = "cf1"
column_families = {column_family_id: max_versions_rule}
if not admin_table.exists():
admin_table.create(column_families=column_families)
else:
print("Table already exists.")
try:
# 写入数据
greetings = ["Hello World!", "Hello Cloud Bigtable!", "Hello Python!"]
mutations = []
column = "greeting"
for i, value in enumerate(greetings):
row_key = "greeting{}".format(i).encode()
row_mutation = bigtable.data.RowMutationEntry(
row_key, bigtable.data.SetCell(column_family_id, column, value)
)
mutations.append(row_mutation)
await table.bulk_mutate_rows(mutations)
# 创建过滤器
row_filter = row_filters.CellsColumnLimitFilter(1)
# 读取单行数据
key = "greeting0".encode()
row = await table.read_row(key, row_filter=row_filter)
cell = row.cells[0]
print(cell.value.decode("utf-8"))
# 扫描所有行
query = bigtable.data.ReadRowsQuery(row_filter=row_filter)
async for row in await table.read_rows_stream(query):
cell = row.cells[0]
print(cell.value.decode("utf-8"))
finally:
# 删除表
admin_table.delete()
if __name__ == "__main__":
project_id = "your_project_id"
instance_id = "your_instance_id"
table_id = "your_table_id"
asyncio.run(main(project_id, instance_id, table_id))
总结
本文提供了使用 Python 与 Google Cloud Bigtable 进行交互的基本步骤,包括设置身份验证、连接到 Bigtable、创建表、写入数据、读取数据以及删除表。通过这些步骤,您可以轻松地使用 Bigtable 进行数据存储和管理。