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

相关推荐
libokaifa几秒前
C++ 基础学习
前端·架构·github
知其然亦知其所以然几秒前
一条 SQL 的一生,从出生到谢幕,揭秘 MySQL8.x 内幕
后端·mysql·面试
咖啡Beans2 分钟前
异步处理是企业开发的‘生存之道’!Java8和Spring的异步实现,你必须搞清楚!
java·后端
写代码的stone6 分钟前
如何基于react useEffect实现一个类似vue的watch功能
前端·javascript·面试
用户47949283569158 分钟前
面试官:你知道deepseek的ai生成代码预览是用什么做的吗?
前端·javascript·面试
wallflower202012 分钟前
从零到全流程 CI/CD:多技术栈项目自动化部署实战与优化指南
ci/cd·github
易元19 分钟前
模式组合应用-装饰器模式
后端·设计模式
BeyondCode程序员21 分钟前
苹果内购 V1 与 V2 支付流程对比(附示例java代码)
java·后端
华仔啊22 分钟前
Redis 不只是缓存!Java 打工人必知的 10 个真实工作场景,第 5 个太香了
java·后端
程序边界25 分钟前
Oracle到金仓数据库信创改造迁移实施规划方案(上篇)
后端