addRecordsサブ操作では、Endecaデータ・ドメインに新規レコードを追加できます。
ingestChanges操作のaddRecordsサブ操作では、新規レコードの追加のみを行うことができます。つまり、既存のレコードは更新できません。
<ingest:errorDetail>Error applying updates: Attempt to add a second identical assignment to a unique property: partID="1234"</ingest:errorDetail>
この例では、主キーがpartID=1234のレコードを追加しようとしています。しかし、この主キー/値ペアを持つレコードはすでに存在するので、(エラーが示しているように)一意の属性に対して同じ値をもう1つ追加することはできません。
addRecordsリクエストでは、ingestChanges操作でaddRecords要素を使用します。追加するレコードには、必要に応じてキー/値ペア割当てを指定できます。このうち、1つの割当てにのみ、一意の属性を使用する必要があります。
追加されるレコードは、同じリクエストの他の操作には使用できません。
<ns:ingestChanges>
<!--Optional:-->
<ns:OuterTransactionId>?</ns:OuterTransactionId>
<!--Optional:-->
<ns:Language>en</ns:Language>
<!--Zero or more repetitions:-->
<ns:addRecords>
<ns:record>
<!--Zero or more repetitions:-->
<ns1:attribute name="?" type="?">?</ns1:attribute>
</ns:record>
</ns:addRecords>
</ns:ingestChanges>
<ns:ingestChanges>
<ns:addRecords>
<ns:record>
<ns1:attribute name="partID" type="mdex:string">P567</ns1:attribute>
<ns1:attribute name="color" type="mdex:string">blue</ns1:attribute>
<ns1:attribute name="price" type="mdex:double">19.99</ns1:attribute>
</ns:record>
</ns:addRecords>
</ns:ingestChanges>
属性partIDの割当てが追加されます。この属性には、レコードの一意の割当てが指定されています。このリクエストでは、color属性およびprice属性も作成されます。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<ingest:ingestChangesResponse xmlns:ingest="http://www.endeca.com/MDEX/ingest/3/0">
<ingest:numPropertiesCreated>2</ingest:numPropertiesCreated>
<ingest:numRecordsAffected>1</ingest:numRecordsAffected>
<ingest:numRecordsDeleted>0</ingest:numRecordsDeleted>
</ingest:ingestChangesResponse>
</soapenv:Body>
</soapenv:Envelope>
サンプル・レスポンスは、1つのレコードが作成され、2つの属性(color属性およびprice属性)も作成されたことを示しています。partID属性は、すでにデータ・ドメインに存在しているため、作成されませんでした。
障害時には、SOAPフォルトが返されます。ingestFaultおよびerrorDetail要素には、通常、障害の原因となったエラーが含まれます。
<ns1:attribute name="partID">P567</ns1:attribute>
<detail> <ingest:ingestFault xmlns:ingest="http://www.endeca.com/MDEX/ingest/3/0"> <ingest:errorDetail>Error applying updates: Attempt to add a second identical assignment to a unique property: partID="P567"</ingest:errorDetail> </ingest:ingestFault> </detail>
この例で、エラーの原因は、主キーP567のレコードがすでにデータ・ドメインに存在しているためです。
データ・インジェストWebサービスでは、レコードのバッチごとに、すべてを挿入するか、すべてを挿入しないという方針を採用しています。つまり、バッチ内で少なくとも1つのレコードがOracle Endeca ServerのDgraphプロセスによって無効とみなされると、すべてのレコードが拒否されます。たとえば、1000レコードのバッチ内に999の有効なレコードと1つの無効なレコードが含まれる場合、999の有効なレコード(および無効なレコード)はデータ・ドメインにロードされません。
データ収集プロセスがETLクライアントまたはDgraphプロセスのクラッシュなどで中断されると、現行のバッチ(中断の発生時に処理中だったバッチ)は、データ・ドメインにロードされません。ただし、その前のすべての有効なバッチは、データ・ドメインにロードされています。たとえば、5000のバッチをロードする予定で、バッチ3500の処理中に中断が発生した場合、バッチ3500はデータ・ドメインにロードされませんが、その前の3499のバッチはデータ・ドメインに存在しています。
データ・ローディング操作には外部トランザクションの使用をお薦めします。
<ns1:attribute name="?" type="?">?</ns1:attribute>
<ns1:attribute name="ItemID" type="mdex:int">247</ns1:attribute>
標準属性は、レコードに対して存在しない属性が指定されると、必要に応じて作成されます。属性のPDRでは、システムのデフォルト設定を使用します。この属性の自動作成を無効にすることはできません。