DB

【BigQuery】ロット数量からロット単位のレコードを作成する方法

ロット数量を持つ1レコードからロット単位の複数レコードを作りたい

データの分析や処理に便利なBigQuery(BQ)

前回ロット単位生産商品の必要ロット数を計算する方法を紹介した。

ではロット数量のレコードからロット単位のレコードを展開することはできるのだろうか

そこで今回はBigQueryでロット数量からロット単位のレコードを作成する方法について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

BigQueryでロット数量からロット単位のレコードを作成する方法がわかる


データ準備

ではまずデータを準備する。

以下のCSVを lot_problem_sample2 というテーブルとして取り込む。

product,lot_pcs,time,demand,demand_lot
a,10,1,21,3
a,10,2,22,2
a,10,3,5,0
a,10,4,0,0
a,10,5,36,4
a,10,6,40,4


すると以下のようなテーブルとなる。

Row product lot_pcs time demand demand_lot
1 a 10 1 21 3
2 a 10 2 22 2
3 a 10 3 5 0
4 a 10 4 0 0
5 a 10 5 36 4
6 a 10 6 40 4



BigQueryでロット数量からロット単位のレコードを作成する方法

ではロット数量からロット単位のレコードを作成する。

方法としては連続した整数のテーブルデータを作り、その連番テーブルと結合する。


まずは連番テーブルのデータを作る。

連番は GENERATE_ARRAY() で配列データを作り、それを UNNEST するとテーブルデータになる。

SELECT seq FROM UNNEST(GENERATE_ARRAY(1, 10)) AS seq

Row seq
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10


この連番データをロット数量のデータと結合し、連番がロット数量以下の部分だけ残す

SELECT
r.*,
n.seq as lot_seq
FROM project.detaset.lot_problem_sample2 AS r,
(SELECT seq FROM UNNEST(GENERATE_ARRAY(1, 10)) AS seq) AS n
WHERE r.demand_lot >= n.seq
order by r.product,r.time, n.seq


するとロット数量のデータから、ロット単位にレコードを持つデータが作成できる

Row product lot_pcs time demand demand_lot lot_seq
1 a 10 1 21 3 1
2 a 10 1 21 3 2
3 a 10 1 21 3 3
4 a 10 2 22 2 1
5 a 10 2 22 2 2
6 a 10 5 36 4 1
7 a 10 5 36 4 2
8 a 10 5 36 4 3
9 a 10 5 36 4 4
10 a 10 6 40 4 1
11 a 10 6 40 4 2
12 a 10 6 40 4 3
13 a 10 6 40 4 4


たしかに3ロット必要(demand_lot = 3)なところに、3
レコードできてる




まとめ

今回はBigQueryでロット数量からロット単位のレコードを作成する方法について解説した。

やり方としては以下の通り。

ロット単位レコードの作り方

  • GENERATE_ARRAY()で連番データを作る
  • 連番データとロット数データを結合
  • 連番がロット数以下の部分だけ抽出するとロット単位レコードになる

  • ロットデータだけでなく連番データを使うのがポイントですね



    他にもSQLのちょっとしたテクニックについてまとめているので、もし気になったら見てみて欲しい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -DB
    -

    © 2022 ITips