トランスコスモスのShopify 詳しくはこちら
アプリ開発の豊富な実績や物流から運用改善まで対応できる総合力で、トランスコスモスならシステム構築から運用までECワンストップサービスをご提供します。
SQL

【サクッと学ぶ】U-SQLの基本

今日はAzure Data Lakeで利用するU-SQLのご紹介です。
長編なので、小分けにして書きます。

データレイクは、
簡単に言うと様々なデータを、生データのまま蓄積できる場所の事をいいます。

様々な企業でData Lakeサービスは提供されいてますが、
今日はその中から、Microsoft社がAzureサービスの中で提供している、
Azure Data Lakeを利用する際に使うU-SQLを紹介します。

U-SQLとは、データを摘出するSQLと、
摘出したデータに対して処理を命令するために、
C#を組み合わせたものになります。

U-SQLの特徴して、下記があります。

  • 読込時にこちらでスキーマを定義して適用できる
  • その際にカスタムロジックとUDSを挿入できる
  • そこで非構造化データの処理ができる
  • 実行する方法が細かく指定できる


見たほうが早いので、まずは下記のサンプルコードを見てみましょう。

@searchlog =
    EXTRACT UserId          int,
                      Start           DateTime,
                      Region          string,
                      Query           string,
                      Duration        int?,
                      Urls            string,
                      ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

OUTPUT @searchlog   
    TO "/output/SearchLog-first-u-sql.csv"
    USING Outputters.Csv();

上記のコードは、SearchLog.tsvというファイルから
各フィールドを指定し、
SearchLog-first-u-sql.csvというファイルに書き出したものになります。

ここで見られるように、各クエリーを変数化することができます。
EXTRACTでは指定したフィールドを Extractors.Tsvを使い読み取り、
OUTPUTではCSVファイルに出力しています。

スカラー変数を使い、メンテナンスしやすいコードも書くことができます。

DECLARE @in  string = "/Samples/Data/SearchLog.tsv";
DECLARE @out string = "/output/SearchLog-scalar-variables.csv";

@searchlog =
    EXTRACT UserId          int,
                Start           DateTime,
                Region          string,
                Query           string,
                Duration        int?,
                Urls            string,
                ClickedUrls     string
    FROM @in
    USING Extractors.Tsv();

OUTPUT @searchlog   
    TO @out
    USING Outputters.Csv();

SELECTを使い、摘出するデータをフィルタリングすることもできます。

@searchlog =
    EXTRACT UserId          int,
                Start           DateTime,
                Region          string,
                Query           string,
                Duration        int?,
                Urls            string,
                ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
      SELECT Start, Region, Duration
      FROM @searchlog
   WHERE Region == "en-gb";

OUTPUT @rs1   
      TO "/output/SearchLog-transform-rowsets.csv"
      USING Outputters.Csv();

下記のように、複数回にわけてデータの条件を指定することもできます。

@searchlog =
    EXTRACT UserId          int,
                Start           DateTime,
                Region          string,
                Query           string,
                Duration        int?,
                Urls            string,
                ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
     SELECT Start, Region, Duration
     FROM @searchlog
WHERE Region == "en-gb";

@rs1 =
     SELECT Start, Region, Duration
     FROM @rs1
     WHERE Start >= DateTime.Parse("2012/02/16") AND Start <= DateTime.Parse("2012/02/17");

OUTPUT @rs1   
     TO "/output/SearchLog-transform-datetime.csv"
     USING Outputters.Csv();

集計も、下記のようにビルトインされた関数を使って行うことができます。
下記のコードでは、
地域ごとの合計を期間でまとめて抽出したもの、
トップ5の地域を抽出したもの、
この2つがCSVファイルで出力されます。


DECLARE @outpref string = "/output/Searchlog-aggregation";
DECLARE @out1    string = @outpref+"_agg.csv";
DECLARE @out2    string = @outpref+"_top5agg.csv";

