メインコンテンツまでスキップ

クロスソース構成の複雑なシーンとSQLサンプル

最終更新 2026/10/03

1. クロスソースイベントテーブル​

1.1 イベント時間​

よくある時間情報の記録形式と処理方法は次のとおりです:

想定フィールド名想定値のサンプルデータタイプ備考
event_time2025-10-15 08:12:34時間内容&タイプともに正しい

画面の設定

  • 値の取得方式= カラム値を読み取る
  • イベント時間列= event_time

想定フィールド名想定値のサンプルデータタイプ備考
time_str_a'2025-10-15 08:12:34'テキスト内容は正しい
タイプを変換

画面の設定

  • 値の取得方式= カスタムSQL
try_cast( time_str_a as timestamp )

想定フィールド名想定値のサンプルデータタイプ備考

time_str_b

'15/Oct/2025 13:56:36.864'テキスト

特殊な形式

日月年_時分秒_ミリ秒

解析関数を使用

画面の設定

  • 値の取得方式= カスタムSQL
try( date_parse( time_str_b, '%d/%b/%Y %H:%i:%s.%f' ) )

その他のフォーマット文字は、SQLマニュアルを参照してください


想定フィールド名想定値のサンプルデータタイプ備考
time_str_c'25/10/15 08:12:34'テキスト

特殊な形式

年月日_時分秒

解析関数を使用

画面の設定

  • 値の取得方式= カスタムSQL
try( date_parse( time_str_c, '%y/%m/%d %H:%i:%s' ) )

その他のフォーマット文字は、SQLマニュアルを参照してください


想定フィールド名想定値のサンプルデータタイプ備考
ts_101760506518数値

10桁の数値のタイムスタンプ

解析関数を使用

*タイムゾーンはクエリエンジンのインストール環境のタイムゾーン

画面の設定

  • 値の取得方式= カスタムSQL
try( from_unixtime( ts_10 ) )

想定フィールド名想定値のサンプルデータタイプ備考
ts_101760506518数値

10桁の数値のタイムスタンプ

解析関数を使用

*タイムゾーンはクエリエンジンのインストール環境のタイムゾーン

tzAsia/Kolkataテキスト*データ送信時のタイムゾーン。現地時間に戻す必要があります

画面の設定

  • 値の取得方式= カスタムSQL
try( from_unixtime( ts_10, tz ) )

想定フィールド名想定値のサンプルデータタイプ備考
ts_13

1760506518123

数値

13桁の数値のタイムスタンプ

*タイムゾーンはクエリエンジンのインストール環境のタイムゾーン

画面の設定

  • 値の取得方式= カスタムSQL
try( from_unixtime( ts_13 / 1000.000 ) )

1.2 イベントタイムゾーン​

よくあるタイムゾーンの記録方法は次のとおりです:

想定フィールド名想定値のサンプルデータタイプ備考
TIMEZONE

8

数値内容&タイプともに正しい

画面の設定

  • 値の取得方式= カラム値を読み取る
  • イベントタイムゾーン列= TIMEZONE

想定フィールド名想定値のサンプルデータタイプ備考
TIMEZONE_A'8'テキスト内容は正しい
タイプ変換を使用

画面の設定

  • 値の取得方式= カスタムSQL
try_cast( TIMEZONE_A as double )

想定フィールド名想定値のサンプルデータタイプ備考
TIMEZONE_B'Asia/Shanghai'テキスト地域名のタイムゾーン
文字列タイプ
時差から推算して変換

画面の設定

  • 値の取得方式= カスタムSQL
try(
date_diff( /*2つの時刻の差を求める*/
'minute', /*分数を計算*/
cast( '2018-01-01 00:00:00'||"TIMEZONE_B" as timestamp with time zone ),
timestamp'2018-01-01 00:00:00+00:00'
)
/60.0 /*時間に換算(小数点付き)*/
)

想定フィールド名想定値のサンプルデータタイプ備考
TIMEZONE_C'08:00'テキスト時刻形式のタイムゾーン
文字列タイプ
時差から推算して変換
  • 値の取得方式= カスタムSQL
try(
date_diff( /*2つの時刻の差を求める*/
'minute', /*分数を計算*/
cast( '2018-01-01 00:00:00'||"TIMEZONE_C" as timestamp with time zone ),
timestamp'2018-01-01 00:00:00+00:00'
)
/60.0 /*時間に換算(小数点付き)*/
)

1.3 パーティション方式とプッシュダウンロジック​

1.3.1 基本的な説明​

分析モデルでクエリを実行する際、フロントエンドの画面でユーザーにクエリする日付範囲を選択させ、システムはその範囲に基づいてデータを絞り込みます

通常、基になるテーブルには日付ごとに記録されたパーティションフィールドがあり、このフィールドで不要なデータを先に除外することで、クエリのパフォーマンスを向上できます

part_datedata...
2025-10-01......
2025-10-02......
2025-10-03......
2025-10-04......
2025-10-05......
元の画像を見る

例:基になるテーブルにpart_dateパーティション列がある場合

ユーザーが画面で日付範囲を選択します

part_datedata...
2025-10-01......
2025-10-02......
2025-10-03......
2025-10-04......
2025-10-05......
元の画像を見る

システムは必要なデータのみをクエリします

フロントエンドからバックエンドに送信されるパーティションの絞り込みロジック

part_date between
date'2025-10-01' /*日付の開始*/
and
date'2025-10-03' /*日付の終了*/

