すべてのプロダクト
Search
ドキュメントセンター

DataWorks:DataWorks OpenLake ソリューションに基づくエンドツーエンドのインテリジェント レイクハウス データ開発

最終更新日:Mar 27, 2025

この実験では、OpenLake House プラットフォームに基づく小売 E コマース データ開発および分析シナリオを体験し、DataWorks を使用してマルチエンジン共同開発を実行し、ワークフローを調整し、データカタログを視覚的に管理できます。 さらに、Python ベースのプログラミングとデバッグを実行し、ノートブックと AI を組み合わせてインタラクティブなデータ探索と分析を実行できます。

背景情報

DataWorks の概要

DataWorks は、15 年にわたるビッグデータの経験に基づく Alibaba グループのビッグデータ開発手法を活用した、インテリジェントなレイクハウスベースのデータ開発およびガバナンスプラットフォームです。 DataWorks は、MaxCompute、E-MapReduce(EMR)、Hologres、Realtime Compute for Apache Flink、Platform for AI(PAI)など、Alibaba Cloud が提供する数十のビッグデータおよび AI コンピューティングサービスと互換性があります。 DataWorks は、データウェアハウス、データレイク、OpenLake レイクハウスアーキテクチャ向けのインテリジェントな抽出、変換、ロード(ETL)開発、データ分析、プロアクティブなデータ資産ガバナンスをサポートし、Data+AI ライフサイクル全体でデータ管理を促進します。 2009 年以来、DataWorks は Alibaba データシステムを継続的に製品化および改良し、公共サービス部門、金融、小売、インターネット、自動車、製造などのさまざまな業界にサービスを提供してきました。 DataWorks は、デジタルトランスフォーメーションと価値創造のために DataWorks を選択した数万の顧客の信頼を獲得しています。

DataWorks Copilot の概要

DataWorks Copilot は、DataWorks のインテリジェントアシスタントです。 DataWorks では、デフォルトの大規模言語モデル(LLM)、DeepSeek-R1-671B(フルパワーエディション)、または DeepSeek-R1-Distill-Qwen-32B を使用して、DataWorks での関連操作を完了できます。 DeepSeek-R1 の高度な推論能力により、DataWorks Copilot では、自然言語インタラクションに基づいて、SQL コードの生成、最適化、テストなどの複雑なタスクを実行できます。 これにより、抽出、変換、ロード(ETL)開発とデータ分析の効率が大幅に向上します。

DataWorks ノートブック機能の概要

DataWorks のノートブック機能は、エンジン固有の SQL または Python コード分析を実行し、コードをリアルタイムで実行またはデバッグするために使用できる、インテリジェントなインタラクティブデータ開発および分析ツールを提供します。 このようにして、視覚化されたデータ処理結果を取得できます。 さらに、ノートブックと他のタイプのノードを組み合わせてワークフローを形成し、ワークフローをスケジューリングシステムにコミットして実行できます。 これにより、複雑なビジネスシナリオを柔軟に実装できます。

使用上の注意

  • DataWorks Copilot パブリックプレビューが利用可能なリージョンと DataWorks エディションは限られています。 詳細については、「DataWorks Copilot」トピックの パブリックプレビュー セクションをご参照ください。

  • Data Studio で Python とノートブック機能を使用するには、最初に 個人開発環境 に切り替える必要があります。

制限事項

  • OpenLake は DLF 2.0 のみをサポートしています。

  • データカタログは DLF 2.0 のみをサポートしています。

環境の準備

  1. Alibaba Cloud アカウントを準備する か、RAM ユーザーを準備する

  2. ワークスペースを作成する

    説明

    ワークスペースで [data Studio のパブリックプレビューに参加する] がオンになっていることを確認してください。

  3. 「Data Studio のパブリックプレビューに参加する」がオンになっているワークスペースに計算リソースを関連付ける

実験手順

ステップ 1:データカタログを管理する

データレイクハウスソリューションのデータカタログ管理機能を使用すると、Data Lake Formation(DLF)、MaxCompute、Hologres などのコンピュートエンジンのタイプのデータカタログを作成および管理できます。

  1. Data Studio ページの左側のナビゲーションウィンドウで、image アイコンをクリックします。[DATA CATALOG] ウィンドウが表示されます。[DATA CATALOG] ウィンドウで、管理するメタデータタイプを見つけ、目的のデータカタログの名前にポインターを移動し、データカタログの右側にある image アイコンをクリックして、[開く] をクリックします。データカタログの構成タブが表示されます。

    image

    image

  2. データカタログの構成タブで、スキーマの名前をクリックします。 表示されるタブで、テーブルの名前をクリックします。 テーブルの詳細ページが表示されます。

    image

  3. Data Studioimageデータカタログimageテーブルの作成 ページの左側のナビゲーションウィンドウで、 アイコンをクリックします。 ウィンドウが表示されます。 [データカタログ] ウィンドウで、管理するメタデータタイプを見つけ、目的のデータカタログの名前にポインタを移動し、データカタログの右側にある アイコンをクリックして、 をクリックします。 [テーブルの作成] タブが表示されます。

    image

  4. [テーブルの作成] タブの左側のエリアで、[テーブル名][フィールド名] を指定します。または、[テーブルの作成] タブの右側のエリアに [DDL] 文を入力してテーブルを作成します。次に、上部のツールバーの [デプロイ] をクリックします。

    image

    サンプルプリセットコード

    CREATE TABLE dwd_mbr_user_info
    (
      id                BIGINT COMMENT 'プライマリキー', -- The primary key
      gmt_create       DATETIME COMMENT '作成時間', -- The creation time
      gmt_modified     DATETIME COMMENT '変更時間', -- The modification time
      user_id          BIGINT COMMENT 'メンバーのユーザー ID', -- The user ID of a member
      nick             STRING COMMENT 'メンバーのニックネーム', --  The nickname of a member
      reg_fullname     STRING COMMENT '個人認証が実行された場合は個人の実名を使用し、企業認証が実行された場合は企業名を使用します。', -- The real name of a person is used if individual verification is performed, and an enterprise name is used if enterprise verification is performed.
      reg_mobile_phone STRING COMMENT '登録時に入力された携帯電話番号', -- The mobile phone number entered during registration
      reg_email        STRING COMMENT '登録時に入力されたメールアドレス(ユーザーが変更可能)', -- The email address entered during registration (modifiable by the user)
      reg_gender       STRING COMMENT '登録時に入力された性別(F は女性、M は男性を表します。どちらも入力されていない場合、性別は不明であり、これは性別を非公開にすることを示します。)', -- The gender entered during registration (F represents female and M represents male. If neither one is entered, the gender is unknown, which indicates that the person wants to keep the gender confidential.)
      reg_birthdate    DATETIME COMMENT '登録時に入力された誕生日(ユーザーが変更可能)', -- The birthday entered during registration (modifiable by the user)
      reg_address      STRING COMMENT '登録時に入力された住所(ユーザーが変更可能)', -- The address entered during registration (modifiable by the user)
      reg_nation_id    STRING COMMENT '登録時に入力された国 ID(空のまま)', -- The country ID entered during registration (left empty)
      reg_prov_id      STRING COMMENT '登録時に入力された都道府県 ID', -- The province ID entered during registration
      reg_city_id      STRING COMMENT '登録時に入力された市区町村 ID', -- The city ID entered during registration
      user_regip       STRING COMMENT '登録時に入力された IP アドレス', -- The IP address entered during registration
      id_card_type     BIGINT COMMENT 'メンバーシップ認証に使用される証明書のタイプ。 0:不明。 1:ID カード番号。 2:営業許可証番号', -- The certificate type used for membership authentication. 0: unknown; 1: ID card number; 2: business license number
      id_card_number   STRING COMMENT '個人認証が実行された場合は、ID カード番号を示します。 企業認証が実行された場合は、営業許可証番号を示します。 認証が実行されていない場合、精度は保証されません。', -- If individual verification is performed, it indicates the ID card number. If enterprise verification is performed, it indicates the business license number. If no verification is performed, accuracy cannot be guaranteed.
      user_regdate     DATETIME COMMENT '登録時間', -- The registration time
      user_active_type STRING COMMENT 'ユーザーのアクティベーション方法。 1:メール。 2:携帯電話', -- The user activation method. 1: email; 2: mobile phone
      user_active_time DATETIME COMMENT 'アクティベーション時間', -- The activation time
      vip_level        STRING COMMENT 'VIP ランク', -- The VIP rank
      is_delete        STRING COMMENT '削除するかどうか' -- Delete or not
    )
    COMMENT 'メンバーシップ登録フォーム' -- The membership registration form
    PARTITIONED BY 
    (
      ds                STRING COMMENT 'YYYYMMDD'
    )
    LIFECYCLE 7;

