> ## Documentation Index
> Fetch the complete documentation index at: https://langchain-docs-zh.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Google bigtable 集成

> 使用 LangChain Python 集成 Google bigtable 文档加载器

> [Bigtable](https://cloud.google.com/bigtable) 是一种键值对和宽列存储，适用于快速访问结构化、半结构化或非结构化数据。通过 Bigtable 的 LangChain 集成，可扩展数据库应用以构建 AI 驱动的体验。

该笔记本将介绍如何使用 [Bigtable](https://cloud.google.com/bigtable) 通过 `BigtableLoader` 和 `BigtableSaver` 实现 [langchain 文档](https://langchain-docs-zh.mintlify.site/langchain/oss/python/integrations/document_loaders.md) 的保存、加载和删除。

更多关于该包的详细信息，请参考 [GitHub](https://github.com/googleapis/langchain-google-bigtable-python/)。

[![打开Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/googleapis/langchain-google-bigtable-python/blob/main/docs/document_loader.ipynb)

## 准备工作

运行该笔记本前需完成以下步骤：

* [创建Google Cloud项目](https://developers.google.com/workspace/guides/create-project)
* [启用Bigtable API](https://console.cloud.google.com/flows/enableapi?apiid=bigtable.googleapis.com)
* [创建Bigtable实例](https://cloud.google.com/bigtable/docs/creating-instance)
* [创建Bigtable表](https://cloud.google.com/bigtable/docs/managing-tables)
* [创建Bigtable访问凭据](https://developers.google.com/workspace/guides/create-credentials)

在笔记本运行环境确认数据库访问权限后，填写以下值并运行单元格，再执行示例脚本。

```python theme={null}
# @markdown Please specify an instance and a table for demo purpose.
INSTANCE_ID = "my_instance"  # @param {type:"string"}
TABLE_ID = "my_table"  # @param {type:"string"}
```

### 🦜🔗 库安装

集成位于独立 `langchain-google-bigtable` 包中，需先安装。

```python theme={null}
pip install -upgrade --quiet langchain-google-bigtable
```

**仅限Colab**：取消注释下方单元格以重启内核或使用重启按钮。对于 Gemini 企业智能体平台工作台，可通过顶部按钮重启终端。

```python theme={null}
# # Automatically restart kernel after installs so that your environment can access the new packages
# import IPython

# app = IPython.Application.instance()
# app.kernel.do_shutdown(True)
```

### 设置Google Cloud项目

将笔记本关联至 Google Cloud 项目以使用云资源。

若不知项目 ID，请按以下步骤操作：

* 运行 `gcloud config list`
* 运行 `gcloud projects list`
* 查看支持页面：[定位项目 ID](https://support.google.com/googleapi/answer/7014113)。

```python theme={null}
# @markdown Please fill in the value below with your Google Cloud project ID and then run the cell.

PROJECT_ID = "my-project-id"  # @param {type:"string"}

# Set the project id
!gcloud config set project {PROJECT_ID}
```

### 认证

以当前笔记本登录的 IAM 用户身份对 Google Cloud 进行认证以访问项目。

* 若使用 Colab 运行，请使用下方单元格并继续。
* 若使用 Gemini 企业智能体平台工作台，请查阅 [Gemini 企业智能体平台工作台设置指南](https://github.com/GoogleCloudPlatform/generative-ai/tree/main/setup-env)。

```python theme={null}
from google.colab import auth

auth.authenticate_user()
```

## 基础用法

### 使用保存器

通过 `BigtableSaver.add_documents(<documents>)` 保存 langchain 文档。初始化 `BigtableSaver` 类需提供以下两个参数：

1. `instance_id` - Bigtable 实例
2. `table_id` - 存储 langchain 文档的 Bigtable 表名称

```python theme={null}
from langchain_core.documents import Document
from langchain_google_bigtable import BigtableSaver

test_docs = [
    Document(
        page_content="Apple Granny Smith 150 0.99 1",
        metadata={"fruit_id": 1},
    ),
    Document(
        page_content="Banana Cavendish 200 0.59 0",
        metadata={"fruit_id": 2},
    ),
    Document(
        page_content="Orange Navel 80 1.29 1",
        metadata={"fruit_id": 3},
    ),
]

saver = BigtableSaver(
    instance_id=INSTANCE_ID,
    table_id=TABLE_ID,
)

saver.add_documents(test_docs)
```

### 从Bigtable查询文档

关于连接 Bigtable 表的详细信息，请查阅 [Python SDK 文档](https://cloud.google.com/python/docs/reference/bigtable/latest/client)。

#### 从表加载数据

使用 `BigtableLoader.load()` 或 `BigtableLoader.lazy_load()` 加载 langchain 文档。`lazy_load` 返回一个仅会在迭代时查询数据库的生成器。初始化 `BigtableLoader` 类需提供：

1. `instance_id` - Bigtable 的实例。
2. `table_id` - 在 Bigtable 中用于存储 langchain 文档的表名称。

```python theme={null}
from langchain_google_bigtable import BigtableLoader

loader = BigtableLoader(
    instance_id=INSTANCE_ID,
    table_id=TABLE_ID,
)

for doc in loader.lazy_load():
    print(doc)
    break
```

### 删除文档

从 `BigtableSaver.delete(<documents>)` 中删除一系列 langchain 文档。

```python theme={null}
from langchain_google_bigtable import BigtableSaver

docs = loader.load()
print("Documents before delete: ", docs)

onedoc = test_docs[0]
saver.delete([onedoc])
print("Documents after delete: ", loader.load())
```

## 高级用法

### 限制返回的行数

有两种方式限制返回的行数：

1. 使用 [filter](https://cloud.google.com/python/docs/reference/bigtable/latest/row-filters)
2. 使用 [row\_set](https://cloud.google.com/python/docs/reference/bigtable/latest/row-set#google.cloud.bigtable.row_set.RowSet)

```python theme={null}
import google.cloud.bigtable.row_filters as row_filters

filter_loader = BigtableLoader(
    INSTANCE_ID, TABLE_ID, filter=row_filters.ColumnQualifierRegexFilter(b"os_build")
)


from google.cloud.bigtable.row_set import RowSet

row_set = RowSet()
row_set.add_row_range_from_keys(
    start_key="phone#4c410523#20190501", end_key="phone#4c410523#201906201"
)

row_set_loader = BigtableLoader(
    INSTANCE_ID,
    TABLE_ID,
    row_set=row_set,
)
```

### 自定义客户端

默认客户端使用 admin=True 选项创建。若要使用非默认客户端，需通过构造函数传入 [custom client](https://cloud.google.com/python/docs/reference/bigtable/latest/client#class-googlecloudbigtableclientclientprojectnone-credentialsnone-readonlyfalse-adminfalse-clientinfonone-clientoptionsnone-adminclientoptionsnone-channelnone)。

```python theme={null}
from google.cloud import bigtable

custom_client_loader = BigtableLoader(
    INSTANCE_ID,
    TABLE_ID,
    client=bigtable.Client(...),
)
```

### 自定义内容

BigtableLoader 默认假设存在名为 `langchain` 的列族，该列族包含名为 `content` 的列，其中存储 UTF-8 编码的值。这些默认值可通过以下方式修改：

```python theme={null}
from langchain_google_bigtable import Encoding

custom_content_loader = BigtableLoader(
    INSTANCE_ID,
    TABLE_ID,
    content_encoding=Encoding.ASCII,
    content_column_family="my_content_family",
    content_column_name="my_content_column_name",
)
```

### 元数据映射

默认情况下，@\[`Document`] 对象的 `metadata` 映射仅包含单个键 `rowkey`，其值为行键的值。如需添加更多条目，请使用 metadata\_mapping。

```python theme={null}
import json

from langchain_google_bigtable import MetadataMapping

metadata_mapping_loader = BigtableLoader(
    INSTANCE_ID,
    TABLE_ID,
    metadata_mappings=[
        MetadataMapping(
            column_family="my_int_family",
            column_name="my_int_column",
            metadata_key="key_in_metadata_map",
            encoding=Encoding.INT_BIG_ENDIAN,
        ),
        MetadataMapping(
            column_family="my_custom_family",
            column_name="my_custom_column",
            metadata_key="custom_key",
            encoding=Encoding.CUSTOM,
            custom_decoding_func=lambda input: json.loads(input.decode()),
            custom_encoding_func=lambda input: str.encode(json.dumps(input)),
        ),
    ],
)
```

### 元数据为 JSON

若 Bigtable 中存在存储 JSON 字符串的列，可通过以下参数向 BigtableLoader 添加对应字段。注意 `metadata_as_json_encoding` 的默认值为 UTF-8。

```python theme={null}
metadata_as_json_loader = BigtableLoader(
    INSTANCE_ID,
    TABLE_ID,
    metadata_as_json_encoding=Encoding.ASCII,
    metadata_as_json_family="my_metadata_as_json_family",
    metadata_as_json_name="my_metadata_as_json_column_name",
)
```

### 自定义 BigtableSaver

BigtableSaver 同样支持类似 BigtableLoader 的自定义配置。

```python theme={null}
saver = BigtableSaver(
    INSTANCE_ID,
    TABLE_ID,
    client=bigtable.Client(...),
    content_encoding=Encoding.ASCII,
    content_column_family="my_content_family",
    content_column_name="my_content_column_name",
    metadata_mappings=[
        MetadataMapping(
            column_family="my_int_family",
            column_name="my_int_column",
            metadata_key="key_in_metadata_map",
            encoding=Encoding.INT_BIG_ENDIAN,
        ),
        MetadataMapping(
            column_family="my_custom_family",
            column_name="my_custom_column",
            metadata_key="custom_key",
            encoding=Encoding.CUSTOM,
            custom_decoding_func=lambda input: json.loads(input.decode()),
            custom_encoding_func=lambda input: str.encode(json.dumps(input)),
        ),
    ],
    metadata_as_json_encoding=Encoding.ASCII,
    metadata_as_json_family="my_metadata_as_json_family",
    metadata_as_json_name="my_metadata_as_json_column_name",
)
```

***

> 官方原文：[src/oss/python/integrations/document\_loaders/google\_bigtable.mdx](https://github.com/langchain-ai/docs/blob/main/src/oss/python/integrations/document_loaders/google_bigtable.mdx) · 非官方翻译，译文由 AI 生成，以英文原文为准。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.