こんにちは。プロダクトチームの周です。
Shopify REST API の仕様によって「OrderTransactions」テーブルへのクエリは「OrderId」毎にAPI を呼び出す必要なため、クエリに時間がかかる可能性が高いです。本記事では対象「OrderId」を絞り込むサブクエリ、または「UpdatedAt」という疑似カラムを利用して「OrderTransactions」のデータ取得を高速化する方法を紹介いたします。
「OrderTransactions」テーブルへのクエリ処理について
Shopify REST API の仕様では「OrderTransactions」のデータ取得に「OrderId」を指定する必要があります。そのため「OrderTransactions」テーブルへのクエリに「OrderId」以外のフィルターが指定された場合は、基本的に「Orders」テーブルから全ての「OrderId」を取得し、「OrderId」毎にAPI を呼び出してトランザクションデータを全て取得した上、クライアントサイドのインメモリでフィルター処理を行います。「Orders」レコードが多い場合はこのクエリ処理に時間がかかる可能性が高いです。
サブクエリを利用して「OrderTransactions」のデータ取得を高速化
「OrderTransactions」へのクエリを高速化するには、対象「OrderId」を絞り込む必要があります。対象「OrderId」を絞り込むサブクエリを利用していただければ、「OrderTransactions」のデータ取得を高速化できます。
例えば:
SELECT * FROM OrderTransactions WHERE OrderId IN (SELECT Id FROM Orders WHERE CustomerID = 2237902913559);
SELECT * FROM OrderTransactions WHERE OrderId IN (SELECT Id FROM Orders WHERE ProcessedAt >= '2025-02-01');
疑似カラムを利用して「OrderTransactions」のデータ取得を高速化
Shopify REST データモデルの「OrderTransactions」テーブルでは「UpdatedAt」という疑似カラムが実装されております。「UpdatedAt」の条件指定を利用していただければ、対象「OrderId」を「Orders」レコードの更新日時で絞り込むことができるので、「OrderTransactions」のデータ取得を高速化できます。
例えば:
SELECT * FROM OrderTransactions WHERE UpdatedAt >= '2025-02-01';
SELECT OrderTransactions.* FROM OrderTransactions INNER JOIN Orders ON Orders.Id = OrderTransactions.OrderId WHERE OrderTransactions.UpdatedAt > DATEADD(d, -10, CURRENT_DATE);
おわりに
本記事ではShopify REST データモデルの「OrderTransactions」テーブルへのクエリをサブクエリまたは疑似カラムを利用して高速化する方法を紹介しました。引き続きCData 製品をShopify へのデータ連携でご活用ください。
CData Shopify Drivers は30日間の無償トライアルが可能です。ぜひお試しくださいませ。
https://jp.cdata.com/drivers/shopify/