ステップ 2:ワークフローを調整する

DataWorks では、視覚的にドラッグ操作を実行して、ビジネスの観点からワークフロー内のさまざまなタイプのデータ開発ノードを調整できます。 スケジュール時間などの共通パラメータを個別に構成する必要はありません。 これにより、複雑なタスクプロジェクトを簡単に管理できます。

  1. Data StudioimageDATASTUDIOワークスペースディレクトリimage[ワークフローの作成] ページの左側のナビゲーションウィンドウで、 アイコンをクリックします。 ウィンドウが表示されます。 [DATASTUDIO] ウィンドウで、 をクリックし、右側にある アイコンをクリックして、 をクリックします。

    image

  2. 表示されるポップオーバーに、ワークフロー名を入力し、Enter キーを押します。

    プリセットワークフロー名: 小売 E コマースビジネスの概要

  3. ワークフローの構成タブで、キャンバスの中央にある [ノードを追加するには、ドラッグまたはクリックします] をクリックします。[ノードの作成] ダイアログボックスで、[ノードタイプ] パラメーターと [ノード名] パラメーターを構成し、[確認] をクリックします。

    • プリセットノード名: 小売 E コマースの概要

    • プリセットノードタイプ: ゼロロードノード

    image

  4. ワークフローの構成タブの [ノードの作成] セクションで、使用するノードタイプを見つけ、ノードタイプをキャンバスにドラッグして、リリースします。 [ノードの作成] ダイアログボックスで、[ノード名] を指定し、[確認] をクリックします。

    次の表は、プリセットノード名とタイプを示しています

    ノードタイプ

    ノード名

    Data Integration - バッチ同期

    ods_mbr_user_info

    MaxCompute-MaxCompute SQL

    dim_ec_mbr_user_info

    MaxCompute-MaxCompute SQL

    dws_ec_mbr_cnt_nd

    ノートブック

    ads_ec_kpi_report

    image

    image

  5. キャンバスで、依存関係を構成する 2 つのノードを見つけ、一方のノードの長方形ボックスの下端の中央にポインタを移動します。 + アイコンが表示されたら、接続線をドラッグして他のノードに接続し、リリースします。

    image

    image

  6. 必要なノードを順番に作成し、ノードの依存関係を構成して、保存 をクリックします。

    image

  7. 構成を 保存 した後、ビジネス要件に基づいて、トップ ツールバーでキャンバス上のノードの レイアウト モード を変更できます。

    image

  8. ワークフローの構成タブの右側のナビゲーションウィンドウで、[プロパティ] をクリックします。[プロパティ] タブで、ワークフローのスケジューリングパラメーターとノードの依存関係を構成します。[スケジューリング パラメーター] セクションで、[パラメーターの追加] をクリックします。表示される入力ボックスで、[パラメーター名] フィールドに bizdate と入力し、[パラメーター値] ドロップダウンリストから $[yyyymmdd-1] を選択します。

    image

  9. タブの [スケジューリングの依存関係] セクションで、[依存関係の追加] をクリックします。表示されるセクションの [祖先オブジェクト] フィールドに、ワークフローに属していないノードの名前を入力し、Enter キーを押します。結果が返されるまで待ちます。結果リストから必要な祖先オブジェクトを選択し、[追加] をクリックします。

    image

  10. 上部のツールバーで、[デプロイ] をクリックします。 右下に [デプロイメント] タブが表示されます。 [デプロイメントの説明] フィールドの右側にある [本番環境へのデプロイを開始] をクリックし、画面上の指示に基づいてチェックと確認操作を順番に実行します。

    image

ステップ 3:マルチエンジン共同開発を実行する

