使用 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 进行数据存储和管理。

相关推荐
uzong22 分钟前
技术故障复盘模版
后端
GetcharZp1 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程1 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研1 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi2 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国3 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy3 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
草梅友仁3 小时前
草梅 Auth 1.4.0 发布与 ESLint v9 更新 | 2025 年第 33 周草梅周报
vue.js·github·nuxt.js
AntBlack3 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9654 小时前
pip install 已经不再安全
后端