Products Sub-API ช่วยให้คุณอัปเดตผลิตภัณฑ์ที่มีอยู่ได้บางส่วน วิธีนี้เหมาะสำหรับข้อมูลที่มีการเปลี่ยนแปลงบ่อยครั้ง เช่น ราคาและความพร้อมจำหน่ายสินค้า เนื่องจาก ไม่จำเป็นต้องส่งผลิตภัณฑ์ทั้งหมดอีกครั้งสำหรับการเปลี่ยนแปลงเล็กๆ น้อยๆ อย่างไรก็ตาม คุณควรแทรกผลิตภัณฑ์อีกครั้งเป็นประจำเพื่อให้แน่ใจว่าข้อมูลผลิตภัณฑ์ทั้งหมดซิงค์กัน
คู่มือนี้ครอบคลุมวิธีใช้productinputs.patch
เพื่ออัปเดตผลิตภัณฑ์
ข้อกำหนดเบื้องต้น
ก่อนที่จะอัปเดตผลิตภัณฑ์ได้ คุณต้องมีสิ่งต่อไปนี้
- ผลิตภัณฑ์ที่มีอยู่เพื่ออัปเดต ดูวิธีสร้างผลิตภัณฑ์ได้ที่คู่มือเพิ่ม และจัดการผลิตภัณฑ์
name
ของแหล่งข้อมูลที่อินพุตผลิตภัณฑ์เป็นของ (เช่นaccounts/12345/dataSources/67890
) ดูวิธีค้นหาสิ่งนี้ได้ในคู่มือจัดการแหล่งข้อมูล API สำหรับการอัปโหลดผลิตภัณฑ์
อัปเดตรายละเอียดผลิตภัณฑ์ที่เฉพาะเจาะจง
หากต้องการเปลี่ยนรายละเอียดบางอย่างของผลิตภัณฑ์ เช่น ราคาหรือความพร้อมจำหน่ายสินค้า โดยไม่ต้องส่งข้อมูลทั้งหมดของผลิตภัณฑ์อีกครั้ง ให้ใช้วิธีproductInputs.patch
คุณระบุฟิลด์ที่จะเปลี่ยนแปลงได้ในพารามิเตอร์ updateMask
updateMask
คือรายการฟิลด์ที่ต้องการอัปเดตซึ่งคั่นด้วยคอมมา เมธอด
patch
จะทำงานดังนี้
- ฟิลด์ใน
updateMask
และเนื้อหา: ฟิลด์เหล่านี้จะอัปเดตด้วยค่าใหม่ - ฟิลด์ใน
updateMask
แต่ไม่อยู่ในเนื้อหา: ระบบจะลบฟิลด์เหล่านี้ออกจาก ข้อมูลผลิตภัณฑ์ - ฟิลด์ที่ไม่ได้อยู่ใน
updateMask
: ระบบจะไม่เปลี่ยนแปลงฟิลด์เหล่านี้ updateMask
ไม่ระบุพารามิเตอร์: ระบบจะอัปเดตฟิลด์ทั้งหมดที่ระบุในเนื้อหาคำขอ ระบบจะไม่ลบฟิลด์ที่ไม่ได้ระบุในเนื้อหาคำขอออกจากข้อมูลผลิตภัณฑ์
ตัวอย่างข้อมูลผลิตภัณฑ์ก่อนการอัปเดตมีดังนี้
{
"name": "accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345",
"product": "accounts/{ACCOUNT_ID}/products/en~US~SKU12345",
"offerId": "SKU12345",
"contentLanguage": "en",
"feedLabel": "US",
"productAttributes": {
"title": "Classic Cotton T-Shirt",
"description": "A comfortable, durable, and stylish t-shirt made from 100% cotton.",
"link": "https://www.example.com/p/SKU12345",
"availability": "IN_STOCK",
"price": {
"amountMicros": "15990000",
"currencyCode": "USD"
},
"condition": "NEW",
"gtins": [
"9780007350896"
],
"imageLink": "https://www.example.com/image/SKU12345"
}
}
ตัวอย่างนี้จะอัปเดต title
และ availability
ของผลิตภัณฑ์ รวมถึงลบ imageLink
ของผลิตภัณฑ์
description
และ price
ไม่ได้อยู่ใน updateMask
และจะ
ไม่มีการเปลี่ยนแปลง
PATCH https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,productAttributes.availability,productAttributes.imageLink&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
{
"productAttributes": {
"title": "Classic Cotton T-Shirt - New Edition",
"availability": "OUT_OF_STOCK",
"description": "A comfortable T-shirt from premium cotton, newer edition.",
"price": {
"amountMicros": "9990000",
"currencyCode": "USD"
}
}
}
การเรียกที่สำเร็จจะแสดงทรัพยากร ProductInput
ที่อัปเดตแล้ว ระบบจะอัปเดต title
และ
availability
รวมถึงนำ imageLink
ออกเนื่องจากอยู่ใน
updateMask
แต่ไม่ได้อยู่ในเนื้อหาของคำขอ description
และ price
จะยังคงไม่เปลี่ยนแปลงเนื่องจากไม่ได้แสดงอยู่ใน updateMask
{
"name": "accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345",
"product": "accounts/{ACCOUNT_ID}/products/en~US~SKU12345",
"offerId": "SKU12345",
"contentLanguage": "en",
"feedLabel": "US",
"productAttributes": {
"title": "Classic Cotton T-Shirt - New Edition",
"description": "A comfortable, durable, and stylish t-shirt made from 100% cotton.",
"link": "https://www.example.com/p/SKU12345",
"availability": "OUT_OF_STOCK",
"price": {
"amountMicros": "15990000",
"currencyCode": "USD"
},
"condition": "NEW",
"gtins": [
"9780007350896"
],
}
}
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีอัปเดตผลิตภัณฑ์
Java
import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.datasources.v1.DataSourceName;
import com.google.shopping.merchant.products.v1.Availability;
import com.google.shopping.merchant.products.v1.Condition;
import com.google.shopping.merchant.products.v1.ProductAttributes;
import com.google.shopping.merchant.products.v1.ProductInput;
import com.google.shopping.merchant.products.v1.ProductInputName;
import com.google.shopping.merchant.products.v1.ProductInputsServiceClient;
import com.google.shopping.merchant.products.v1.ProductInputsServiceSettings;
import com.google.shopping.merchant.products.v1.UpdateProductInputRequest;
import com.google.shopping.type.CustomAttribute;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;
/** This class demonstrates how to update a product input */
public class UpdateProductInputSample {
public static void updateProductInput(Config config, String productId, String dataSourceId)
throws Exception {
// Obtains OAuth token based on the user's configuration.
GoogleCredentials credential = new Authenticator().authenticate();
// Creates service settings using the credentials retrieved above.
ProductInputsServiceSettings productInputsServiceSettings =
ProductInputsServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credential))
.build();
// Creates product name to identify product.
String name =
ProductInputName.newBuilder()
.setAccount(config.getAccountId().toString())
.setProductinput(productId)
.build()
.toString();
// Just productAttributes and customAttributes can be updated
FieldMask fieldMask =
FieldMask.newBuilder()
.addPaths("product_attributes.title")
.addPaths("product_attributes.description")
.addPaths("product_attributes.link")
.addPaths("product_attributes.image_link")
.addPaths("product_attributes.availability")
.addPaths("product_attributes.condition")
.addPaths("product_attributes.gtins")
.addPaths("custom_attributes.mycustomattribute")
.build();
// Calls the API and catches and prints any network failures/errors.
try (ProductInputsServiceClient productInputsServiceClient =
ProductInputsServiceClient.create(productInputsServiceSettings)) {
ProductAttributes attributes =
ProductAttributes.newBuilder()
.setTitle("A Tale of Two Cities")
.setDescription("A classic novel about the French Revolution")
.setLink("https://exampleWebsite.com/tale-of-two-cities.html")
.setImageLink("https://exampleWebsite.com/tale-of-two-cities.jpg")
.setAvailability(Availability.IN_STOCK)
.setCondition(Condition.NEW)
.addGtins("9780007350896")
.build();
// The datasource can be either a primary or supplemental datasource.
String dataSource =
DataSourceName.newBuilder()
.setAccount(config.getAccountId().toString())
.setDatasource(dataSourceId)
.build()
.toString();
UpdateProductInputRequest request =
UpdateProductInputRequest.newBuilder()
.setUpdateMask(fieldMask)
// You can only update product attributes and custom_attributes
.setDataSource(dataSource)
.setProductInput(
ProductInput.newBuilder()
.setName(name)
.setProductAttributes(attributes)
.addCustomAttributes(
CustomAttribute.newBuilder()
.setName("mycustomattribute")
.setValue("Example value")
.build())
.build())
.build();
System.out.println("Sending update ProductInput request");
ProductInput response = productInputsServiceClient.updateProductInput(request);
System.out.println("Updated ProductInput Name below");
// The last part of the product name will be the product ID assigned to a product by Google.
// Product ID has the format `contentLanguage~feedLabel~offerId`
System.out.println(response.getName());
System.out.println("Updated Product below");
System.out.println(response);
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) throws Exception {
Config config = Config.load();
// An ID assigned to a product by Google. In the format
// contentLanguage~feedLabel~offerId
String productId = "en~label~sku123"; // Replace with your product ID.
// Identifies the data source that will own the product input.
String dataSourceId = "{INSERT_DATASOURCE_ID}"; // Replace with your datasource ID.
updateProductInput(config, productId, dataSourceId);
}
}
PHP
use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\Products\V1\Availability;
use Google\Shopping\Merchant\Products\V1\Condition;
use Google\Shopping\Merchant\Products\V1\ProductAttributes;
use Google\Shopping\Merchant\Products\V1\Client\ProductInputsServiceClient;
use Google\Shopping\Merchant\Products\V1\ProductInput;
use Google\Shopping\Merchant\Products\V1\UpdateProductInputRequest;
use Google\Shopping\Type\CustomAttribute;
/**
* This class demonstrates how to update a product input.
*/
class UpdateProductInputSample
{
// An ID assigned to a product by Google. In the format
// contentLanguage~feedLabel~offerId
// Please ensure this product ID exists for the update to succeed.
private const PRODUCT_ID = "online~en~label~sku123";
// Identifies the data source that will own the product input.
// Please ensure this data source ID exists.
private const DATASOURCE_ID = "<INSERT_DATASOURCE_ID>";
/**
* Helper function to construct the full product input resource name.
*
* @param string $accountId The merchant account ID.
* @param string $productInputId The product input ID (e.g., "online~en~label~sku123").
* @return string The full product input resource name.
*/
private static function getProductInputName(string $accountId, string $productInputId): string
{
return sprintf("accounts/%s/productInputs/%s", $accountId, $productInputId);
}
/**
* Helper function to construct the full data source resource name.
*
* @param string $accountId The merchant account ID.
* @param string $dataSourceId The data source ID.
* @return string The full data source resource name.
*/
private static function getDataSourceName(string $accountId, string $dataSourceId): string
{
return sprintf("accounts/%s/dataSources/%s", $accountId, $dataSourceId);
}
/**
* Updates an existing product input in your Merchant Center account.
*
* @param array $config The configuration array containing the account ID.
* @param string $productId The ID of the product input to update.
* @param string $dataSourceId The ID of the data source.
*/
public static function updateProductInput(
array $config,
string $productId,
string $dataSourceId
): void {
// Gets the OAuth credentials to make the request.
$credentials = Authentication::useServiceAccountOrTokenFile();
// Creates options config containing credentials for the client to use.
$options = ['credentials' => $credentials];
// Creates a ProductInputsServiceClient.
$productInputsServiceClient = new ProductInputsServiceClient($options);
// Construct the full resource name of the product input to be updated.
$name = self::getProductInputName($config['accountId'], $productId);
// Define the FieldMask to specify which fields to update.
// Only 'attributes' and 'custom_attributes' can be specified in the
// FieldMask for product input updates.
$fieldMask = new FieldMask([
'paths' => [
"product_attributes.title",
"product_attributes.description",
"product_attributes.link",
"product_attributes.image_link",
"product_attributes.availability",
"product_attributes.condition",
"product_attributes.gtin",
"custom_attributes.mycustomattribute" // Path for a specific custom attribute
]
]);
// Calls the API and handles any network failures or errors.
try {
// Define the new attributes for the product.
$attributes = new ProductAttributes([
'title' => 'A Tale of Two Cities 3',
'description' => 'A classic novel about the French Revolution',
'link' => 'https://exampleWebsite.com/tale-of-two-cities.html',
'image_link' => 'https://exampleWebsite.com/tale-of-two-cities.jpg',
'availability' => Availability::IN_STOCK,
'condition' => Condition::PBNEW,
'gtins' => ['9780007350896'] // GTIN is a repeated field.
]);
// Construct the full data source name.
// This specifies the data source context for the update.
$dataSource = self::getDataSourceName($config['accountId'], $dataSourceId);
// Create the ProductInput object with the desired updates.
// The 'name' field must match the product input being updated.
$productInput = new ProductInput([
'name' => $name,
'product_attributes' => $attributes,
'custom_attributes' => [ // Provide the list of custom attributes.
new CustomAttribute([
'name' => 'mycustomattribute',
'value' => 'Example value'
])
]
]);
// Create the UpdateProductInputRequest.
$request = new UpdateProductInputRequest([
'update_mask' => $fieldMask,
'data_source' => $dataSource,
'product_input' => $productInput
]);
print "Sending update ProductInput request\n";
// Make the API call to update the product input.
$response = $productInputsServiceClient->updateProductInput($request);
print "Updated ProductInput Name below\n";
// The name of the updated product input.
// The last part of the product name is the product ID (e.g., contentLanguage~feedLabel~offerId).
print $response->getName() . "\n";
print "Updated Product below\n";
// Print the full updated product input object.
print_r($response);
} catch (ApiException $e) {
printf("ApiException caught: %s\n", $e->getMessage());
}
}
/**
* Executes the UpdateProductInput sample.
*/
public function callSample(): void
{
$config = Config::generateConfig();
$productId = self::PRODUCT_ID;
$dataSourceId = self::DATASOURCE_ID;
self::updateProductInput($config, $productId, $dataSourceId);
}
}
// Run the script.
$sample = new UpdateProductInputSample();
$sample->callSample();
Python
"""A module to update a product input."""
from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_products_v1 import Availability
from google.shopping.merchant_products_v1 import Condition
from google.shopping.merchant_products_v1 import ProductAttributes
from google.shopping.merchant_products_v1 import ProductInput
from google.shopping.merchant_products_v1 import ProductInputsServiceClient
from google.shopping.merchant_products_v1 import UpdateProductInputRequest
from google.shopping.type import CustomAttribute
# Fetches the Merchant Center account ID from the authentication examples.
# This ID is needed to construct resource names for the API.
_ACCOUNT_ID = configuration.Configuration().read_merchant_info()
def update_product_input(account_id: str, product_id: str, data_source_id: str):
"""Updates an existing product input for a specific account.
Args:
account_id: The Merchant Center account ID.
product_id: The ID of the product input to update. This ID is assigned by
Google and has the format `contentLanguage~feedLabel~offerId`.
data_source_id: The ID of the data source that owns the product input.
"""
# Obtains OAuth credentials for authentication.
credentials = generate_user_credentials.main()
# Creates a ProductInputsServiceClient instance.
client = ProductInputsServiceClient(credentials=credentials)
# Constructs the full resource name for the product input.
# Format: accounts/{account}/productInputs/{productinput}
name = f"accounts/{account_id}/productInputs/{product_id}"
# Defines the FieldMask to specify which fields of the product input
# are being updated. Only 'attributes' and 'custom_attributes' can be updated.
field_mask = field_mask_pb2.FieldMask(
paths=[
"product_attributes.title",
"product_attributes.description",
"product_attributes.link",
"product_attributes.image_link",
"product_attributes.availability",
"product_attributes.condition",
"product_attributes.gtins",
"custom_attributes.mycustomattribute",
]
)
# Prepares the new attribute values for the product.
attributes = ProductAttributes(
title="A Tale of Two Cities updated",
description="A classic novel about the French Revolution",
link="https://exampleWebsite.com/tale-of-two-cities.html",
image_link="https://exampleWebsite.com/tale-of-two-cities.jpg",
availability=Availability.IN_STOCK,
condition=Condition.NEW,
gtins=["9780007350896"], # GTIN is a repeated field.
)
# Constructs the full resource name for the data source.
# The data source can be primary or supplemental.
# Format: accounts/{account}/dataSources/{datasource}
data_source = f"accounts/{account_id}/dataSources/{data_source_id}"
# Prepares the ProductInput object with the updated information.
product_input_data = ProductInput(
name=name,
product_attributes=attributes,
custom_attributes=[
CustomAttribute(
name="mycustomattribute", value="Example value"
)
],
)
# Creates the UpdateProductInputRequest.
request = UpdateProductInputRequest(
update_mask=field_mask,
data_source=data_source,
product_input=product_input_data,
)
# Sends the update request to the API.
try:
print("Sending update ProductInput request")
response = client.update_product_input(request=request)
print("Updated ProductInput Name below")
# The response includes the name of the updated product input.
# The last part of the product name is the product ID assigned by Google.
print(response.name)
print("Updated Product below")
print(response)
except RuntimeError as e:
# Catches and prints any errors that occur during the API call.
print(e)
if __name__ == "__main__":
# The ID of the product to be updated.
# This ID is assigned by Google and typically follows the format:
# contentLanguage~feedLabel~offerId
# Replace with an actual product ID from your Merchant Center account.
product_id_to_update = "online~en~label~sku123"
# The ID of the data source that will own the updated product input.
# Replace with an actual data source ID from your Merchant Center account.
data_source_id_for_update = "<INSERT_DATA_SOURCE_ID>"
update_product_input(
_ACCOUNT_ID, product_id_to_update, data_source_id_for_update
)
cURL
curl --location --request PATCH 'https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,productAttributes.description&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}' \
--header 'Authorization: Bearer <API_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"productAttributes": {
"title": "A Tale of Two Cities",
"description": "A classic novel about the French Revolution"
}
}'
อัปเดตโดยใช้แอตทริบิวต์ที่กำหนดเอง
คุณอัปเดตได้ทั้งแอตทริบิวต์มาตรฐานและแอตทริบิวต์ที่กำหนดเองในการเรียกครั้งเดียว หากต้องการอัปเดตแอตทริบิวต์ที่กำหนดเอง ให้ใส่คำนำหน้าชื่อด้วย customAttributes
ใน updateMask
ตัวอย่างนี้จะดำเนินการหลายอย่างในคำขอเดียว
- อัปเดตแอตทริบิวต์
title
มาตรฐานโดยตรง - อัปเดตแอตทริบิวต์ที่กำหนดเองที่มีอยู่ (
myCustomAttrToBeUpdated
) - แทรกแอตทริบิวต์ที่กำหนดเองใหม่ (
myCustomAttrToBeInserted
) - ลบแอตทริบิวต์ที่กำหนดเองที่มีอยู่ (
myCustomAttrToBeDeleted
)
PATCH https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/productInputs/en~US~SKU12345?updateMask=productAttributes.title,customAttributes.myCustomAttrToBeInserted,customAttributes.myCustomAttrToBeUpdated,customAttributes.myCustomAttrToBeDeleted&dataSource=accounts/{ACCOUNT_ID}/dataSources/{DATASOURCE_ID}
{
"productAttributes": {
"title": "ProductTitle Updated"
},
"customAttributes": [
{
"name": "description",
"value": "A newly updated description."
},
{
"name": "myCustomAttrToBeUpdated",
"value": "myCustomAttrToBeUpdated updated value"
},
{
"name": "myCustomAttrToBeInserted",
"value": "new from update"
}
]
}
คำขอที่สำเร็จจะแสดง ProductInput
ที่อัปเดตแล้วซึ่งแสดงการเปลี่ยนแปลงทั้งหมดที่ระบุ
ทำความเข้าใจการอัปเดตแอตทริบิวต์ที่กำหนดเอง
คุณใช้ช่อง customAttributes
เพื่ออัปเดตแอตทริบิวต์ที่คุณ
กำหนดเองได้ โดยแอตทริบิวต์เหล่านี้ไม่ได้เชื่อมโยงกับข้อกำหนดมาตรฐานและจะ
จัดเก็บเป็นแอตทริบิวต์ที่กำหนดเองในผลิตภัณฑ์ขั้นสุดท้าย
วิธีประมวลผลการอัปเดตผลิตภัณฑ์
เมื่อคุณส่งpatch
คำขอ การอัปเดตจะมีผลกับข้อมูลProductInput
ที่เฉพาะเจาะจงก่อนที่จะมีการใช้กฎ ซึ่งจะส่งผลให้เกิด
ลักษณะการทำงานที่สอดคล้องกันระหว่างการแทรกและการอัปเดตผลิตภัณฑ์
ระบบจะประมวลผลการอัปเดตของคุณดังนี้
อัปเดตอินพุต: คำขอ
patch
จะแก้ไขProductInput
ที่เชื่อมโยงกับแหล่งข้อมูลที่คุณระบุการประมวลผลและการผสาน: หลังจากอัปเดตอินพุตแล้ว การประมวลผลจะเริ่มขึ้น โดยมีขั้นตอนดังนี้
- กฎฟีดและแหล่งข้อมูลเสริม: กฎที่กำหนดค่าในแหล่งที่มาหลักของผลิตภัณฑ์จะรวม
ProductInput
จากแหล่งที่มาหลักและแหล่งที่มาเสริม กฎเหล่านี้สามารถเปลี่ยนแอตทริบิวต์หรือสร้างแอตทริบิวต์ใหม่ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่ากฎได้ที่บทความ https://support.google.com/merchants/answer/14994083 - แหล่งข้อมูลอื่นๆ: ระบบจะผสานข้อมูลจากแหล่งอื่นๆ (เช่น การปรับปรุงอัตโนมัติ) เข้ากับอินพุตแหล่งข้อมูลหลักด้วย
- การตรวจสอบ: ระบบจะตรวจสอบข้อมูลที่ผสานกับข้อกำหนดในการจัดทำข้อมูลผลิตภัณฑ์และนโยบายการช็อปปิ้งของ Google
- กฎฟีดและแหล่งข้อมูลเสริม: กฎที่กำหนดค่าในแหล่งที่มาหลักของผลิตภัณฑ์จะรวม
ผลิตภัณฑ์สุดท้าย: ผลลัพธ์ของไปป์ไลน์นี้คือทรัพยากร
Product
ที่ประมวลผลแล้วขั้นสุดท้าย ซึ่งสามารถแสดงผลได้โดยใช้products.get
หรือproducts.list
นอกจากนี้ยังเป็นผลิตภัณฑ์เวอร์ชันที่แสดงใน Merchant Center และมีสิทธิ์ปรากฏในปลายทางต่างๆ
เนื่องจากกระบวนการแบบหลายขั้นตอนนี้ จึงมีความล่าช้าเกิดขึ้น โดยปกติจะใช้เวลา 2-3 นาที
ระหว่างช่วงเวลาที่คุณส่งคำขออัปเดตและช่วงเวลาที่การเปลี่ยนแปลงแสดงใน
แหล่งข้อมูล Product
สุดท้ายที่คุณเรียกข้อมูลได้ด้วย products.get
ตัวอย่าง: การอัปเดตผลิตภัณฑ์ด้วยอินพุตหลักรายการเดียว
นี่คือ Use Case ที่พบบ่อยที่สุด ผลิตภัณฑ์อยู่ในแหล่งข้อมูลหลักแหล่งเดียว และคุณต้องการอัปเดตแอตทริบิวต์บางอย่างของผลิตภัณฑ์
- สถานะเริ่มต้น: ผลิตภัณฑ์
en~US~SKU12345
มีอยู่ในแหล่งข้อมูลหลัก พร้อมด้วยtitle: "Classic T-Shirt"
และprice: 15.99 USD
- คำขออัปเดต: คุณส่งคำขอ
patch
เพื่ออัปเดตprice
เป็น14.99 USD
และตั้งค่าavailability
เป็นout of stock
- การประมวลผล:
- มีการอัปเดต
ProductInput
สำหรับSKU12345
แล้ว
- มีการอัปเดต
- ผลิตภัณฑ์ขั้นสุดท้าย:
Product
ขั้นสุดท้ายมีtitle: "Classic T-Shirt"
,price: 14.99 USD
และavailability: "out of stock"
ตัวอย่าง: การอัปเดตผลิตภัณฑ์ด้วยข้อมูลเสริมและกฎ
ตัวอย่างนี้แสดงให้เห็นว่ากฎฟีดอาจส่งผลต่อการอัปเดตได้อย่างไร ซึ่งทำให้การเปลี่ยนแปลงบางอย่าง มีผลในขณะที่การเปลี่ยนแปลงอื่นๆ ถูกลบล้าง
- สถานะเริ่มต้น:
- ข้อมูลหลัก:
en~US~SKU12345
มีtitle: "Great T-Shirt"
และdescription: "A great short-sleeve t-shirt."
- ข้อมูลเสริม: ผลิตภัณฑ์เดียวกันมีรายการในแหล่งข้อมูลเสริม
ที่มี
title: "Awesome T-Shirt"
และdescription: "An awesome short-sleeve t-shirt."
- กฎฟีด: มีการตั้งกฎเพื่อนำ
title
จากแหล่งข้อมูลเสริม ไม่มีกฎสำหรับdescription
- ผลลัพธ์:
Product
ที่ประมวลผลขั้นสุดท้ายมีtitle: "Awesome T-Shirt"
และdescription: "A great short-sleeve t-shirt."
- ข้อมูลหลัก:
- คำขออัปเดต: คุณส่ง
patch
คำขออัปเดตแหล่งข้อมูลหลัก โดยตั้งค่าtitle
เป็น"Fantastic T-Shirt"
และdescription
เป็น"A fantastic short-sleeve t-shirt."
- การประมวลผล:
ProductInput
ในแหล่งข้อมูลหลักจะได้รับการอัปเดตให้มีtitle: "Fantastic T-Shirt"
และdescription: "A fantastic short-sleeve t-shirt."
- ไปป์ไลน์การประมวลผลทำงาน
- สำหรับ
title
กฎฟีดกำหนดว่าค่าจาก แหล่งข้อมูลเสริม (Awesome T-Shirt
) จะมีความสำคัญมากกว่า การอัปเดตของคุณ - สำหรับ
description
เนื่องจากไม่มีกฎที่ลบล้าง ระบบจึงใช้ค่าที่อัปเดตแล้ว จากอินพุตหลัก (A fantastic short-sleeve t-shirt.
)
- ผลิตภัณฑ์สุดท้าย: ชื่อของ
Product
สุดท้ายยังคงเป็นAwesome T-Shirt
(ระบบลบล้างการอัปเดตของคุณ) แต่คำอธิบายตอนนี้คือA fantastic short-sleeve t-shirt.
(ระบบใช้การอัปเดตของคุณ)
เลือกระหว่างแหล่งข้อมูลที่อัปเดตและแหล่งข้อมูลเสริม
คุณแก้ไขข้อมูลผลิตภัณฑ์ได้โดยใช้ productinputs.patch
หรือโดยการแทรกข้อมูลลงในแหล่งข้อมูลเสริม ตัวเลือกที่ดีที่สุดขึ้นอยู่กับกลยุทธ์การจัดการข้อมูล
เราขอแนะนำว่าอย่าใช้ทั้งproductinputs.patch
และแหล่งข้อมูลเสริมเพื่อจัดการข้อมูลผลิตภัณฑ์เดียวกันสำหรับผลิตภัณฑ์เดียวกัน เพื่อหลีกเลี่ยงผลลัพธ์ที่คาดเดาไม่ได้
การเปรียบเทียบโดยละเอียดมีดังนี้
ฟีเจอร์ | productinputs.patch (การอัปเดต) |
แหล่งข้อมูลเสริม |
---|---|---|
เหมาะสำหรับ | การเปลี่ยนแปลงข้อมูลที่มีอยู่บางส่วนอย่างรวดเร็วและบ่อยครั้ง (เช่น ราคา ความพร้อมจำหน่ายสินค้า) | การวางเลเยอร์ข้อมูลที่แยกกันอย่างมีตรรกะ การจัดการแอตทริบิวต์ต่างๆ โดยระบบที่แตกต่างกัน หรือการลบล้างที่ซับซ้อนตามกฎ |
กลไก | แก้ไข ProductInput ที่มีอยู่ |
สร้าง ProductInput ใหม่แยกต่างหากในแหล่งข้อมูลเสริม |
ระดับรายละเอียดของข้อมูล | ทำงานในฟิลด์ที่เฉพาะเจาะจงของ ProductInput รายการเดียว |
ทำงานกับทั้ง ProductInput ภายในแหล่งข้อมูลเสริม |
ความคงทน | การเปลี่ยนแปลงจะยังคงอยู่จนกว่า ProductInput เดียวกันจะถูกเขียนทับด้วย insert แบบเต็มหรือ patch อื่น |
กฎฟีดจะเป็นตัวควบคุมความคงทน ลบล้างข้อมูลหลักได้อย่างไม่มีกำหนดหากกฎให้ความสำคัญกับข้อมูลดังกล่าว |
การโต้ตอบของกฎ | ใช้ได้โดยไม่ต้องมีกฎฟีด เนื่องจากจะอัปเดตแหล่งข้อมูลและ ProductInput ที่มีอยู่ |
ต้องตั้งค่ากฎในแหล่งข้อมูลหลักอย่างชัดเจนเพื่อลิงก์แหล่งข้อมูลเสริม |
การตั้งค่าแหล่งข้อมูล | ทำงานในแหล่งข้อมูลที่มีอยู่ ไม่ต้องใช้แหล่งข้อมูลใหม่ | ต้องสร้างและจัดการแหล่งข้อมูลเสริมแยกต่างหาก แล้วลิงก์แหล่งข้อมูลเหล่านั้นโดยใช้กฎฟีด |