Data Studio は、データ同期ノード、MaxCompute、Hologres、EMR、Flink、ADB などの数十種類のコンピュートエンジンのノード、およびノートブックと Python を使用して開発されたノードのウェアハウス開発をサポートしています。 Data Studio は、これらのノードの複雑なスケジューリング構成もサポートしています。 Data Studio は、開発 - 本番環境分離の R&D モードを提供します。 この実験では、Flink SQL Streaming ノードが作成されます。

  1. Data StudioimageDATASTUDIOワークスペースディレクトリimageFlink SQL ストリーミングノード名 ページの左側のナビゲーションウィンドウで、 アイコンをクリックします。 ウィンドウが表示されます。 [DATASTUDIO] ウィンドウで、 をクリックし、右側にある アイコンをクリックして、[ノードの作成] > [Flink] > を選択します。 表示されるポップオーバーに、 を入力し、Enter キーを押します。

    プリセットノード名: ads_ec_page_visit_log

    image

  2. ノードの構成タブで、Flink SQL Streaming ノードのプリセットコードをコードエディタに貼り付けます。

    image

    Flink SQL Streaming ノードのプリセットコード

    CREATE TEMPORARY VIEW log_ri_base
    AS 
    SELECT 
      visit_time,  -- 訪問時間
      substring(visit_time,1,8) as stat_date,  -- 統計日付
      substring(visit_time,9,2) as stat_hour,  -- 統計時間
      visitor_id,  -- 訪問者 ID
      item_id,  -- 商品 ID
      cate_id,  -- カテゴリ ID
      ext_pv  -- 拡張 PV
    FROM vvp_ec_ads.dws_log_all_itm_ipv_ri
    WHERE
      bc_type IN ('b', 'z')
      AND coalesce(cate_id, '') <> ''
      AND visitor_type = 'uid'
      and coalesce(item_id, '') <> ''
      AND substring(visit_time,1,8) >= '${bizdate}';
    
    
    CREATE TEMPORARY VIEW itm_log_day
    AS
    SELECT
      sum(ext_pv) as pv,  -- PV
      count(DISTINCT visitor_id) FILTER (WHERE ext_pv>0) as uv,  -- UV
      stat_date,  -- 統計日付
      cate_id,  -- カテゴリ ID
      item_id  -- 商品 ID
    FROM log_ri_base
    GROUP BY stat_date
      ,cate_id
      ,item_id
    ;
    
    
    CREATE TEMPORARY VIEW itm_log_hh_00
    AS
    SELECT
      sum(ext_pv) as pv,  -- PV
      count(DISTINCT visitor_id) FILTER (WHERE ext_pv>0) as uv,  -- UV
      stat_date,  -- 統計日付
      stat_hour,  -- 統計時間
      item_id,  -- 商品 ID
      cate_id  -- カテゴリ ID
    FROM log_ri_base
    GROUP BY stat_date
      ,stat_hour
      ,cate_id
      ,item_id
    ;
    
    BEGIN STATEMENT SET;
    
    INSERT INTO vvp_ec_ads.ads_ec_log
    SELECT
      a.stat_date,  -- 統計日付
      cast(a.item_id as varchar) as item_id,  -- 商品 ID
      a.cate_id,  -- カテゴリ ID
      b.cate_name,  -- カテゴリ名
      cast(b.industry_id as varchar) as industry_id,  -- 業種 ID
      cast(b.xcat1_id as varchar) as xcat1_id,  -- xcat1 ID
      cast(b.xcat2_id as varchar) as xcat2_id,  -- xcat2 ID
      cast(b.xcat3_id as varchar) as xcat3_id,  -- xcat3 ID
      cast(b.cate_level1_id as varchar) as cate_level1_id,  -- カテゴリレベル 1 ID
      cast(b.cate_level2_id as varchar) as cate_level2_id,  -- カテゴリレベル 2 ID
      cast(b.is_sw as varchar) as is_sw,  -- ソフトウェアかどうか
      a.pv as mbr_ipv_1d,  -- 1 日あたりのメンバー IPV
      a.uv as mbr_ipv_uv_1d,  -- 1 日あたりのメンバー IPV UV
      DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss') as log_gmt_modify,  -- ログ変更時間
      DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss') as gmt_modify  -- 変更時間
    FROM itm_log_day a
    JOIN ec.dim_tm_cate_360_2pt_ri FOR SYSTEM_TIME AS OF PROCTIME() AS b
    ON vvp_dt_rtcdm.DateAddOrSub(a.stat_date, -2) = b.stat_date 
        AND a.cate_id = b.cate_id
    ;
    
    -- データの書き込み -- Write data.
    INSERT INTO vvp_ec_ads.ads_ec_log_hh
    
    SELECT
      a.stat_date,  -- 統計日付
      a.stat_hour,  -- 統計時間
      cast(a.item_id as varchar) as item_id,  -- 商品 ID
      a.cate_id,  -- カテゴリ ID
      b.cate_name,  -- カテゴリ名
      cast(b.industry_id as varchar) as industry_id,  -- 業種 ID
      cast(b.xcat1_id as varchar) as xcat1_id,  -- xcat1 ID
      cast(b.xcat2_id as varchar) as xcat2_id,  -- xcat2 ID
      cast(b.xcat3_id as varchar) as xcat3_id,  -- xcat3 ID
      cast(b.cate_level1_id as varchar) as cate_level1_id,  -- カテゴリレベル 1 ID
      cast(b.cate_level2_id as varchar) as cate_level2_id,  -- カテゴリレベル 2 ID
      cast(b.is_sw as varchar) as is_sw,  -- ソフトウェアかどうか
      a.pv as mbr_ipv_1h,  -- 1 時間あたりのメンバー IPV
      a.uv as mbr_ipv_uv_1h,  -- 1 時間あたりのメンバー IPV UV
      DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss') as log_gmt_modify,  -- ログ変更時間
      DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss') as gmt_modify  -- 変更時間
    FROM itm_log_hh_00 a
    JOIN ec.dim_tm_cate_360_2pt_ri FOR SYSTEM_TIME AS OF PROCTIME() AS b
    ON vvp_ec_ads.DateAddOrSub(a.stat_date, -2) = b.stat_date 
        AND a.cate_id = b.cate_id
    ;
    
    END;
  3. ノードの構成タブの右側のナビゲーションウィンドウで、リアルタイム構成Flink リソース関連パラメータースクリプト パラメーターFlink ランタイム パラメーター をクリックします。 表示されるタブで、、、 を構成します。 次の図は、パラメータ値を示しています。

    image

    エキスパートモードのプリセットコード

    {
      "nodes": [
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "0"  -- グループ
          },
          "id": 1,  -- ID
          "type": "StreamExecTableSourceScan",  -- タイプ
          "desc": "Source: vvp_dt_rtcdm_dwd_tb_trd_ord_pay_nrt_ri[71980]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "0"  -- グループ
          },
          "id": 2,  -- ID
          "type": "StreamExecCalc",  -- タイプ
          "desc": "Calc[71981]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "0"  -- グループ
          },
          "id": 3,  -- ID
          "type": "StreamExecLookupJoin",  -- タイプ
          "desc": "LookupJoin[71982]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "0"  -- グループ
          },
          "id": 4,  -- ID
          "type": "StreamExecCalc",  -- タイプ
          "desc": "Calc[71983]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "1"  -- グループ
          },
          "id": 6,  -- ID
          "state": [
            {
              "userDefined": false,  -- ユーザー定義かどうか
              "name": "groupAggregateState",  -- 名前
              "index": 0,  -- インデックス
              "ttl": "36 h"  -- TTL
            }
          ],
          "type": "StreamExecGroupAggregate",  -- タイプ
          "desc": "GroupAggregate[71985]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "1"  -- グループ
          },
          "id": 7,  -- ID
          "type": "StreamExecCalc",  -- タイプ
          "desc": "Calc[71986]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "1"  -- グループ
          },
          "id": 8,  -- ID
          "type": "StreamExecSink",  -- タイプ
          "desc": "ConstraintEnforcer[71987]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "2"  -- グループ
          },
          "id": 10,  -- ID
          "state": [
            {
              "userDefined": false,  -- ユーザー定義かどうか
              "name": "sinkMaterializeState",  -- 名前
              "index": 0,  -- インデックス
              "ttl": "36 h"  -- TTL
            }
          ],
          "type": "StreamExecSink",  -- タイプ
          "desc": "SinkMaterializer[71987]"  -- 説明
        },
        {
          "profile": {
            "parallelism": 256,  -- 並列度
            "maxParallelism": 32768,  -- 最大並列度
            "minParallelism": 1,  -- 最小並列度
            "group": "2"  -- グループ
          },
          "id": 11,  -- ID
          "type": "StreamExecSink",  -- タイプ
          "desc": "Sink: vvp_dt_ads_tb_dev_ads_tb_idec_seckill_cate_bc_trd_flow_htr_000[71987]"  -- 説明
        }
      ],
      "vertices": {  -- 頂点
        "2d95a2974e3b3137fd533ecfd3490bc5": [  -- ハッシュ値
          10,  -- ID
          11  -- ID
        ],
        "717c7b8afebbfb7137f6f0f99beb2a94": [  -- ハッシュ値
          1,  -- ID
          2,  -- ID
          3,  -- ID
          4  -- ID
        ],
        "44b79c13fdb45883c7f21ee510155f4d": [  -- ハッシュ値
          6,  -- ID
          7,  -- ID
          8  -- ID
        ]
      },
      "edges": [  -- エッジ
        {
          "mode": "PIPELINED",  -- モード
          "source": 1,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 2  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 2,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 3  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 3,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 4  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 4,  -- ソース
          "strategy": "HASH",  -- 戦略
          "target": 6  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 6,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 7  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 7,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 8  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 8,  -- ソース
          "strategy": "HASH",  -- 戦略
          "target": 10  -- ターゲット
        },
        {
          "mode": "PIPELINED",  -- モード
          "source": 10,  -- ソース
          "strategy": "FORWARD",  -- 戦略
          "target": 11  -- ターゲット
        }
      ],
      "ssgProfiles": [  -- SSG プロファイル
        {
          "managed": {},  -- 管理対象
          "name": "0",  -- 名前
          "cpu": 0.25,  -- CPU
          "offHeap": "32 mb",  -- オフヒープ
          "heap": "992 mb",  -- ヒープ
          "extended": {}  -- 拡張
        },
        {
          "managed": {  -- 管理対象
            "STATE_BACKEND": "512 mb"  -- STATE_BACKEND
          },
          "name": "1",  -- 名前
          "cpu": 0.25,  -- CPU
          "offHeap": "32 mb",  -- オフヒープ
          "heap": "480 mb",  -- ヒープ
          "extended": {}  -- 拡張
        },
        {
          "managed": {  -- 管理対象
            "STATE_BACKEND": "512 mb"  -- STATE_BACKEND
          },
          "name": "2",  -- 名前
          "cpu": 0.25,  -- CPU
          "offHeap": "32 mb",  -- オフヒープ
          "heap": "480 mb",  -- ヒープ
          "extended": {}  -- 拡張
        }
      ]
    }

    その他のプリセット構成

    blob.fetch.backlog: 1000  -- バックログをフェッチする Blob
    taskmanager.debug.memory.log-interval: 5000  -- TaskManager デバッグメモリログ間隔
  4. [リアルタイム構成] タブでパラメータを構成した後、上部のツールバーで [保存] をクリックし、次に [デプロイ] をクリックします。 右下に [デプロイメント] タブが表示されます。 [デプロイメントの説明] フィールドの右側にある [本番環境へのデプロイを開始] をクリックし、画面上の指示に基づいてチェックと確認操作を順番に実行します。

    image

