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


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

Rowproductlot_pcstimedemanddemand_lot
1a101213
2a102222
3a10350
4a10400
5a105364
6a106404



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

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

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


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

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

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

Rowseq
11
22
33
44
55
66
77
88
99
1010


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

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


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

Rowproductlot_pcstimedemanddemand_lotlot_seq
1a1012131
2a1012132
3a1012133
4a1022221
5a1022222
6a1053641
7a1053642
8a1053643
9a1053644
10a1064041
11a1064042
12a1064043
13a1064044


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




まとめ

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

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

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

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

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



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

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

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

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

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

    ランキング参加中

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

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

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

    -DB
    -

    Translate »

    © 2021 ITips