刷新结构化数据和非结构化数据

本页面介绍了如何刷新结构化数据和非结构化数据。

如需刷新网站应用,请参阅刷新网页

刷新结构化数据

您可以刷新结构化数据存储区中的数据,只要您使用的架构与数据存储区中的架构相同或向后兼容。例如,仅向现有架构添加新字段就是向后兼容的。

您可以在 Google Cloud 控制台中或使用 API 刷新结构化数据。

控制台

如需使用 Google Cloud 控制台刷新数据存储区分支中的结构化数据,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

    AI Applications

  2. 在导航菜单中,点击数据存储区

  3. 名称列中,点击要修改的数据存储区。

  4. 文档标签页上,点击 导入数据

  5. 如需刷新 Cloud Storage 中数据,请执行以下操作:

    1. 选择数据源窗格中,选择 Cloud Storage
    2. 从 Cloud Storage 导入数据窗格中,点击浏览,选择包含刷新后数据的存储桶,然后点击选择。或者,直接在 gs:// 字段中输入相应存储桶的位置。
    3. 数据导入选项下,选择一个导入选项。
    4. 点击导入
  6. 如需刷新 BigQuery 中的数据,请执行以下操作:

    1. 选择数据源窗格中,选择 BigQuery
    2. 从 BigQuery 导入数据窗格中,点击浏览,选择包含刷新后数据的表,然后点击选择。或者,您也可以直接在 BigQuery 路径字段中输入表位置。
    3. 数据导入选项下,选择一个导入选项。
    4. 点击导入

REST

使用 documents.import 方法刷新数据,并指定适当的 reconciliationMode 值。

如需通过命令行刷新 BigQuery 或 Cloud Storage 中的结构化数据,请按以下步骤操作:

  1. 查找您的数据存储区 ID。如果您已有数据存储区 ID,请跳至下一步。

    1. 在 Google Cloud 控制台中,前往 AI Applications 页面,然后在导航菜单中点击数据存储区

      前往“数据存储区”页面

    2. 点击您的数据存储区的名称。

    3. 在数据存储区的数据页面上,获取数据存储区 ID。

  2. 如需导入 BigQuery 中的结构化数据,请调用以下方法。您可以导入 BigQuery 或 Cloud Storage 中的数据。如需导入 Cloud Storage 中的数据,请跳到下一步。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
    -d '{
      "bigquerySource": {
        "projectId": "PROJECT_ID",
        "datasetId":"DATASET_ID",
        "tableId": "TABLE_ID",
        "dataSchema": "DATA_SCHEMA_BQ",
      },
      "reconciliationMode": "RECONCILIATION_MODE",
      "autoGenerateIds": AUTO_GENERATE_IDS,
      "idField": "ID_FIELD",
      "errorConfig": {
        "gcsPrefix": "ERROR_DIRECTORY"
      }
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • DATA_STORE_ID:Vertex AI Search 数据存储区的 ID。
    • DATASET_ID:BigQuery 数据集的名称。
    • TABLE_ID:BigQuery 表的名称。
    • DATA_SCHEMA_BQ:一个可选字段,用于指定在解析来自 BigQuery 来源的数据时要使用的架构。可以具有以下值:
      • document:默认值。您使用的 BigQuery 表必须符合以下默认 BigQuery 架构。您可以自行定义每个文档的 ID,同时将整个数据封装在 json_data 字符串中。
      • custom:任何 BigQuery 表架构都可接受,并且 Vertex AI Search 会自动为导入的每个文档生成 ID。
    • ERROR_DIRECTORY:一个可选字段,用于指定用来存储导入相关错误信息的 Cloud Storage 目录,例如 gs://<your-gcs-bucket>/directory/import_errors。Google 建议将此字段留空,以让 Vertex AI Search 自动创建一个临时目录。
    • RECONCILIATION_MODE:一个可选字段,用于指定导入的文档如何与目标数据存储区中的现有文档进行协调。可以具有以下值:
      • INCREMENTAL:默认值。导致将 BigQuery 中的数据增量刷新到数据存储区。这会执行一个 upsert(插入/更新)操作,即添加新文档并用具有相同 ID 的更新文档替换现有文档。
      • FULL:导致数据存储区中的文档完全重基。 因此,新文档和更新后的文档会添加到您的数据存储区,而 BigQuery 中不存在的文档将从您的数据存储区中移除。如果您想要自动删除不再需要的文档,FULL 模式会很有帮助。
    • AUTO_GENERATE_IDS:一个可选字段,用于指定是否自动生成文档 ID。如果设置为 true,则系统会根据载荷的哈希值生成文档 ID。请注意,生成的文档 ID 在多次导入时可能不会保持一致。如果您在多次导入时自动生成 ID,Google 强烈建议您将 reconciliationMode 设置为 FULL,以保持一致的文档 ID。

      仅当 bigquerySource.dataSchema 设置为 custom 时,才应指定 autoGenerateIds。否则,系统将返回 INVALID_ARGUMENT 错误。如果您未指定 autoGenerateIds 或将其设置为 false,则必须指定 idField。否则,文档将无法导入。

    • ID_FIELD:一个可选字段,用于指定哪些字段是文档 ID。对于 BigQuery 来源文件,idField 指示 BigQuery 表中包含文档 ID 的列的名称。

      仅当同时满足以下两个条件时,才应指定 idField;否则系统会返回 INVALID_ARGUMENT 错误:

      • bigquerySource.dataSchema 设置为 custom
      • auto_generate_ids 设置为 false 或未指定。

      此外,BigQuery 列名称的值必须为字符串类型,长度必须介于 1 到 63 个字符之间,并且必须符合 RFC-1034 标准。否则,文档将无法导入。

    这是默认 BigQuery 架构。当您将 dataSchema 设置为 document 时,您的 BigQuery 表必须符合此架构。

    [
     {
       "name": "id",
       "mode": "REQUIRED",
       "type": "STRING",
       "fields": []
     },
     {
       "name": "jsonData",
       "mode": "NULLABLE",
       "type": "STRING",
       "fields": []
     }
    ]
    
  3. 如需导入 Cloud Storage 中的结构化数据,请调用以下方法。您可以导入 BigQuery 或 Cloud Storage 中的数据。如需导入 BigQuery 中的数据,请前往上一步。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
    -d '{
      "gcsSource": {
        "inputUris": ["GCS_PATHS"],
        "dataSchema": "DATA_SCHEMA_GCS",
      },
      "reconciliationMode": "RECONCILIATION_MODE",
      "idField": "ID_FIELD",
      "errorConfig": {
        "gcsPrefix": "ERROR_DIRECTORY"
      }
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • DATA_STORE_ID:Vertex AI Search 数据存储区的 ID。
    • GCS_PATHS:要从中导入数据的 Cloud Storage 位置的英文逗号分隔 URI 列表。每个 URI 的长度上限为 2,000 个字符。URI 可以匹配存储对象的完整路径,也可以匹配一个或多个对象的模式。例如,gs://bucket/directory/*.json 是一个有效路径。
    • DATA_SCHEMA_GCS:一个可选字段,用于指定在解析来自 BigQuery 来源的数据时要使用的架构。可以具有以下值:
      • document:默认值。您使用的 BigQuery 表必须符合以下默认 BigQuery 架构。您可以自行定义每个文档的 ID,同时将整个数据封装在 json_data 字符串中。
      • custom:任何 BigQuery 表架构都可接受,并且 Vertex AI Search 会自动为导入的每个文档生成 ID。
    • ERROR_DIRECTORY:一个可选字段,用于指定用来存储导入相关错误信息的 Cloud Storage 目录,例如 gs://<your-gcs-bucket>/directory/import_errors。Google 建议将此字段留空,以让 Vertex AI Search 自动创建一个临时目录。
    • RECONCILIATION_MODE:一个可选字段,用于指定导入的文档如何与目标数据存储区中的现有文档进行协调。可以具有以下值:
      • INCREMENTAL:默认值。导致将 BigQuery 中的数据增量刷新到数据存储区。这会执行一个 upsert(插入/更新)操作,即添加新文档并用具有相同 ID 的更新文档替换现有文档。
      • FULL:导致数据存储区中的文档完全重基。 因此,新文档和更新后的文档会添加到您的数据存储区,而 BigQuery 中不存在的文档将从您的数据存储区中移除。如果您想要自动删除不再需要的文档,FULL 模式会很有帮助。