ステップ 4:個人開発環境に入る

個人開発環境では、カスタムコンテナイメージ、NAS ファイルシステム(NAS)および Git への接続、Python ベースのプログラミングとノートブックがサポートされています。

Data Studio[個人用開発環境を選択] ページの上部のナビゲーションバーで、 をクリックし、入力する個人開発環境を選択します。

image

ステップ 5:Python コードを記述してデバッグする

DataWorks は DSW と緊密に統合されています。 Data Studio は、個人開発環境での Python コードの記述、デバッグ、スケジューリング、および実行をサポートしています。

重要

この手順の操作は、ステップ 4:個人開発環境に入る を完了した後にのみ実行できます。

  1. Data Studioワークスペース個人用ディレクトリimage ページの選択した個人開発環境で、 の下の をクリックし、 アイコンをクリックします。 名前のないファイルがリストに追加されます。 プリセットファイル名を入力し、Enter キーを押して、ファイルが生成されるまで待ちます。

    プリセットファイル名: ec_item_rec.py

    image

  2. Python ファイルの構成タブにあるコードエディタに、プリセット Python コードを入力します。 上部のツールバーで、[python ファイルの実行] を選択します。 構成タブの下部にある [ターミナル] タブで、実行結果をクエリします。

    image

    image

    プリセット Python コード

    import pandas as pd  # pandas をインポート
    from surprise import Dataset, Reader, SVD  # surprise から Dataset、Reader、SVD をインポート
    from surprise.model_selection import train_test_split  # surprise.model_selection から train_test_split をインポート
    from surprise import accuracy  # surprise から accuracy をインポート
    
    # サンプルデータを作成します。 -- Create sample data.
    data_dict = {
        'user_id': [1, 1, 1, 2, 2, 2, 3, 3, 4],  # ユーザー ID
        'item_id': [101, 102, 103, 101, 104, 105, 102, 105, 101],  # 商品 ID
        'rating': [5, 3, 4, 2, 4, 5, 4, 5, 3]  # 評価
    }
    
    # データエントリを DataFrame に変換します。 -- Convert data entries into a DataFrame.
    df = pd.DataFrame(data_dict)
    
    # Surprise ライブラリを使用してデータセットを準備します。 -- Prepare a dataset by using the Surprise library.
    reader = Reader(rating_scale=(1, 5))  # 評価スケールを設定
    data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)  # DataFrame からデータセットを読み込み
    
    # データセットをトレーニングセットとテストセットに分割します。 -- Split the dataset into a training set and a test set.
    trainset, testset = train_test_split(data, test_size=0.2)  # テストサイズを 0.2 に設定
    
    # 特異値分解(SVD)アルゴリズムに基づいて商品を推奨します。 -- Recommend products based on the Singular Value Decomposition (SVD) algorithm.
    model = SVD()  # SVD モデルを作成
    model.fit(trainset)  # トレーニングセットでモデルをトレーニング
    
    # 予測を行います。 -- Make predictions.
    predictions = model.test(testset)  # テストセットで予測を行う
    
    # 平均二乗誤差(RMSE)を計算します。 -- Calculate the root mean square error (RMSE).
    rmse = accuracy.rmse(predictions)  # RMSE を計算
    print(f'RMSE: {rmse:.2f}')  # RMSE を出力
    
    # ユーザーに推奨される商品を取得します。 -- Obtain the products that are recommended to a user.
    def get_recommendations(user_id, model, all_items, n=3):  # 推奨商品を取得する関数
        item_ids = all_items['item_id'].unique()  # すべての商品 ID を取得
        user_item_col = all_items[(all_items['user_id'] == user_id)]['item_id']  # ユーザーが購入した商品 ID を取得
        unseen_items = [item for item in item_ids if item not in user_item_col.values]  # ユーザーがまだ購入していない商品 ID を取得
    
        # 見えない商品のスコアを予測します。 -- Predict the scores of unseen products.
        predictions = []  # 予測結果を格納するリスト
        for item in unseen_items:  # ユーザーがまだ購入していない商品ごとに
            pred = model.predict(user_id, item)  # 予測スコアを計算
            predictions.append((item, pred.est))  # 予測結果をリストに追加
    
        # 予測スコアで商品をソートします。 -- Sort products by the predicted scores.
        predictions.sort(key=lambda x: x[1], reverse=True)  # 予測スコアでソート
        return predictions[:n]  # 上位 n 件の商品を返す
    
    # 商品の推奨を取得します。 -- Obtain the product recommendations.
    all_items = df  # すべての商品
    user_id = 1  # 推奨対象ユーザーの ID -- The ID of the user to whom the products are recommended.
    recommendations = get_recommendations(user_id, model, all_items)  # 推奨商品を取得
    
    print(f'The products that are recommended to {user_id}:')  # 推奨商品を出力
    for item_id, score in recommendations:  # 推奨商品ごとに
        print(f'Product ID: {item_id}, Predicted score: {score:.2f}')  # 商品 ID と予測スコアを出力
    

    Python 環境のインストール

    pip install pandas scikit-surprise  # pandas と scikit-surprise をインストール
  3. Python ファイルの構成タブの上部のツールバーで、[python ファイルのデバッグ] を選択します。 コードエディタでコード行番号にポインタを移動します。 赤い点が表示されます。 赤い点をクリックして、ブレークポイントを追加します。 [DATASTUDIO] ウィンドウの上にある左上で、image をクリックしてコードをデバッグします。

    image

