クロスソース構成の複雑なシーンとSQLサンプル
1. クロスソースイベントテーブル
1.1 イベント時間
よくある時間情報の記録形式と処理方法は次のとおりです:
| 想定フィールド名 | 想定値のサンプル | データタイプ | 備考 |
|---|---|---|---|
| event_time | 2025-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_10 | 1760506518 | 数値 | 10桁の数値のタイムスタンプ 解析関数を使用 *タイムゾーンはクエリエンジンのインストール環境のタイムゾーン |
画面の設定
- 値の取得方式= カスタムSQL
try( from_unixtime( ts_10 ) )
| 想定フィールド名 | 想定値のサンプル | データタイプ | 備考 |
|---|---|---|---|
| ts_10 | 1760506518 | 数値 | 10桁の数値のタイムスタンプ 解析関数を使用 *タイムゾーンはクエリエンジンのインストール環境のタイムゾーン |
| tz | Asia/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_date | data | ... |
|---|---|---|
| 2025-10-01 | ... | ... |
| 2025-10-02 | ... | ... |
| 2025-10-03 | ... | ... |
| 2025-10-04 | ... | ... |
| 2025-10-05 | ... | ... |
例:基になるテーブルにpart_dateパーティション列がある場合
ユーザーが画面で日付範囲を選択します
| part_date | data | ... |
|---|---|---|
| 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_date | data | ... |
|---|---|---|
| '2025-10-01' | ... | ... |
| '2025-10-02' | ... | ... |
| '2025-10-03' | ... | ... |
| '2025-10-04' | ... | ... |
| '2025-10-05' | ... | ... |
- 内容はハイフン区切りの年月日で、タイプは文字列
- AEシステムの構造と一致
- 「日付情報列」と「フォーマット」を選択するだけです
| part_date | data | ... |
|---|---|---|
| '2025/10/01' | ... | ... |
| '2025/10/02' | ... | ... |
| '2025/10/03' | ... | ... |
| '2025/10/04' | ... | ... |
| '2025/10/05' | ... | ... |
- 内容はスラッシュ区切りの年月日で、タイプは文字列
- 「日付情報列」と「フォーマット」を選択するだけです
| part_date | data | ... |
|---|---|---|
| 20251001 | ... | ... |
| 20251002 | ... | ... |
| 20251003 | ... | ... |
| 20251004 | ... | ... |
| 20251005 | ... | ... |
- 内容は年月日の数字で、タイプは数値
タイプが文字列の場合にも適用できます
- 「日付情報列」と「フォーマット」を選択するだけです
| part_date | data | ... |
|---|---|---|
| 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_p | month_p | day_p | data | ... |
|---|---|---|---|---|
| 2025 | 10 | 1 | ... | ... |
| 2025 | 10 | 2 | ... | ... |
| 2025 | 10 | 3 | ... | ... |
| 2025 | 10 | 4 | ... | ... |
| 2025 | 10 | 5 | ... | ... |
- 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(変換後) |
|---|---|---|
| SVAP | U01 | SVAPU01 |
- 元データのユーザー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 ) )

