質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

Q&A

2回答

1128閲覧

Treasure Data SQLにおけるループ処理

peipei1993

総合スコア12

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Treasure Data

Treasure Dataは、米国トレジャーデータ社の提供するクラウド型のデータマネジメントサービスです。ビッグデータ処理システムを備え、AWS上にセットアップされているため、データの集収、保管、分析を容易に行うことができます。

0グッド

1クリップ

投稿2019/02/07 06:33

編集2019/02/07 07:02

TreasureDataのSQL処理でループ処理を実行したいのですが可能でしょうか。

下記の様な数字が1ずつ加算される同じ処理を1000回以上実施したいです。

sql

1SELECT conversiondate , path1 as key , totalconversions as value 2FROM 3( 4 SELECT 5 conversiondate, 6 totalconversions, 7 CASE 8 WHEN split_part(basicchannelgroupingpath, ',', 1) LIKE '%Direct%' THEN 'path1_Direct' 9 WHEN split_part(basicchannelgroupingpath, ',', 1) LIKE '%CLICK%' THEN 'path1_CLICK' 10 WHEN split_part(basicchannelgroupingpath, ',', 1) LIKE '%Organic%' THEN 'path1_Organic' 11 WHEN split_part(basicchannelgroupingpath, ',', 1) LIKE '%Social%' THEN 'path1_Social' 12 WHEN split_part(basicchannelgroupingpath, ',', 1) LIKE '%Referral%' THEN 'path1_Referral' 13 END as path1, 14 FROM basicchannelgroupingpath_api 15) as a1 16UNION ALL 17SELECT conversiondate , path2 as key , totalconversions as value 18FROM 19( 20 SELECT 21 conversiondate, 22 totalconversions, 23 CASE 24 WHEN split_part(basicchannelgroupingpath, ',', 2) LIKE '%Direct%' THEN 'path2_Direct' 25 WHEN split_part(basicchannelgroupingpath, ',', 2) LIKE '%CLICK%' THEN 'path2_CLICK' 26 WHEN split_part(basicchannelgroupingpath, ',', 2) LIKE '%Organic%' THEN 'path2_Organic' 27 WHEN split_part(basicchannelgroupingpath, ',', 2) LIKE '%Social%' THEN 'path2_Social' 28 WHEN split_part(basicchannelgroupingpath, ',', 2) LIKE '%Referral%' THEN 'path2_Referral' 29 END as path2 30) as a2 31UNION ALL 32SELECT conversiondate , path3 as key , totalconversions as value 33FROM 34( 35 SELECT 36 conversiondate, 37 totalconversions, 38 CASE 39 WHEN split_part(basicchannelgroupingpath, ',', 3) LIKE '%Direct%' THEN 'path3_Direct' 40 WHEN split_part(basicchannelgroupingpath, ',', 3) LIKE '%CLICK%' THEN 'path3_CLICK' 41 WHEN split_part(basicchannelgroupingpath, ',', 3) LIKE '%Organic%' THEN 'path3_Organic' 42 WHEN split_part(basicchannelgroupingpath, ',', 3) LIKE '%Social%' THEN 'path3_Social' 43 WHEN split_part(basicchannelgroupingpath, ',', 3) LIKE '%Referral%' THEN 'path3_Referral' 44 END as path3 45) as a3 46UNION ALL 4748495051これが永続的に続きます。

上記をfor文の様に書きたいのですが
Treasure Dataでは可能でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/02/07 06:49

END as path2, END as path3 の次にFROM がないですが、エラーになりませんか?
Orlofsky

2019/02/07 07:54

日本語が通じていませんね。 END as path1, FROM basicchannelgroupingpath_api ) as a1 があるのに、 END as path2 ) as a2 で良いのですか? >これが永続的に続きます。 質問にCREATE TABLEも提示した方が適切なコメントが付き易いかと。
guest

回答2

0

unnestを使用して行展開すると簡潔になりそうです。
※試せてないので、悪しからず。

SQL

1select conversiondate, totalconversions 2 , 'path' || groupid || 3 CASE 4 WHEN basicchannelpath LIKE '%Direct%' THEN '_Direct' 5 WHEN basicchannelpath LIKE '%CLICK%' THEN '_CLICK' 6 WHEN basicchannelpath LIKE '%Organic%' THEN '_Organic' 7 WHEN basicchannelpath LIKE '%Social%' THEN '_Social' 8 WHEN basicchannelpath LIKE '%Referral%' THEN '_Referral' 9 END as key 10FROM basicchannelgroupingpath_api 11 cross join unnest(split(basicchannelgroupingpath, ',')) 12 with ordinality AS t(basicchannelpath, groupid)

cross join unnestを利用して、カンマ区切りのデータを単一の列の複数レコードに分解する。

投稿2019/02/09 01:07

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

> これが永続的に続きます。

Treasure Data ってひとつのテーブルに定義できるカラム数の上限がありませんか?
テーブルの正規化を誤っているように思えます。
質問にCREATE TABLE文も載せてください。

正規化 に反する設計をすると複雑なコードを書かないといけないし、パフォーマンスも悪いし、システムの維持が面倒になるからお勧めしません。
きちんと正規化しましょう。

投稿2019/02/08 07:33

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問