使用 Python 与 Google Cloud Bigtable 进行交互

本文将指导您如何使用 Python 与 Google Cloud Bigtable 进行交互,包括设置身份验证、连接到 Bigtable 实例、创建表、写入数据、读取数据以及删除表。

步骤 1:设置身份验证

在开始使用 Bigtable 之前,您需要设置身份验证。以下是步骤:

  1. 安装 Google Cloud CLI:

    bash 复制代码
    # 安装 Google Cloud CLI
    curl https://sdk.cloud.google.com | bash
  2. 初始化 Google Cloud CLI:

    bash 复制代码
    # 初始化 Google Cloud CLI
    gcloud init
  3. 设置应用默认凭据:

    bash 复制代码
    # 设置应用默认凭据
    gcloud auth application-default login

步骤 2:安装和导入客户端库

  1. 安装必要的 Python 包:

    bash 复制代码
    # 安装必要的 Python 包
    pip install google-cloud-bigtable google-cloud-core
  2. 导入模块:

    python 复制代码
    from 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 进行数据存储和管理。

相关推荐
AlfredZhao5 小时前
新项目首次提交 GitHub 报错“未配置远端 origin”怎么办
github
Dwzun5 小时前
基于SpringBoot3+Vue3的油莎豆种植管理系统
java·前端·vue.js·spring boot·后端·python·计算机网络
miofly5 小时前
GitHub 日榜趋势速报 | 2026-10-31
开源·github
小码哥_常11 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设14 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
Yuzhiyuxia16 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
努力的小雨16 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
u13013017 小时前
GitHub 热榜项目:日榜(2026-10-29)
人工智能·github
excel17 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记18 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端