ステップ 6:ノートブックに基づいてデータを探索する

ノートブックに基づいてデータを探索する場合、関連する操作は個人開発環境で実行されます。 したがって、この手順の操作を実行する前に、ステップ 4:個人開発環境に入る を完了する必要があります。

ノートブックを作成する

  1. Data Studio ページに移動します。

  2. 個人用ディレクトリ セクションで、目的のフォルダを右クリックし、[ノートブックの作成] を選択します。

  3. 名前のないファイルがリストに追加されます。 ノートブック名を入力し、Enter キー空白 を押すか、 をクリックして、ノートブック名を有効にします。

  4. [個人ディレクトリ] セクションでノートブック名をクリックします。 ノートブックの構成タブが表示されます。クリック

ノートブックを使用する

説明

[ノートブックを使用する] セクションの操作は、特定の実行順序のない独立した操作です。 ビジネス要件に基づいて操作を実行できます。

  • ノートブックでのマルチエンジン開発

    EMR Spark SQL

    1. ノートブックの構成タブで、image をクリックして [SQL セル] を追加します。

    2. SQL セルに、次の文を入力して dim_ec_mbr_user_info テーブルをクエリします。

      dim_ec_mbr_user_info

      -- 注:メンバー情報ソー stable と地域ソーステーブルに基づいて、E コマースプラットフォームのメンバーに関する基本情報をクエリします。 -- Note: Query the basic information about members on an e-commerce platform based on the member information source table and the region source table. 
      USE openlake_win.default;  -- データベースを選択
      SELECT  user.user_id AS user_id  -- ユーザー ID
              ,user.nick AS nick  -- ニックネーム
              ,user.gmt_create AS gmt_modified  -- 変更時間
              ,user.gmt_modified AS gmt_create  -- 作成時間
              ,user.reg_fullname AS reg_fullname  -- 登録名
              ,user.reg_mobile_phone AS reg_mobile_phone  -- 登録携帯電話番号
              ,user.reg_email AS reg_email  -- 登録メールアドレス
              ,user.reg_gender AS reg_gender  -- 登録性別
              ,user.reg_gender_name AS reg_gender_name  -- 登録性別名
              ,user.reg_birthdate AS reg_birthdate  -- 登録誕生日
              ,user.reg_address AS reg_address  -- 登録住所
              ,user.reg_nation_id AS reg_nation_id  -- 登録国 ID
              ,user.reg_nation_name AS reg_nation_name  -- 登録国名
              ,user.reg_prov_id AS reg_prov_id  -- 登録都道府県 ID
              ,area_prov.name AS reg_prov_name  -- 登録都道府県名
              ,user.reg_city_id AS reg_city_id  -- 登録市区町村 ID
              ,area_city.name AS reg_city_name  -- 登録市区町村名
              ,user.user_regip AS user_regip  -- 登録 IP アドレス
              ,user.id_card_type AS id_card_type  -- 証明書タイプ
              ,user.id_card_type_name AS id_card_type_name  -- 証明書タイプ名
              ,user.id_card_number AS id_card_number  -- 証明書番号
              ,null as id_gender  -- 性別
              ,null as id_bday  -- 誕生日
              ,(2024 - CAST(SUBSTR(user.id_card_number,7,4) AS INT)) AS id_age  -- 年齢
              ,user.user_regdate AS user_regdate  -- 登録日
              ,user.user_active_type AS user_active_type  -- アクティブタイプ
              ,user.user_active_name AS user_active_name  -- アクティブタイプ名
              ,user.user_active_time AS user_active_time  -- アクティブ時間
              ,user.vip_level AS vip_level  -- VIP レベル
              ,user.vip_level_name AS vip_level_name  -- VIP レベル名
              ,user.is_delete AS is_delete  -- 削除フラグ
      FROM    (
                  SELECT  id    -- プライマリキー
                          ,gmt_create    -- 作成時間
                          ,gmt_modified    -- 変更時間
                          ,user_id    -- メンバーのユーザー ID
                          ,nick    -- メンバーのニックネーム
                          ,reg_fullname    -- 個人認証が実行された場合は個人の実名を使用し、企業認証が実行された場合は企業名を使用します。
                          ,reg_mobile_phone    -- 登録時に入力された携帯電話番号
                          ,reg_email    -- 登録時に入力されたメールアドレス(ユーザーが変更可能)
                          ,reg_gender    -- 登録時に入力された性別(F は女性、M は男性を表します。どちらも入力されていない場合、性別は不明であり、これは性別を非公開にすることを示します。)
                          ,CASE    WHEN reg_gender='F' THEN 'Female'  -- 女性
                                   WHEN reg_gender='M' THEN 'Male'  -- 男性
                                   ELSE 'Unknown'  -- 不明
                           END AS reg_gender_name    -- 登録時に入力された性別(F は女性、M は男性を表します。どちらも入力されていない場合、性別は不明であり、これは性別を非公開にすることを示します。)
                          ,reg_birthdate    -- 登録時に入力された誕生日(ユーザーが変更可能)
                          ,reg_address    -- 登録時に入力された住所(ユーザーが変更可能)
                          ,reg_nation_id    -- 登録時に入力された国 ID(空のまま)
                          ,CASE    WHEN reg_nation_id='cn' THEN 'China'  -- 中国
                                   ELSE 'Areas outside China'  -- 中国以外の地域
                           END AS reg_nation_name  -- 登録国名
                          ,reg_prov_id    -- 登録時に入力された都道府県 ID
                          ,reg_city_id    -- 登録時に入力された市区町村 ID
                          ,user_regip    -- 登録時に入力された IP アドレス
                          ,id_card_type    -- メンバーシップ認証に使用される証明書のタイプ。 0:不明。 1:ID カード番号。 2:営業許可証番号
                          ,CASE    WHEN id_card_type=0 THEN 'Unknown'  -- 不明
                                   WHEN id_card_type=1 THEN 'ID card number'  -- ID カード番号
                                   WHEN id_card_type=2 THEN 'Business license number'  -- 営業許可証番号
                                   ELSE 'Exception'  -- 例外
                           END AS id_card_type_name  -- 証明書タイプ名
                          ,id_card_number    -- 個人認証が実行された場合は、ID カード番号を示します。 企業認証が実行された場合は、営業許可証番号を示します。 認証が実行されていない場合、精度は保証されません。
                          ,user_regdate    -- 登録時間
                          ,user_active_type    -- ユーザーのアクティベーション方法
                          ,CASE    WHEN user_active_type='email' THEN 'Email'  -- メール
                                   WHEN user_active_type='mobile_phone' THEN 'Mobile phone'  -- 携帯電話
                                   ELSE 'Exception'  -- 例外
                           END AS user_active_name    -- ユーザーのアクティベーション方法
                          ,user_active_time    -- アクティベーション時間
                          ,cast(vip_level AS BIGINT) AS vip_level    -- VIP ランク
                          ,CASE    WHEN vip_level>0 AND vip_level<=3 THEN 'Beginner'  -- 初心者
                                   WHEN vip_level>3 AND vip_level<=6 THEN 'Intermediate'  -- 中級者
                                   WHEN vip_level>6 AND vip_level<=10 THEN 'Advanced'  -- 上級者
                                   WHEN vip_level>10  THEN 'Expert'  -- エキスパート
                           ELSE 'Exception'  -- 例外
                           END  AS vip_level_name  -- VIP レベル名
                          ,is_delete    -- 削除するかどうか
                  FROM    ods_mbr_user_info  -- メンバー情報ソーステーブル
              ) AS USER  -- ユーザー
      LEFT JOIN (  -- 地域ソーステーブルと左外部結合
                    SELECT  id,pid,name,shortname,longitude,latitude,level,sort  -- ID、親 ID、名前、短縮名、経度、緯度、レベル、ソート
                    FROM    ods_t_area  -- 地域ソーステーブル
                ) AS area_prov  -- 都道府県
      ON      user.reg_prov_id = area_prov.id  -- 都道府県 ID で結合
      LEFT JOIN    (  -- 地域ソーステーブルと左外部結合
                  SELECT  id,pid,name,shortname,longitude,latitude,level,sort  -- ID、親 ID、名前、短縮名、経度、緯度、レベル、ソート
                  FROM    ods_t_area  -- 地域ソーステーブル
              ) AS area_city  -- 市区町村
      ON      user.reg_city_id = area_city.id  -- 市区町村 ID で結合
      ;
    3. SQL セルの右下隅で、EMR Spark SQLopenlake サーバーレス Spark を選択し、計算リソースとして を選択します。

      image

    4. [実行] をクリックします。実行が完了するまで待って、データ結果を表示します。

    StarRocks SQL

    1. ノートブックの構成タブで、image をクリックして [SQL セルを追加] します。

    2. SQL セルに、次の文を入力して dws_ec_trd_cate_commodity_gmv_kpi_fy テーブルをクエリします。

      dws_ec_trd_cate_commodity_gmv_kpi_fy

      -- 注:「会計年度_注文決済成功額」や「会計年度_取引額達成率」などのデータメトリックを、取引注文のファクトテーブルと商品の基本情報のディメンションテーブルに基づいてクエリします。 -- Note: Query data metrics, such as "Fiscal year_Amount of successful order payments" and "Fiscal year_Transaction amount completion rate", based on the fact table of transaction orders and the dimension table of the basic information about products.
      USE `openlake_win`.`default`;  -- データベースを選択
      select   t1.cate_id, t1.cate_name, t1.commodity_id, t1.commodity_name, round(10*sum(t1.total_fee),4) as pay_ord_amt_fy, round((10*sum(t1.total_fee)/30000000),4) as kpi_gmv_rate_fy  -- カテゴリ ID、カテゴリ名、商品 ID、商品名、会計年度の注文決済成功額、会計年度の取引額達成率
      from    (  -- 注文取引データ
                  select  DATE_FORMAT(a.gmt_create,'yyyymmdd') as stat_date  -- 統計日付
                          ,a.sub_order_id, a.buyer_id, a.item_id, a.biz_type, a.pay_status, a.total_fee/100 as total_fee, b.cate_id, b.cate_name, b.commodity_id, b.commodity_name  -- サブ注文 ID、購入者 ID、商品 ID、ビジネスタイプ、決済ステータス、合計料金、カテゴリ ID、カテゴリ名、商品 ID、商品名
                  from    `openlake_win`.`default`.dwd_ec_trd_create_ord_di a  -- 注文作成データ
                  left outer join (  -- 商品基本情報ディメンションテーブルと左外部結合
                                      select  distinct item_id, cate_id, cate_name, commodity_id, commodity_name, shop_id, shop_nick  -- 商品 ID、カテゴリ ID、カテゴリ名、商品 ID、商品名、店舗 ID、店舗ニックネーム
                                      from    `openlake_win`.`default`.dim_ec_itm_item_info  -- 商品基本情報ディメンションテーブル
                                  ) b  -- 商品基本情報
                  on      a.item_id = b.item_id  -- 商品 ID で結合
                  and     a.shop_id = b.shop_id  -- 店舗 ID で結合
              ) t1  -- 注文取引データ
      where   t1.pay_status in ('2')  -- 決済ステータスが 2 の場合
      and     t1.biz_type in ('2','3','4')  -- ビジネスタイプが 2、3、4 の場合
      group by   t1.cate_id, t1.cate_name, t1.commodity_id, t1.commodity_name  -- カテゴリ ID、カテゴリ名、商品 ID、商品名でグループ化
      ;
      
    3. SQL セルの右下隅で、StarRocks SQLopenlake_starrocks を選択し、計算リソースとして を選択します。

      image

    4. [実行] をクリックします。実行が完了するまで待って、データ結果を表示します。

    Hologres SQL

    1. ノートブックの構成タブで、image をクリックして [SQL セル] を追加します。

    2. SQL セルに、次の文を入力して dws_ec_mbr_cnt_std テーブルをクエリします。

      dws_ec_mbr_cnt_std

      -- 注:メンバーの基本情報のディメンションテーブルのデータが計算され、「既存メンバー数」などのデータメトリックに変換されます。 データを使用して、「現在の日付_cube までの累積メンバーシップ数」メトリックの統計を取得することもできます。 -- Note: The data in the dimension table of the basic information about members is calculated and converted into data metrics such as "Number of existing members". The data can also be used to obtain the statistics on the "Historical cumulative membership count as of the current date_cube" metric.
      SELECT    IF(grouping(reg_prov_id) = 0, reg_prov_id, '-9999') as reg_prov_id  -- 登録都道府県 ID
              , IF(grouping(reg_prov_name) = 0, reg_prov_name, 'All') as reg_prov_name  -- 登録都道府県名
              , IF(grouping(reg_gender) = 0, reg_gender, '-9999') as reg_gender  -- 登録性別
              , IF(grouping(reg_gender_name) = 0, reg_gender_name, 'All') as reg_gender_name  -- 登録性別名
              , IF(grouping(age_tag) = 0, age_tag, '-9999') as age_tag  -- 年齢タグ
              , IF(grouping(user_active_type) = 0, user_active_type, '-9999') as user_active_type  -- ユーザーアクティブタイプ
              , IF(grouping(user_active_name) = 0, user_active_name, 'All') as user_active_name  -- ユーザーアクティブタイプ名
              , IF(grouping(vip_level) = 0, vip_level, '-9999') as vip_level  -- VIP レベル
              , IF(grouping(vip_level_name) = 0, vip_level_name, 'All') as vip_level_name  -- VIP レベル名
              , count(distinct user_id) as mbr_cnt  -- メンバー数
      from (  -- メンバー基本情報
          select    reg_prov_id  -- 登録都道府県 ID
                  , reg_prov_name  -- 登録都道府県名
                  , reg_gender  -- 登録性別
                  , reg_gender_name  -- 登録性別名
                  , case when cast(substr(reg_birthdate,1,4) as int)>=2010 and cast(substr(reg_birthdate,1,4) as int)<2020 then 'After 2010'  -- 2010 年以降
                          when cast(substr(reg_birthdate,1,4) as int)>=2000 and cast(substr(reg_birthdate,1,4) as int)<2010 then 'After 2000'  -- 2000 年以降
                          when cast(substr(reg_birthdate,1,4) as int)>=1990 and cast(substr(reg_birthdate,1,4) as int)<2000 then 'After 1990'  -- 1990 年以降
                          when cast(substr(reg_birthdate,1,4) as int)>=1980 and cast(substr(reg_birthdate,1,4) as int)<1990 then 'After 1980'  -- 1980 年以降
                          when cast(substr(reg_birthdate,1,4) as int)>=1970 and cast(substr(reg_birthdate,1,4) as int)<1980 then 'After 1970'  -- 1970 年以降
                          else 'Other'  -- その他
                    end as age_tag  -- 年齢タグ
                  , user_active_type  -- ユーザーアクティブタイプ
                  , user_active_name  -- ユーザーアクティブタイプ名
                  , vip_level  -- VIP レベル
                  , vip_level_name  -- VIP レベル名
                  , user_id  -- ユーザー ID
          from    openlake_win.default.dim_ec_mbr_user_info  -- メンバー基本情報ディメンションテーブル
      ) _main       
      group by 
      grouping sets(  -- グループ化セット
          (reg_prov_id, reg_prov_name)  -- 登録都道府県 ID と登録都道府県名
         ,(reg_gender, reg_gender_name)  -- 登録性別と登録性別名
         ,(age_tag)  -- 年齢タグ
         ,(user_active_type, user_active_name)  -- ユーザーアクティブタイプとユーザーアクティブタイプ名
         ,(vip_level, vip_level_name)  -- VIP レベルと VIP レベル名
         ,()  -- 全て
      );
      
    3. SQL セルの右下隅で、Hologres SQLopenlake_hologres を選択し、計算リソースとして を選択します。

      image

    4. [実行] をクリックします。実行が完了するまで待って、データ結果を表示します。

    MaxCompute SQL

    1. ノートブックの構成タブで、image をクリックして [SQL セル] を追加します。

    2. SQL セルに、次の文を入力して dws_ec_mbr_cnt_std テーブルをクエリします。

      dws_ec_mbr_cnt_std

      -- 注:ライトアグリゲーションレイヤーの「現在の日付_cube までの累積メンバーシップ数」テーブルをクエリします。 -- Note: Query the "Historical cumulative membership count as of the current date_cube" table at the light aggregation layer.
      set odps.task.major.version=flighting;  -- タスクのメジャーバージョンを設定
      set odps.namespace.schema=true;  -- 名前空間スキーマを有効にする
      set odps.sql.allow.namespace.schema=true;  -- 名前空間スキーマを許可する
      set odps.service.mode=only;  -- サービスモードを設定
      set odps.sql.unstructured.data.split.size=1;  -- 非構造化データの分割サイズを設定
      
      SELECT *  -- すべての列を選択
      FROM openlake_win.default.dws_ec_mbr_cnt_std  -- テーブルを選択
      LIMIT 200;  -- 最大 200 行を返す
      
    3. SQL セルの右下隅で、MaxCompute SQLopenlake_maxcompute を選択し、計算リソースとして を選択します。

      image

    4. [実行] をクリックします。実行が完了するまで待って、データ結果を表示します。

  • ノートブックのインタラクティブデータ
    1. ノートブックの構成タブで、image をクリックして Python セルを追加します。

    2. Python セルの右上隅にある image をクリックして、インテリジェントプログラミングアシスタントである DataWorks Copilot を起動します。

    3. 表示される入力ボックスに、ipywidgets を使用してメンバーの年齢をクエリできるウィジェットを生成するための要件を入力します。

      説明

      要件の説明:Python を使用して、メンバーの年齢のスライダーウィジェットを生成します。 値の範囲は 1 ~ 100 で、デフォルト値は 20 です。値の変更をリアルタイムで監視し、値を query_age グローバル変数に保存します。

    4. DataWorks Copilot によって生成された Python コードを確認し、承諾 をクリックします。

      image

    5. Python セルで [実行] アイコンをクリックし、実行が完了するまで待ちます。 ウィジェットの生成を表示します。 ウィジェットは、DataWorks Copilot によって生成されたコードまたはプリセットコードを実行することによって生成されます。 ウィジェットでスライダーを動かして、目的の年齢を選択できます。

      ipywidgets を使用してウィジェットを生成するためのサンプルコード

      import ipywidgets as widgets  # ipywidgets をインポート
      
      # スライダーウィジェットを作成します。 -- Create a slider widget.
      slider = widgets.IntSlider(  # スライダーウィジェットを作成
          min = 1,  # 最小値
          max = 100,  # 最大値
          value = 20,  # デフォルト値
          description = 'Age:',  # 説明
      )
      
      # query_age グローバル変数を定義します。 -- Define the query_age global variable.
      query_age = None  # query_age を None に初期化
      
      
      # スライダー値の変更を制御する関数を定義します。 -- Define a function to control the change of the slider value.
      def on_slider_change(change):  # スライダー値の変更イベントハンドラ
          global query_age  # query_age をグローバル変数として宣言
          query_age = change.new  # スライダーの新しい値を query_age に代入
      
      # 関数をスライダー値変更イベントに関連付けます。 -- Associate the function with the slider value changing event.
      slider.observe(on_slider_change,names='value')  # スライダー値変更イベントにハンドラを登録
      
      # スライダーを表示します。 -- Display the slider.
      display(slider)  # スライダーを表示
      

      image

    6. ノートブックの構成タブで、image をクリックして [SQL セル] を追加します。

    7. SQL セルに次のステートメントを入力します。 ステートメントには、Python で定義されているメンバー年齢変数 ${query_age} が含まれています。

      SELECT * FROM openlake_win.default.dim_ec_mbr_user_info  -- メンバー基本情報ディメンションテーブルからすべての列を選択
      WHERE CAST(id_age AS INT) >= ${query_age};  -- 年齢が query_age 以上のメンバーを選択
      
    8. SQL セルの右下隅で、Hologres SQLopenlake_hologres を選択し、計算リソースとして を選択します。

      image

    9. [実行] をクリックします。実行が完了するまで待って、データ結果を表示します。

    10. 実行結果で、image をクリックしてグラフを生成します。

  • ノートブックでのモデル開発とトレーニング
    1. ノートブックの構成タブで、image をクリックして [SQL セル] を追加します。

    2. SQL セルに、次の文を入力して ods_trade_order テーブルをクエリします。

      SELECT * FROM openlake_win.default.ods_trade_order;  -- 注文テーブルからすべての列を選択
      
    3. SQL クエリの結果を DataFrame 変数に書き込みます。 [df] がある場所をクリックして、df_ml などの DataFrame 変数のカスタム名を指定します。

      image

    4. SQL セルで [実行] アイコンをクリックし、実行が完了するまで待ってから、データ結果を表示します。

    5. ノートブックの構成タブで、image をクリックして Python セルを追加 します。

    6. Python セルに次のステートメントを入力して、Pandas を使用してデータをクレンジングおよび処理し、データを DataFrame の新しい変数 df_ml_clean に格納します。

      import pandas as pd  # pandas をインポート
      
      def clean_data(df_ml):  # データをクレンジングする関数
          # 新しい列を生成します:推定注文総額 = 商品単価 × 商品数量。 -- Generate a new column: Estimated total order amount = Product unit price × Product quantity.
          df_ml['predict_total_fee'] = df_ml['item_price'].astype(float).values * df_ml['buy_amount'].astype(float).values  # 推定注文総額を計算
          # total_fee 列の名前を actual_total_fee に変更します。 -- Rename the total_fee column to actual_total_fee.
          df_ml = df_ml.rename(columns={'total_fee': 'actual_total_fee'})  # 列名を変更
          return df_ml  # クレンジングされたデータを返す
      
      df_ml_clean = clean_data(df_ml.copy())  # データをクレンジング
      df_ml_clean.head()  # クレンジングされたデータの最初の 5 行を表示
      
    7. Python セルで [実行] アイコンをクリックし、実行が完了するまで待って、データクレンジング結果を表示します。実行

    8. ノートブックの構成タブで、image をクリックして [Python セルを追加] します。

    9. Python セルに次のステートメントを入力して、線形回帰機械学習モデルを構築し、トレーニングとテストを実行します。

      import pandas as pd  # pandas をインポート
      from sklearn.model_selection import train_test_split  # sklearn.model_selection から train_test_split をインポート
      from sklearn.linear_model import LinearRegression  # sklearn.linear_model から LinearRegression をインポート
      from sklearn.metrics import mean_squared_error  # sklearn.metrics から mean_squared_error をインポート
      
      # 商品価格と総費用を取得します。 -- Obtain the product price and total costs.
      X = df_ml_clean[['predict_total_fee']].values  # 商品価格
      y = df_ml_clean['actual_total_fee'].astype(float).values  # 総費用
      
      # データを準備します。 -- Prepare data.
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.05, random_state=42)  # データをトレーニングセットとテストセットに分割
      
      # モデルを作成してトレーニングします。 -- Create and train a model.
      model = LinearRegression()  # 線形回帰モデルを作成
      model.fit(X_train, y_train)  # トレーニングセットでモデルをトレーニング
      
      # 予測と評価を実行します。 -- Perform prediction and evaluation.
      y_pred = model.predict(X_test)  # テストセットで予測を行う
      for index, (x_t, y_pre, y_t) in enumerate(zip(X_test, y_pred, y_test)):  # 予測結果と実際の値を表示
          print("[{:>2}] input: {:<10} prediction:{:<10} gt: {:<10}".format(str(index+1), f"{x_t[0]:.3f}", f"{y_pre:.3f}", f"{y_t:.3f}"))
      
      # 平均二乗誤差(MSE)を計算します。 -- Calculate the mean squared error (MSE).
      mse = mean_squared_error(y_test, y_pred)  # MSE を計算
      print("MSE:", mse)  # MSE を表示
      
    10. [実行] をクリックし、実行が完了するまで待って、モデルのトレーニングのテスト結果を表示します。