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

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

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

HiveQLは、Hive内の管理データを操作するのに使用されるSQL寄りのデータ操作言語です。HiveはHadoop上で動くソフトウェアで、HiveQLで記述した命令をMapReduceに自動に変換することができ、データ解析を容易に行うことが可能になります。

SQL

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

Hive

Hiveとは、Hadoop(オープンソースの大規模分散計算フレームワーク)の上で動作するDWH(Data Warehouse:データウエアハウス)向けのプロダクトです。HiveQLというSQLのような言語で、Hadoop上のデータを操作することができます。

Q&A

解決済

1回答

1762閲覧

件数の多いテーブルのクロス集計の方法について

s54h2177

総合スコア5

HiveQL

HiveQLは、Hive内の管理データを操作するのに使用されるSQL寄りのデータ操作言語です。HiveはHadoop上で動くソフトウェアで、HiveQLで記述した命令をMapReduceに自動に変換することができ、データ解析を容易に行うことが可能になります。

SQL

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

Hive

Hiveとは、Hadoop(オープンソースの大規模分散計算フレームワーク)の上で動作するDWH(Data Warehouse:データウエアハウス)向けのプロダクトです。HiveQLというSQLのような言語で、Hadoop上のデータを操作することができます。

0グッド

3クリップ

投稿2019/09/30 09:45

●前提
・hive sqlを使っています。
・AとBというサービスがあり、Aの商品はダブりなく15のジャンルに分かれていています。
Bの商品もいくつかのジャンルに分かれていますが、複数のジャンルを組み合わせたジャンル名がつけられています。(含まれているジャンル名は20ぐらいですが、組み合わせで400ぐらいになります)

Aのサービスのテーブルを作ることまでは何とかできて
個人ID 商品ID ジャンル サービスID
という形になっています。
個人IDと商品IDとジャンルとサービスIDの組み合わせの重複はないです。
500万件のテーブルです。
※期間内に同じ商品を何度利用しても1件という形です。

Bの方も重複なしのテーブルを作っていますが40万件程度あります。
Aのテーブルを現在、作成中にですが30分程度で止まってしまいます。

●実現したいこと
・Aのそれぞれのジャンルの商品を購入している人は、
Bだとどのジャンルの商品を購入しているのかを調べたいと思っています。
※Bのどのような文言が入っているものを利用しているのか調べたいです。

●クロス集計をしたいのですが、それぞれのテーブルの件数が多いので、
知っているクロス集計の方法であるエクセルのピボットテーブルを使うことはできないといわれ、調べてみると扱える件数を超えていました。

■SQLでcase文というのを使うことでクロス集計ができるようだというところまではわかったのですが、
今回の場合、この後どのようにテーブルを作ればよいのか、
15ジャンル、400ジャンルのどちらに合わせて、どのようにcase文を作ればよいのかがわからず困っています。

ご存じでしたら教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

AとBとの個人IDを軸にしたジャンルのクロス集計ですね。
列側をcaseすることになるので、ジャンルが少ない方を列にする方が、SQLの記述は少なくて済みますね。

Aのテーブルを現在、作成中にですが30分程度で止まってしまいます。

これはクロス集計の元になるテーブルを作成しているという事でしょうか?
サービス毎にAとBというテーブルがある?

細かいことは、テーブルの定義(インデックスを含め)とリレーションが分からないと何とも言えませんが。

投稿2019/10/01 01:08

sazi

総合スコア25188

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

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

s54h2177

2019/10/04 11:03

回答ありがとうございます。 サービスごとにAとBというテーブルがあるわけであはないです。 サービスAのテーブルとサービスBのテーブルという意味でした。 わかりにくくしてしまい申し訳ございません。 case文に関してはちょっと勉強中であまりうまくいってないです。 もう少し試してみて再度質問します。
s54h2177

2019/10/06 23:40

サービスA,B共に個人id,商品idのペアでユニークになっている、個人id,商品id,ジャンル、サービスidというテーブルを作ることはできました。 やりたいことは、 表側にサービスAのジャンル、表頭にサービスBのジャンルになっている、クロス集計です。どちらが表頭でもいいです。 1:クロス集計をするためにこの後どのようなテーブルをつくればよいか、 2:どうケース文を書けばよいのか、 ※検索してでてきたのは20から29才なら20代と表示させるという例題しかなく、今回の場合どこをどうかえればやりたいことになるのかわかりませんでした 宜しくお願いします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問