ウェブアプリで SQL クエリテンプレートを使う

SQL クエリテンプレートをクリーンルームに含めることで、コンシューマーは、クリーンルームのデータをクエリするための無料フォーム SQL を書くことができます。SQL クエリテンプレートを使用する場合、コンシューマークエリが正常に結果を返すためには、一定の要件を満たす必要があります。これらの要件は、データプロバイダーがデータプライバシーポリシーでどのようにテーブルを保護するかによって決定されます。

テンプレートポリシー

SQL クエリテンプレートは、コンシューマーがどのようにデータをクエリできるかを制御するために、以下のポリシーを適用します。

投影ポリシー

投影ポリシーが設定されている列は、投影することはできません(つまり、 SELECT ステートメントに含めることはできません)。しかし、コンシューマーは投影ポリシーで列をフィルターしたり、結合したりすることができます。

集計ポリシー

クエリが結果を返すためにデータを集計する必要があります。

集計ポリシーは、各集計グループが最小数のエンティティを含むことを要求することによって、エンティティのプライバシーを保護します。エンティティは、列の明確な値によって識別されます。例えば、 email 列に値 joe@company.com を持つすべての行は、同じエンティティに属するかもしれません。

クリーンルームでは、集計ポリシーはテーブル内の複数のエンティティを保護することができます。例えば、ポリシーは、集計グループが少なくとも5世帯と10ユーザーを含むことを要求するかもしれません。

列に対して集計ポリシーを割り当てることで、コンシューマーはその列に対してフィルター、プロジェクト、および結合を行うことができることに注意してください。

重要

SQL クエリテンプレートを使用する場合、クリーンルーム作成プロセスで指定された結合ポリシーは無視されます。

SQL クエリテンプレートをクリーンルームに追加します。

コンシューマーが SQL クエリテンプレートを使用して分析を実行できるように、クリーンルームを構成する一般的なプロセスは以下のとおりです。

  1. クリーンルーム作成プロセス を開始します。

  2. テンプレートを選択するプロンプトが表示されたら、 Horizontal » SQL Query を選択し、 SQL クエリテンプレートを構成 します。

  3. クリーンルームをコラボレーターと共有します。

SQL クエリテンプレートの構成

列にポリシーを割り当てるか、列を完全に許可しない限り、コンシューマークエリは SQL クエリテンプレート内の列を選択、フィルター、または結合できません。

SQL クエリテンプレートをクリーンルームに追加した後、以下のアクションを実行することで構成できます。

コンシューマーが制限なく、列を SELECT、フィルター、または結合できるようにする

Fully Permitted Columns ドロップダウンリストを使用して、列の名前を選択する。

1つまたは複数の列に集計ポリシーを割り当てる

集計ポリシー を列に割り当てるには、 Aggregation Policy Columns ドロップダウンリストを使用して列の名前を選択します。集計ポリシーを割り当てた後、コンシューマーのクエリは、列から最小数の異なる値を含むグループにデータを集計する必要があります。

列に集計ポリシーを割り当てた後、コンシューマのクエリによって返される集計グループに、その列からの異なる値(つまり、エンティティ)をいくつ含める必要があるかを調整できます。各グループの必要なエンティティの数を調整するには、次のようにします。

  1. Privacy Settings » Aggregation Policies セクションを探します。

  2. 列を見つけ、 Threshold を増減します。閾値が高ければ高いほど、各集計グループでより明確な値を返さなければならず、エンティティのプライバシー保護が強化されます。

集計ポリシーを追加の列に割り当てて追加のエンティティを定義し、それらのエンティティを各グループに含める数を調整できます。

1つまたは複数の列に投影ポリシーを割り当てる

投影ポリシー を列に割り当てるには、 Projection Policy Columns ドロップダウンリストを使用して列名を選択します。コンシューマーは、 SELECT ステートメントで投影ポリシーを持つ列を使用することはできません。

SQL クエリテンプレートを使用した分析の実行

このセクションの情報を使用して、 SQL クエリテンプレートで成功するクエリを記述します。

どの列で結合やフィルターができますか?

ポリシーがある列、または完全に許可されている列であれば、結合やフィルターが可能です。列が結合可能か、フィルターで使用可能かを判断するには、次のようにします。

  1. Query Configurations セクションで、 Tables タイルを見つけます。

  2. ドロップダウンリストを使用してテーブルを選択します。リストされたすべての列を結合し、フィルターをかけることができます。

集計の要件

プロバイダーが列に集計ポリシーを割り当てた場合、 SQL クエリテンプレートを使用して実行されるすべてのクエリは、集計された結果を返さなければなりません。

クエリの結果を集計する必要があるかどうかを判断するには、次のようにします。

  1. Query Configurations セクションで、 Tables タイルを見つけます。

  2. ドロップダウンリストを使用してテーブルを選択します。

  3. 集計ポリシーラベルを持つ列を探します。集計ポリシーラベルが少なくとも1つある場合は、クエリで集計を使用する必要があります。

集計ポリシーによって保護されたデータに対するクエリを成功させる方法については、ガイドラインをご参照ください。

どの列を投影できますか?

SQL クエリテンプレートを使用して実行されるクエリには、投影できる(SELECT ステートメントで使用できる)列の制限があります。

クエリが列を投影できるかどうかを判断するには:

  1. Query Configurations セクションで、 Tables タイルを見つけます。

  2. ドロップダウンリストを使用してテーブルを選択します。

  3. 投影できないことを意味する投影ポリシーラベルが付いている列を探してください。投影ポリシーラベルの付いた列を除くすべての列を投影することができます。

結果の表示

ウェブアプリでクエリを実行するには、 Run を選択し、オプションでクエリ実行の名前とスケジュールを指定します。 Analyses and Queries リストでクエリのステータスを確認し、クエリがいつ終了したかを確認します。完了したクエリを選択すると、結果が表示されます。クエリに成功すると、結果のテーブルが表示されます。結果テーブルが次に詳述する特定の要件を満たす場合、結果をグラフで表示することもできます。Snowflakeには、棒グラフ、折れ線グラフ、円グラフなど、いくつかのグラフタイプがあります。結果セクションで適切なボタンを選択して、出力形式を選択します。

グラフ作成の要件

Snowflakeがグラフを生成できるようにするには:

  • 結果テーブルには、少なくとも1つの測定(数値)列と1つのディメンジョン(カテゴリ)列を含める必要があります。

  • 測定列名には、以下の接頭語または接尾語(大文字と小文字は区別されません)が必要です。

    • 列名の接頭辞:

      • COUNT

      • SUM

      • AVG

      • MIN

      • MAX

      • OUTPUT

      • OVERLAP

    • 列名の接尾辞:

      • _OVERLAP

Snowflakeは、結果テーブルの最初の適格測定列と最初のディメンジョン列を使用してチャートを生成します。

制限事項

  • ORDER BY 句は、分析結果の表示方法には影響しません。

サンプルクエリ

このセクションでは、 SQL クエリテンプレートを使用して分析を実行する際に、クエリに含めることができる内容と含めることができない内容を理解します。

集計関数のないクエリ

状況によっては、集計関数を使わずに値を返すこともできます。

許可済み

不可

SELECT gender, regions
  FROM TABLE sample_db.demo.customer
  GROUP BY gender, region;
Copy
SELECT gender, regions
  FROM TABLE sample_db.demo.customer;
Copy
共通テーブル式(CTEs)

許可済み

不可

WITH audience AS
  (SELECT COUNT(DISTINCT t1.hashed_email),
    t1.status
    FROM provider_db.overlap.customers t1
    JOIN consumer_db.overlap.customers t2
      ON t1.hashed_email = t2.hashed_email
    GROUP BY t1.status);

SELECT * FROM audience;
Copy
WITH audience AS
  (SELECT t1.hashed_email,
    t1.status
    FROM provider_db.overlap.customers quoted t1
    JOIN consumer_db.overlap.customers t2
      ON t1.hashed_email = t2.hashed_email
    GROUP BY t1.status)

SELECT * FROM audience
Copy
CREATE, ALTER, TRUNCATE

クエリは、 CREATE、 ALTER、 TRUNCATE を使用することはできません。

結合を含むクエリ

許可済み

SELECT p.education_level,
  c.status,
  AVG(p.days_active),
  COUNT(DISTINCT p.age_band)
  FROM  sample_database_preprod.demo.customers c
  INNER JOIN
  sample_database_preprod.demo.customers p
    ON  c.hashed_email = p.hashed_email
  GROUP BY ALL;
Copy
DATE_TRUNC

許可済み

SELECT COUNT(*),
  DATE_TRUNC('week', date_joined) AS week
  FROM consumer_sample_database.audience_overlap.customers
  GROUP BY week;
Copy
引用符で囲まれている識別子

許可済み

SELECT COUNT(DISTINCT t1.”hashed_email”)
  FROM provider_sample_database.audience_overlap."customers quoted" t1
  INNER JOIN
  consumer_sample_database.audience_overlap.customers t2
    ON t1."hashed_email" = t2.hashed_email;
Copy