跳到主要内容

合并数据
内测版

您可以将现有Zilliz Cloud Collection 中的数据与本地文件或外部对象存储中的数据合并,来创建一个结合了两个数据源数据的 Collection。这被称为数据合并操作,您可以将其作为一种变通方法,向现有集合中添加带有数据的字段。

📘说明
  • 本特性目前属于内测特性。如果您对该特性感兴趣,想尝试使用。请联系 Zilliz Cloud 技术支持

概述

您可以使用 Zilliz Cloud Stage 作为一个中间存放点来存放您上传的本地文件,并将文件中的数据与现有的某个 Collection 进行合并,从而创建一个包括了上述两种数据来源的新的 Collection。

V5TEwTH7PhVaBbb698ncivXsnQg

您可以将准备好的 Parquet 文件上传到一个外部对象存储桶中,并在执行数据合并操作时提供可供 Zilliz Cloud 访问该桶的鉴权凭据。这样一来,Zilliz Cloud 就会读取桶中存放的 Parquet 文件,并执行数据合并操作。

使用对象存储

如需执行数据合并操作,您需要先创建一个对象存储桶并将数据文件上传到该桶中。当准备就绪,您就可以通过执行数据合并操作来创建一个包括两种数据来源的新的 Collection。

如下代码片断演示了如何使用一个对象存储桶来执行数据合并操作。您可以参考您的对象存储服务提供商的文档来学习如何创建对象存储桶及向桶中上传数据。

export BASE_URL="https://api.cloud.zilliz.com"
export TOKEN="YOUR_API_KEY"

curl --request POST \
--url "${BASE_URL}/v2/etl/merge" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"clusterId": "in00-xxxxxxxxxxxxxxx",
"dbName": "my_database",
"collectionName": "my_collection",
"destDbName": "my_database",
"destCollectionName": "my_merged_collection",
"dataSource": {
"type": "s3",
"dataPath": "s3://my_bucket/path/to/your/parquet.parquet"
},
"mergeField": "id",
"newFields": [
{
"name": "date",
"dataType": "VARCHAR",
"params": {
"maxLength": 10
}
}
]
}'

上述命令创建了一个数据合并任务,并返回任务 ID。

{
"code": 0,
"data": {
"jobId": "job-xxxxxxxxxxxxxxxxxxxxx"
}
}

验证结果

当您获取了数据合并任务的 ID 后,您可以使用查看任务详情 API 接口或按照管理项目任务中的步骤查看任务的状态。

故障排除

  1. 当 Parquet 文件中的存在 Merge Key 与源 Collection 不匹配的记录时,如何处理?

    与传统关系型数据库系统的左合并(Left Join)操作类似,数据合并操作会根据指定的 Merge Key 从源 Collection 及指定的 Parquet 文件中获取相应的数据,并使用这些数据创建一个包含合并数据的 Collection。

    只有 Parquet 文件中 Merge Key 与源 Collection 中的 Merge Key 匹配的行才会被合并。如果行的 Merge Key 与源 Collection 中的任何 Entity 都不匹配,则会跳过这些行。如果 Parquet 文件中的所有行都不匹配源 Collection 中的任何 Entity,那么 Zilliz Cloud 会创建 newFields 中指定的字段,并使用默认值填充。