Quantcast
Channel: kakakakakku blog
Viewing all articles
Browse latest Browse all 936

DuckDB: SELECT * EXCLUDE で 一部のカラムを除外する

$
0
0

DuckDB in Actionを読んでいたら,Chapter.3 に SELECT * EXCLUDEというシンタックスが出てきた.ほとんどのカラムが必要だけど,一部のカラムだけ除外したいときに使える.これは使える場面があるな〜と思って実際に試してみた❗️小ネタだけど検証ログを残しておく✍

データセット

DuckDB in Actionを読みながら試せるデータセットは GitHub に公開されている.

github.com

今回は ch03/ch03_db/prices.parquetを使う.データ構造は以下のようになっている👌

⚫◗ DESCRIBE SELECT * FROM prices.parquet;
┌─────────────┬──────────────┬─────────┬─────────┬─────────┬─────────┐
│ column_name │ column_type  │  null   │   key   │ default │  extra  │
│   varchar   │   varchar    │ varchar │ varchar │ varchar │ varchar │
├─────────────┼──────────────┼─────────┼─────────┼─────────┼─────────┤
│ id          │ INTEGER      │ YES     │         │         │         │
│ value       │ DECIMAL(5,2)│ YES     │         │         │         │
│ valid_from  │ DATE         │ YES     │         │         │         │
│ valid_until │ DATE         │ YES     │         │         │         │
└─────────────┴──────────────┴─────────┴─────────┴─────────┴─────────┘

お試し1

まずは SELECT *で全レコードを取得する.

⚫◗ SELECT * FROM prices.parquet;
┌───────┬──────────────┬────────────┬─────────────┐
│  id   │    value     │ valid_from │ valid_until │
│ int32 │ decimal(5,2) │    datedate│
├───────┼──────────────┼────────────┼─────────────┤
│     111.592018-12-012019-01-01│
│    1011.472019-01-012019-02-01│
│    1111.352019-02-012019-03-01│
│    1211.232019-03-012019-04-01│
│    1311.112019-04-012019-05-01│
│    1410.952019-05-012019-06-01│
│    158.602020-11-012023-01-01│
│    168.602023-01-012024-02-01│
│    178.642020-10-012020-11-01│
│    188.772020-09-012020-10-01│
│    198.902020-08-012020-09-01│
│    209.032020-07-012020-08-01│
│    219.172020-06-012020-07-01│
│    229.302020-05-012020-06-01│
│    239.442020-04-012020-05-01│
│    249.582020-03-012020-04-01│
│    259.722020-02-012020-03-01│
│    269.872020-01-012020-02-01│
│    279.972019-12-012020-01-01│
│    2810.082019-11-012019-12-01│
│    2910.182019-10-012019-11-01│
│    3010.332019-09-012019-10-01│
│    3110.482019-08-012019-09-01│
│    3210.642019-07-012019-08-01│
│    3310.792019-06-012019-07-01│
├───────┴──────────────┴────────────┴─────────────┤
│ 25rows4 columns │
└─────────────────────────────────────────────────┘

お試し2

次に idカラムを除外して全レコードを取得する.今回試す SELECT * EXCLUDEを使わない場合は,個別に valuevalid_fromvalid_untilを指定する必要がある.今回のデータセットはカラム数が少なくて問題なく感じるけど,もっとカラム数が増えてくると,個別に指定する大変さがある💨

