Big Queryでデータセットのデータの総容量・総レコード数を出す方法
今回はBigQuery上の「データセットの総容量と総レコード数を調べる方法」をご紹介します。
クエリ構文
今回使うクエリ元は以下の通りです。これらを少しいじっていきます。
①指定したテーブルの容量を出す
SELECT
SUM(size_bytes) / 1000000000 AS GBs
FROM Dataset.table
②指定されたテーブルの行数を出す
SELECT
SUM(row_count) AS Rows
FROM `Dataset.table`
以上の二つで簡単にテーブルの容量と行数が出ます。
データセット全体の容量と総レコード数を算出する
データセット全体(Datasetsに含まれるテーブル全て)のサイズと行数を知りたいときは、「ワイルドカード」を使用すると簡単に調べる事ができます。
Dataset.table1、Dataset.table2、Dataset.table3、Dataset.table4・・・とテーブルが大量に存在するときは「*」を使うことで全てのテーブル指定できます。つまり、
Dataset.* = Dataset.table1、Dataset.table2、Dataset.table3、Dataset.table4・・・
となります。なので、
①指定したDatasetの容量を出す
SELECT
SUM(size_bytes) / 1000000000 AS GBs
FROM `Dataset.*`
②指定されたDatasetの行数を出す
SELECT
SUM(row_count) AS Rows
FROM `Dataset.*`
となります。シンプルですね。ワイルドカード便利。
DatasetにViewが含まれている時は注意
先ほどのワイルドカードを使用したクエリ、実は弱点があります。それは、
「DatasetにViweが含まれる場合は、クエリはエラーを返す」です。
Google Cloudの公式にもあるように、
制限事項
ワイルドカード テーブルクエリには、次の制限が課されます。
ワイルドカード テーブルの機能はビューをサポートしません。ワイルドカード テーブルがデータセットのビューと一致すると、クエリはエラーを返します。クエリの WHERE 句に _TABLE_SUFFIX 擬似列を使用してフィルタを除外していても同様です。
どういう事でしょう。実験します。
Viewにワイルドカードを使えないとはどういう事か
今回はこの「Tableau」というデータセットで実験します。
二つのテーブルと二つのViewが入っています。
走りませんね。エラーの通り、「*はViewを含む、テータセットでは使えません」とあります。
「View1」と「View2」が邪魔しているみたいです。
残念ながら、Viewを含むDatasetを調べる際には他の方法でやる必要があります。
メタテーブルを使ったクエリで解決する
ワイルドカードを使わない方法も勿論あります。さすがBig Query大先生。
それは「メタデータ」を使用するクエリです。こちらもGoogle Cloudのヘルプにあるように、
メタテーブルを使用する
BigQuery では、内容がメタデータ(テーブルの名前など)を表す特別なテーブルがいくつか提供されます。メタテーブルは読み取り専用です。通常、メタテーブルを使用するには SELECT ステートメントでメタテーブルを参照します。
メタテーブルは、クエリジョブだけでなく、tables.get や tabledata.list などの他の API オペレーションでも使用できます。メタテーブルは tables.insert をサポートせず、宛先テーブルとしては使用できません。また、テーブル デコレータもサポートしていません。 メタテーブルは、データセットの tables.list には表示されません。データセット内のテーブルに関するメタデータ
データセット内のテーブルに関するメタデータには、TABLES または TABLES_SUMMARY メタテーブルを使用してアクセスできます。
つまり、
from Dataset.TABLES
とすることで、Dataset内にあるテーブルを全て指定することになります。
なので、
SELECT
SUM(size_bytes) / 1000000000 AS GBs,
SUM(row_count) AS Records
FROM `Dataset.__TABLES__`
とすれば良さそうです。
実際にやってみた
実際に入力画面がこちら。エラー出ていませんね。
そして結果がこちら。
5.5GB、2億行でした。(適当なデータセットだったんですが、結構なボリューム)
まとめ
BigQuery上の「データセットの総容量と総レコード数を調べる方法」ですが、
- データセットに含まれるのがテーブルのみならば、ワイルドカード(*)を使えば算出できる
- Viewを含む場合はワイルドカードは使えず、「from Dataset.TABLES」を使う必要がある
でした。
Author And Source
この問題について(Big Queryでデータセットのデータの総容量・総レコード数を出す方法), 我々は、より多くの情報をここで見つけました https://qiita.com/vizhacker/items/86cb839e70f0a862e128著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .