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

相关推荐
东方靖岚3 小时前
R语言的数据库交互
开发语言·后端·golang
振鹏Dong5 小时前
超大规模数据场景(思路)——面试高频算法题目
算法·面试
uhakadotcom5 小时前
Python 与 ClickHouse Connect 集成:基础知识和实践
算法·面试·github
uhakadotcom5 小时前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
小萌新上大分5 小时前
SpringCloudGateWay
java·开发语言·后端·springcloud·springgateway·cloudalibaba·gateway网关
uhakadotcom5 小时前
使用Python获取Google Trends数据:2025年详细指南
后端·面试·github
uhakadotcom5 小时前
使用 Python 与 BigQuery 进行交互:基础知识与实践
算法·面试
uhakadotcom5 小时前
使用 Hadoop MapReduce 和 Bigtable 进行单词统计
算法·面试·github
直视太阳6 小时前
springboot+easyexcel实现下载excels模板下拉选择
java·spring boot·后端