@searchlog =
    EXTRACT UserId          int,
            Start           DateTime,
            Region          string,
            Query           string,
            Duration        int?,
            Urls            string,
            ClickedUrls     string
    FROM "/Samples/Data/SearchLog.tsv"
    USING Extractors.Tsv();

@rs1 =
    SELECT
        Region,
        SUM(Duration) AS TotalDuration
    FROM @searchlog
GROUP BY Region;

@res =
    SELECT *
    FROM @rs1
    ORDER BY TotalDuration DESC
    FETCH 5 ROWS;

OUTPUT @rs1
    TO @out1
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

OUTPUT @res
    TO @out2
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();


HAVING条件を使い、下記のように条件を満たしたものだけを出力することも可能です。


@searchlog =
    EXTRACT UserId          int,
                Start           DateTime,
                Region          string,
                Query           string,
                Duration        int?,
                Urls            string,
                ClickedUrls     string
     FROM "/Samples/Data/SearchLog.tsv"
     USING Extractors.Tsv();

@res =
    SELECT
         Region,
         SUM(Duration) AS TotalDuration
    FROM @searchlog
    GROUP BY Region
    HAVING SUM(Duration) > 200;

OUTPUT @res
    TO "/output/Searchlog-having.csv"
    ORDER BY TotalDuration DESC
    USING Outputters.Csv();

ここまでが基本編となります。

ECXサイト編集部
ECXサイト編集部
トランスコスモスのECX本部が運営するサービスサイト「ECX」編集部です。コーディング、WEBデザイン、SEM、UI改善などの実務経験豊富なメンバーで執筆・運営・管理をしております。
トランスコスモスのShopify 詳しくはこちら

数字で見るトランスコスモス

売上高

 3,622億円

 顧客体験向上を支援するCXサービスや
BPOサービスなどを提供

従業員数

 約70,000人

多様な人材が世界各国の拠点で活躍

お客様企業数

 約3,500社

金融、公共、情報サービスなど
多種多様なお客様との取引実績

サービス展開

 35の国と地域
181拠点

アジア最大規模のサービス提供体制で
DXサ-ビスを提供(2024年11月時点)

Webソリューション

 国内1位※1

お客様のデジタル施策を全方位的に
支援し、プレゼンスを発揮

コンタクトセンター

 国内1位※2

※2 出所:2023年度コールセンター
売上高ランキング(通販新聞社刊)

アウトソーシング(BPO) 

 国内1位※3

※3 出所:会社四季報 業界地図2025年版
(東洋経済新報社刊)

取引年数5年以上の
主要お客様企業

 70%以上

サービスが信頼され継続的な取引を獲得

※1 出所:ネット広告&Webソリューション市場の現状と展望 2023年度版(デロイトトーマツ ミック経済研究所刊、https://mic-r.co.jp/mr/02860/)より、当社および当社子会社Jストリームを合算した当社作成データです
※記載のない数値は2024年3月末時点のものです
お気軽にお問い合わせください

Shopify(ショッピファイ)
ECストア構築・運用代行

実績豊富なトランスコスモスへぜひご相談ください
ECソリューションをお届けするサービスサイト

トランスコスモス株式会社
CX事業統括
ECX本部

〒150-0011
東京都渋谷区東1-2-20
渋谷ファーストタワー
050-1751-7700(代表)

経済産業省が定める「DX認定事業者」
トランスコスモスは経済産業省が定める「DX認定事業者」
トランスプラス
トランスコスモスの全社的な情報を発信するオウンドメディア
cotra
コンタクト/コールセンターに携わる方への情報サイト
法人向けメタバース情報メディア
「メタバース情報局 by transcosmos」
トランスコスモス株式会社
企業サイト(コーポレートHP)
Global Digital Transformation Partner.
お客様企業のデジタル・トランスフォーメーション・パートナー。
shopify構築・制作・運用