⚫◗ SELECT value, valid_from, valid_until FROM prices.parquet;
┌──────────────┬────────────┬─────────────┐
│    value     │ valid_from │ valid_until │
│ decimal(5,2) │    datedate│
├──────────────┼────────────┼─────────────┤
│        11.592018-12-012019-01-01│
│        11.472019-01-012019-02-01│
│        11.352019-02-012019-03-01│
│        11.232019-03-012019-04-01│
│        11.112019-04-012019-05-01│
│        10.952019-05-012019-06-01│
│         8.602020-11-012023-01-01│
│         8.602023-01-012024-02-01│
│         8.642020-10-012020-11-01│
│         8.772020-09-012020-10-01│
│         8.902020-08-012020-09-01│
│         9.032020-07-012020-08-01│
│         9.172020-06-012020-07-01│
│         9.302020-05-012020-06-01│
│         9.442020-04-012020-05-01│
│         9.582020-03-012020-04-01│
│         9.722020-02-012020-03-01│
│         9.872020-01-012020-02-01│
│         9.972019-12-012020-01-01│
│        10.082019-11-012019-12-01│
│        10.182019-10-012019-11-01│
│        10.332019-09-012019-10-01│
│        10.482019-08-012019-09-01│
│        10.642019-07-012019-08-01│
│        10.792019-06-012019-07-01│
├──────────────┴────────────┴─────────────┤
│ 25rows3 columns │
└─────────────────────────────────────────┘

お試し3

そこで SELECT * EXCLUDEを使うと,除外するカラムを指定できる👌

⚫◗ SELECT * EXCLUDE (id) FROM prices.parquet;
┌──────────────┬────────────┬─────────────┐
│    value     │ valid_from │ valid_until │
│ decimal(5,2) │    datedate│
├──────────────┼────────────┼─────────────┤
│        11.592018-12-012019-01-01│
│        11.472019-01-012019-02-01│
│        11.352019-02-012019-03-01│
│        11.232019-03-012019-04-01│
│        11.112019-04-012019-05-01│
│        10.952019-05-012019-06-01│
│         8.602020-11-012023-01-01│
│         8.602023-01-012024-02-01│
│         8.642020-10-012020-11-01│
│         8.772020-09-012020-10-01│
│         8.902020-08-012020-09-01│
│         9.032020-07-012020-08-01│
│         9.172020-06-012020-07-01│
│         9.302020-05-012020-06-01│
│         9.442020-04-012020-05-01│
│         9.582020-03-012020-04-01│
│         9.722020-02-012020-03-01│
│         9.872020-01-012020-02-01│
│         9.972019-12-012020-01-01│
│        10.082019-11-012019-12-01│
│        10.182019-10-012019-11-01│
│        10.332019-09-012019-10-01│
│        10.482019-08-012019-09-01│
│        10.642019-07-012019-08-01│
│        10.792019-06-012019-07-01│
├──────────────┴────────────┴─────────────┤
│ 25rows3 columns │
└─────────────────────────────────────────┘

もちろん複数カラムを除外することもできる👌

⚫◗ SELECT * EXCLUDE (id, value) FROM prices.parquet;
┌────────────┬─────────────┐
│ valid_from │ valid_until │
│    datedate│
├────────────┼─────────────┤
│ 2018-12-012019-01-01│
│ 2019-01-012019-02-01│
│ 2019-02-012019-03-01│
│ 2019-03-012019-04-01│
│ 2019-04-012019-05-01│
│ 2019-05-012019-06-01│
│ 2020-11-012023-01-01│
│ 2023-01-012024-02-01│
│ 2020-10-012020-11-01│
│ 2020-09-012020-10-01│
│ 2020-08-012020-09-01│
│ 2020-07-012020-08-01│
│ 2020-06-012020-07-01│
│ 2020-05-012020-06-01│
│ 2020-04-012020-05-01│
│ 2020-03-012020-04-01│
│ 2020-02-012020-03-01│
│ 2020-01-012020-02-01│
│ 2019-12-012020-01-01│
│ 2019-11-012019-12-01│
│ 2019-10-012019-11-01│
│ 2019-09-012019-10-01│
│ 2019-08-012019-09-01│
│ 2019-07-012019-08-01│
│ 2019-06-012019-07-01│
├────────────┴─────────────┤
│ 25rows2 columns │
└──────────────────────────┘

関連記事

kakakakakku.hatenablog.com


Viewing all articles
Browse latest Browse all 936

Latest Images

Trending Articles