HubSpotドライバー : レコードの挿入と更新を1つの文で実行するUPSERT文の使い方

はじめに

by 浦邊信太郎 | July 18, 2025 | Last Updated: July 18, 2025

HubSpot は、マーケティング、営業、カスタマーサービスを統合したクラウドベースのCRM(顧客関係管理)プラットフォームです。企業が顧客との関係を効率的に管理し、マーケティングオートメーション、営業プロセスの最適化、カスタマーサポートの向上を実現するためのツールを提供しています。HubSpot のデータベースには、連絡先(Contacts)、会社(Companies)、取引(Deals)などの重要な顧客情報が格納されており、CData HubSpot ドライバーを利用することでこれらのデータを標準SQL で効率的に操作することができます。

Upsertとは

Upsert(アップサート)は「Update」と「Insert」を組み合わせた造語で、データが既に存在する場合は更新(Update)を行い、存在しない場合は新規挿入(Insert)を行う操作です。この機能により、データの重複を避けながら効率的にデータベースを管理できます。HubSpot ドライバにおけるUpsert 操作は、CRM データの一括更新や新規顧客情報の追加において特に有効です。

Upsert構文

HubSpot ドライバーでのUpsert 文の基本構文は以下の通りです:

UPSERT INTO Contacts (<更新するカラム>, <更新キーカラム>, [ExternalIdColumn]) VALUES(更新する値, 更新キー, 更新キーカラム名);

この構文では、指定された更新キーを基準にレコードの存在を判定し、新規追加または更新操作を実行します。

Upsert 構文の注意点

以下にUpsert を実行する際の注意点を述べます。

一意制約の確認が必須

Upsert 操作を正しく実行するために、更新キーカラムには一意制約が付与されている必要があります。一意制約が設定されていないカラムを更新キーとして使用するとエラーが発生します。カラムの一意制約はsys_tablecolumns システムテーブルのHasUniqueValues カラムで確認できます。

たとえば以下のクエリを使用して、Contacts テーブルで一意制約が付与されているカラムを確認できます:

SELECT * FROM sys_tablecolumns WHERE tablename = 'Contacts' AND HasUniqueValues = true;

ExternalIdColumnの指定

「ExternalIdColumn」カラムには、更新キーとして使用するカラム名を文字列として指定する必要があります。この設定により、ドライバーがどのカラムをキーとしてレコードの一意性を判定するかを決定します。

Upsertの実行例

以下の例では、メールアドレスが「[email protected]」の連絡先が既に存在する場合は会社名を「株式会社TEST」に更新し、存在しない場合は新しい連絡先レコードとして追加します:

UPSERT INTO Contacts ([Company name], [Email], [ExternalIdColumn])VALUES('株式会社TEST', '[email protected]', 'Email');

バッチUpsert

HubSpot ドライバでは、複数のレコードを一度に処理するバッチUpsert 機能も提供されています。この機能を使用することで、大量のデータを効率的に更新・挿入できます。

バッチUpsert 構文

バッチUpsert では、TEMPテーブルを使用してデータを一時的に格納し、その後一括でUpsert 操作を実行します:

-- 一時テーブルにデータを準備

INSERT INTO テーブル名#TEMP (カラム1, カラム2, [ExternalIdColumn]) VALUES (値1, 値2, 'キーカラム名');

-- バッチUpsert実行

UPSERT INTO テーブル名 (カラム1, カラム2, [ExternalIdColumn]) SELECT カラム1, カラム2, [ExternalIdColumn] FROM テーブル名#TEMP;

バッチUpsert の実行例

以下の例では、複数の会社情報を一括で更新します:

-- 1件目のデータを一時テーブルに挿入

INSERT INTO Companies#TEMP ([Company name], [Email], [ExternalIdColumn]) VALUES ('株式会社TEST', '[email protected]', 'Email');

-- 2件目のデータを一時テーブルに挿入

INSERT INTO Companies#TEMP ([Company name], [Email], [ExternalIdColumn]) VALUES ('株式会社SAMPLE', '[email protected]', 'Email');

-- 一括Upsert実行

UPSERT INTO Companies ([Company name], [Email], [ExternalIdColumn]) SELECT [Company name], [Email], [ExternalIdColumn] FROM Companies#TEMP;

この方法により、複数のレコードを効率的に処理し、パフォーマンスの向上とデータの整合性を同時に実現できます。

まとめ

HubSpot ドライバーのUpsert は、CRM データの効率的な管理において非常に有用な構文です。特にバッチ処理を活用することで、データの品質を保ちながら大規模なデータ操作を実行できます。HubSpot ドライバーは30日間無料で試用できます。HubSpot との連携をご検討の方はぜひお試しください