このうち、変数部分は次のとおりです:

part_date between
${start_date} /*日付の開始*/
and
${end_date} /*日付の終了*/
/* 変数のデータタイプは date */
/* このSQLがプッシュダウンロジックで、クエリ時にシステムが WHERE 句内に連結します */
警告

タイムゾーンのオフセットの問題があるため、パーティションのプッシュダウンロジックによる絞り込みは、第1段階の絞り込みとしてのみ使用されます

その後、実際の「イベント時間」に基づいて、データがさらに絞り込まれます


1.3.2 パーティション方式のサンプル​

part_datedata...
'2025-10-01'......
'2025-10-02'......
'2025-10-03'......
'2025-10-04'......
'2025-10-05'......
元の画像を見る
  • 内容はハイフン区切りの年月日で、タイプは文字列
  • AEシステムの構造と一致
  • 「日付情報列」と「フォーマット」を選択するだけです

part_datedata...
'2025/10/01'......
'2025/10/02'......
'2025/10/03'......
'2025/10/04'......
'2025/10/05'......
元の画像を見る
  • 内容はスラッシュ区切りの年月日で、タイプは文字列
  • 「日付情報列」と「フォーマット」を選択するだけです

part_datedata...
20251001......
20251002......
20251003......
20251004......
20251005......
元の画像を見る
  • 内容は年月日の数字で、タイプは数値

タイプが文字列の場合にも適用できます

  • 「日付情報列」と「フォーマット」を選択するだけです

part_datedata...
1759248000......
1759334400......
1759420800......
1759507200......
1759593600......
元の画像を見る
  • 内容は毎日0時の10桁の数値タイムスタンプで、タイプは数値

文字列タイプの場合は、先に数値に変換する必要があります

13桁の数値タイムスタンプの場合は、変数をタイムスタンプに変換した後、1000を掛ける必要があります

  • 「プッシュダウンロジックのカスタム」を選択してSQLを設定します
part_date between
try( to_unixtime( ${start_date} ) )
and
try( to_unixtime( ${end_date} ) )

year_pmonth_pday_pdata...
2025101......
2025102......
2025103......
2025104......
2025105......
元の画像を見る
  • 3つのパーティション列でそれぞれ年/月/日の情報を記録し、タイプは数値
  • 「プッシュダウンロジックのカスタム」を選択してSQLを設定します
array_position( transform(sequence( ${start_date} , ${end_date} ), x -> year(x) ) , "year_p" ) > 0
and array_position( transform(sequence( ${start_date} , ${end_date} ), x -> month(x) ) , "month_p" ) > 0
and array_position( transform(sequence( ${start_date} , ${end_date} ), x -> day(x) ) , "day_p" ) > 0
/*月や年をまたぐ場合を考慮する必要があります*/

2. アセットリストの値の取得方式​

元の列名をprop1, prop2, prop3 ...と仮定します

スクリーンショットでは長いSQLが一部表示されない場合があります。完全なSQLは各セクションのコードブロックを参照してください。

2.1 タイプ変換​

獲得コイン(元データ)獲得コイン(変換後)
'1024'1024
元の画像を見る
  • 元データの「獲得コイン」列は文字列タイプを使用しています
  • 数値演算ができません
  • 数値タイプに変換する必要があります
  • 値の取得方式でSQLを設定します
try_cast( prop1 as double )

2.2 文字列の連結​

サーバーID(元データ)ユーザーID(元データ)ユーザーの一意のID(変換後)
SVAPU01SVAPU01
元の画像を見る
  • 元データのユーザーIDは、サーバーごとに重複している場合があります
  • サーバーIDと組み合わせて初めて、ユーザーの一意のIDを確定できます
  • この2つを連結する必要があります
  • 値の取得方式でSQLを設定します
try( concat( "prop1", "prop2" ) )

2.3 文字列の分割​

広告配信情報(元データ)地域(変換後)グループ(変換後)メンバー(変換後)
華東,1組,山田華東1組山田
元の画像を見る
  • 元データの文字列に複数の情報が含まれています
  • 使用時には分割して、それぞれ個別に使いたい
  • 値の取得方式でSQLを設定します
try( split_part( "prop1" , ',', 1 ) )
/*カンマで分割して第1部分を取得。シングルクォートとダブルクォートに注意*/

try( split_part( "prop1" , ',', 2 ) )
/*カンマで分割して第2部分を取得。シングルクォートとダブルクォートに注意*/

try( split_part( "prop1" , ',', 3 ) )
/*カンマで分割して第3部分を取得。シングルクォートとダブルクォートに注意*/

2.4 オブジェクトからサブプロパティを抽出​

アイテム情報(元データ)アイテム価格(変換後)
{"item_id":"apple","item_price":88}88
元の画像を見る
  • 元データのオブジェクトに、アイテムIDとアイテム価格が含まれています
  • 使用時には、その中のアイテム価格を抽出したい
  • 値の取得方式でSQLを設定します
try( "prop1"."item_price" )

2.5 文字列をオブジェクトに変換​

アイテム情報の文字列(元データ)アイテム情報(変換後)
'{"item_id":"apple","item_price":88}'{"item_id":"apple","item_price":88}
元の画像を見る
  • 元データでは、JSON文字列でアイテム情報を記録しています
  • 使用時には「オブジェクト」データタイプに変換したい
  • 値の取得方式でSQLを設定します
try_cast( json_parse( "prop1" ) as row( item_id varchar, item_price double ) )
このページは役に立ちましたか?