【第173回】 Marketing Cloud SQL 超入門(1)- SELECT、FROM、WHERE
私の note では、これまでに SQL を使った記事を数多く書いてきましたが、Marketing Cloud SQL の入門版のような記事は書いてきませんでした。この note を読んでいる人の中には、SQL に苦手意識を持っている方もいると思いますので、いくつかの連載形式で Marketing Cloud SQL の基本的な使い方を書いてみようと思います。
■ Marketing Cloud SQL の基本
まず、SQL について調べると、いくつかの SQL の種類に遭遇すると思うのですが、代表的な種類に Oracle、SQL Server、PostgreSQL、MySQL などがある中で、Marketing Cloud SQL は「SQL Server」の機能に基づいています。
続いて、いくつかの Marketing Cloud SQL の特徴を述べます。
■ サポートされているのは、SELECT のみです。INSERT、UPDATE、DELETE は使えません。この SELECT とは、レコードの取得になります。つまり、基本的には、データの中身を何も変えずに、条件に合ったレコードを取得して終わりという機能になりますが、SQL クエリアクティビティの機能として、その SELECT で取得された結果を使って、別のデータエクステンション内のレコードの追加・更新・上書きを行うことができます。
■ アクセス可能なデータは「データエクステンション」と「データビュー」に限られます。データエクステンションに関しては説明不要かと思いますが、データビューとは、SFMC が標準機能として、システムで一定のデータを自動保管する機能になります。どのようなデータビューがあるかに関しては、公式のヘルプページを見て頂く形になりますが、「dataviews.io」という便利なサイトがありますので、そちらを見た方が早いかもしれません。サイト内の「Display details」というボタンを押せば、各項目の説明まで分かるようになっています。こちらのサイトは、Salesforce MVP / Marketing Cloud スペシャリストのズザンナ・ヤルチンスカさんが作成してくれたものです。
■ SQL では「値」や「項目名」の大文字と小文字は区別しません。非常にラフに記述しても動きます。
■ 文の最後にセミコロン( ; )は不要です。SQL の参考書などによっては、最後にセミコロン( ; )を付けるように書かれているものがありますが、Marketing Cloud SQL では付けてしまうとエラーが発生します。
■ システム日付を取得する際、そのタイムゾーンは CST(米国中部標準時)で動作しますので、日本時間に対して 15 時間マイナスで表示されます。これは、あくまでシステム日付に限られますので、データエクステンションに格納されているカスタム日付を取得する際は、特に注意は不要です。ここでいうシステム日付とは、例えば、データビューから取得できる「Eventdate」(送信日、開封日、クリック日)だったり、「今日」という日時データを取得する関数「Getdate()」 を使用する場合などです。では、このシステム時間が 15 時間マイナスで表示されっぱなしで良いというわけではないので、15 時間をプラスする処理が必要になるわけですが、それは、また次の記事で取り上げます。
■「予約語」と呼ばれるクエリ内で使用できない単語がいくつかあります。例えば「FROM」は代表的なものです。この「FROM」はデータエクステンション名や項目名に混ざりがちですので、そのような「予約語」が混ざる場合は、データエクステンション名や項目名を [ ](角かっこ)で囲むことで使用できるようになります。
// 項目名に「予約語」の「from」が混ざる場合
SELECT Id, [Days_from_CreateDate]
FROM MasterSubscribers
// データエクステンション名の始まりが「数字」の場合
SELECT Id, Email
FROM [2024_Master_Subscribers]
// データエクステンション名に「半角スペース」が含まれる場合
SELECT Id, Email
FROM [Master Subscribers]
// データエクステンション名が「日本語」(かな漢字)で命名されている場合
SELECT Id, Email
FROM [マスタ配信リスト]
■ SQL クエリアクティビティは実行開始から 30 分で自動的にエラー(オートキル)となります。よって、より健全な SQL で書くということが大事になりますが、これに関して、私が以前に「多くの処理時間がかかっている SQL クエリアクティビティを発見する方法」についての記事を書いていますので、そちらも参考にしてください。
■ SQL が使用されるツール
① SQL クエリアクティビティ(Automation Studio)
SQL が使用される代表的なツールが Automation Studio の SQL クエリアクティビティです。Automation Studio で SQL クエリアクティビティの設定を開始すると、SQL クエリを入力する画面が登場します。
入力後のページでは、格納先のデータエクステンションを選択し、データアクションの中から「追加」「更新」「上書き」のいずれかを選択します。
ここでのポイントは、名前同士でマッピングが行われるということです。クエリの SELECT で記述した項目名と、格納先データエクステンションの項目名の「完全一致」(大文字・小文字は区別しない)でマッピングが行われます。そして、このマッピングは事前検証が行われないので注意が必要です。つまり、格納先データエクステンションに一致する名前が存在しない場合、単純にスルーされて終わるだけとなります。
② Query Studio(AppExchange)
次に AppExchange の Query Studio です。もしかしたら一度も触ったことが無いという方もいるかもしれませんが、このツールは非エンジニアの管理者の方であっても、是非使用してみて下さい。
アプリスイッチャーの AppExchange から Query Studio に移動できます。場合によっては、権限が付与されておらず、表示されない場合がありますので、主管理者の方にアクセス権を請求してください。
Query Studio が開いたら、SQL クエリを入力して「Run」ボタンをクリックします。
使用上のポイントは、5 回に 1 回くらいの割合で気まぐれのエラーが発生しますので、何度も「Run」ボタンを押すようにしてください。但し、単純な構文エラーの可能性もありますので、エラー説明文を確認してください。
また、Query Studio で取得した結果を日本語(かな漢字)のまま表示をしたい場合は、項目名の後ろに、以下を追加する必要があります。
この Query Studio は AppExchange で提供されるツールのため、機能の不具合や質問があっても、テクニカルサポートの対象外で、問い合わせができません。また、Marketing Cloud と同じサーバーで動いているものではなく、AWS 上で動く外部ツールのため、Marketing Cloud で IP ホワイトリストを利用している場合は利用できなくなります。この辺りも注意してください。
③ SFMC Query Saver(Google Chrome 拡張機能)
以前に、別の記事で紹介した SFMC Query Saver です。これは Query Studio で実行したクエリを自動で保存してくれるツールになります。このツールに対して、直接クエリを書いていく類のものではありませんが、一応、ここでも紹介しておきます。
■ Marketing Cloud で SQL を使用する目的
さて、SQL の勉強を開始するに当たって、「SQL を使用する目的」をしっかりと認識しておくことが大事になるかと思います。闇雲に参考書の端から勉強しても、なかなか理解が進みません。
Markeitng Cloud で SQL を使用する目的は、主に以下のようなものです。
私が Markeitng Cloud SQL に取り組んできた経験から、これらの事例をベースに学習をスタートした方が良いと思います。
「Marketing Cloud SQL の基本」のところでも述べた通り、結局、アクセス可能なデータは「データエクステンション」と「データビュー」に限られるため、Marketing Cloud SQL でやれることは限定的ですし、具体的な事例からスタートした方が、参考書の事例よりも理解し易いと思います。
それでは、まず、第 1 回目のテーマとして「① データエクステンション内のデータを調査したい」について学びましょう。
■ SELECT、FROM、WHERE を使う
① SELECT 「どの項目を取得するか?」
まずは SELECT です。SELECT では、そのデータエクステンションやデータビューに存在する項目から「どの項目を取得するか?」を決めます。
取得する項目を決めたら、それらを「カンマ区切り」で記載します。
以下のように書いた場合は、データエクステンションから「Id」「Email」「Name」を取得することができるようになります。
SELECT Id, Email, Name
ここでのポイントは、格納先データエクステンションの項目名と、SELECT で記載した項目名が、まったく同じである必要があります。格納先データエクステンションとの項目のマッピングは、項目名の完全一致で行われます。(大文字・小文字は区別されません。)
ここで、格納先データエクステンションの項目名が異なっている場合は「AS」を使用して、別名(エイリアス)に変換してください。
SELECT
Id AS CustomerId,
Email AS EmailAddress,
Name AS FullName
また、以下のように SELECT で アスタリスク「*」を使用すると、ソースデータエクステンション内のすべての項目を取得できます。
SELECT *
② FROM「どのデータエクステンションから取得するか?」
続いて、FROM は「どのデータエクステンションから取得するか?」を決定します。ここでは、データエクステンションだけではなく、データビューからもデータを取得可能です。
記述方法は、FROM の後ろにデータエクステンション名を入力します。
FROM MasterSubscribers
これで、「MasterSubscribers」というデータエクステンションから「Id」「Email」「Name」という項目を取得するクエリが完成しました。
SELECT Id, Email, Name
FROM MasterSubscribers
クエリを書く時の「改行」はどのような扱いになるのか?と気になっている方もいるかもしれませんが、「改行」は入れても入れなくても、結果に影響はありません。
以下のように、SELECT と FROM の間に 2 行分の行間が開いてしまっていても問題ないです。
SELECT Id
, Email
, Name
FROM MasterSubscribers
また、前述の通り、Query Studio で実行する場合に「かな漢字」を表示したい場合は、COLLATE Japanese_CS_AS_KS_WS as [項目名] を付ける必要がありますので、日本語の値が含まれる「Name」の後ろに付けておきます。
SELECT Id
, Email
, Name COLLATE Japanese_CS_AS_KS_WS as [Name]
FROM MasterSubscribers
それでは、実際にこちらのクエリを Query Studio で実行してみます。
これで、データエクステンション「MasterSubscribers」に格納されている、3 レコード分のすべての「Id」「Email」「Name」を取得することができました。「MasterSubscribers」のデータエクステンションには以下が格納されていました。
③ WHERE「どのような条件で取得するか?」
それでは、最後に WHERE です。仮に WHERE を指定しない場合は、すべてのレコードを取得します。一方で例えば、Prefecture(県)が「神奈川県」のレコードだけを取得したい場合は、以下のように WHERE で条件を指定します。
ここで「'神奈川県'」のように、文字列がクォーテーション( ' )で囲まれていますが、テキスト型や日付型の場合は、クォーテーション( ' )で囲む必要があります。一方、数字型の場合はクォーテーション( ' )は囲む必要はは無いです。(囲んであっても動きます。)
それでは、WHERE の条件を加えた内容で Query Studio で実行してみます。
SELECT Id
, Email
, Name COLLATE Japanese_CS_AS_KS_WS as [Name]
FROM MasterSubscribers
WHERE Prefecture = '神奈川県'
すると、下記の通り、Prefecture(県)が「神奈川県」の方 1 レコードのみが取得できました。
以上です。
いかがでしたでしょうか?
これでデータエクステンション内のデータが調べられるようになったかと思います。SQL では、SELECT、FROM、WHERE を使うことが、まずは基本になってきます。お手持ちのデータエクステンションを使って、色々とデータを取得してみてください。
それでは、しばらくこの Marketing Cloud SQL 超入門シリーズの連載を続けてみたいと思います。
今回は以上です。