ODPSパラメータ化ビューの実装:スカラ・表型パラメータと動的JOIN

パラメータ化ビューとは

MaxCompute(ODPS)のパラメータ化ビューは、呼び出し側から値やテーブルを引数に受け取るビューです。条件やJOIN対象を外から指定できるため、用途ごとに似たSQLを量産する必要が減ります。引数にはスカラ型と表型の両方を使えます。

基本構文

以下は、期間と地域テーブルを引数に取るパラメータ化ビューの例です。

CREATE VIEW revenue_summary(
  @cutoff_date STRING,
  @region_set TABLE(region_code STRING)
) AS
SELECT
  o.order_id,
  r.region_name,
  SUM(oi.amount) AS total_amount
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
JOIN @region_set r ON o.region_code = r.region_code
WHERE o.order_date <= @cutoff_date
GROUP BY o.order_id, r.region_name;

定義のポイントは次の通りです。

  • スカラパラメータは STRING、DATETIME などの型を指定する
  • 表型パラメータは TABLE(列名 型, ...) で宣言する
  • SQL内では @param の形式で変数として利用する

呼び出し方

CTEで引数テーブルを作成し、ビューに渡します。

WITH target_regions AS (
  SELECT 'A01' AS region_code, '関東' AS region_name
  UNION ALL
  SELECT 'A02', '関西'
)
SELECT * FROM revenue_summary('2024-03-31', target_regions);

動的テーブルJOINの活用

ユーザー行動分析などで、ユーザーマスタと行動ログを業務線ごとに切り替えたい場合に有効です。表型パラメータを使うことで、同じ集計ロジックをテーブル名ごとに再利用できます。

CREATE VIEW recent_user_metrics(
  @user_master TABLE(
    user_id STRING,
    register_date STRING,
    * ANY
  ),
  @action_log TABLE(
    user_id STRING,
    action_time STRING,
    * ANY
  ),
  @lookback_days BIGINT
) AS
SELECT
  u.user_id,
  u.register_date,
  MAX(a.action_time) AS last_action_time,
  COUNT(*) AS action_count
FROM @user_master u
JOIN @action_log a ON u.user_id = a.user_id
WHERE a.action_time >= DATE_SUB(GETDATE(), CAST(@lookback_days AS INT))
GROUP BY u.user_id, u.register_date;

呼び出し例

同じビューを、異なる行動ログテーブルに適用できます。

-- EC業務線(過去30日)
WITH u AS (
  SELECT user_id, register_date FROM dim_users
),
a AS (
  SELECT user_id, action_time FROM dwd_ec_events
)
SELECT * FROM recent_user_metrics(u, a, 30);

-- コンテンツ業務線(過去7日)
WITH u AS (
  SELECT user_id, register_date FROM dim_users
),
a AS (
  SELECT user_id, action_time FROM dwd_content_events
)
SELECT * FROM recent_user_metrics(u, a, 7);

注意点

  • 表型パラメータは FROM や JOIN の対象として使用する
  • CTEからテーブルを渡す際は、列名と型がビュー定義と一致するよう明示する
  • 可変列を受け入れる場合は * ANY を宣言する
  • スカラパラメータは型変換を明確に行い、実行時の暗黙変換を避ける

タグ: MaxCompute ODPS ParameterizedView SQL DataWarehouse

10月4日 00:18 投稿