Python

如需了解详情,请参阅 Vertex AI Search Python API 参考文档

如需向 Vertex AI Search 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# bigquery_dataset = "YOUR_BIGQUERY_DATASET"
# bigquery_table = "YOUR_BIGQUERY_TABLE"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    bigquery_source=discoveryengine.BigQuerySource(
        project_id=project_id,
        dataset_id=bigquery_dataset,
        table_id=bigquery_table,
        data_schema="custom",
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

刷新非结构化数据

您可以在 Google Cloud 控制台中或使用 API 刷新非结构化数据。

控制台

如需使用 Google Cloud 控制台刷新数据存储区分支中的非结构化数据,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 AI Applications 页面。

    AI Applications

  2. 在导航菜单中,点击数据存储区

  3. 名称列中,点击要修改的数据存储区。

  4. 文档标签页上,点击 导入数据

  5. 从 Cloud Storage 存储桶中提取数据(无论是否包含元数据):

    1. 选择数据源窗格中,选择 Cloud Storage
    2. 从 Cloud Storage 导入数据窗格中,点击浏览,选择包含刷新后数据的存储桶,然后点击选择。或者,您也可以直接在 gs:// 字段中输入相应存储桶的位置。
    3. 数据导入选项下,选择一个导入选项。
    4. 点击导入
  6. 如需从 BigQuery 中提取数据,请执行以下操作:

    1. 选择数据源窗格中,选择 BigQuery
    2. 从 BigQuery 导入数据窗格中,点击浏览,选择包含刷新后数据的表,然后点击选择。或者,您也可以直接在 BigQuery 路径字段中输入表位置。
    3. 数据导入选项下,选择一个导入选项。
    4. 点击导入

REST

如需使用 API 刷新非结构化数据,请使用 documents.import 方法重新导入该数据,并指定适当的 reconciliationMode 值。如需详细了解如何导入非结构化数据,请参阅非结构化数据

Python

如需了解详情,请参阅 Vertex AI Search Python API 参考文档

如需向 Vertex AI Search 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"

# Examples:
# - Unstructured documents
#   - `gs://bucket/directory/file.pdf`
#   - `gs://bucket/directory/*.pdf`
# - Unstructured documents with JSONL Metadata
#   - `gs://bucket/directory/file.json`
# - Unstructured documents with CSV Metadata
#   - `gs://bucket/directory/file.csv`
# gcs_uri = "YOUR_GCS_PATH"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    gcs_source=discoveryengine.GcsSource(
        # Multiple URIs are supported
        input_uris=[gcs_uri],
        # Options:
        # - `content` - Unstructured documents (PDF, HTML, DOC, TXT, PPTX)
        # - `custom` - Unstructured documents with custom JSONL metadata
        # - `document` - Structured documents in the discoveryengine.Document format.
        # - `csv` - Unstructured documents with CSV metadata
        data_schema="content",
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)