0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryでテーブルの存在判定

Posted at

BigQueryでテーブルの存在判定をする方法について。
シンプルだが状況次第では有効なのでメモ。

方法としては下記である。データセット名、テーブル名はてきとう。

EXECUTE IMMEDIATE FORMAT(
"""
    SELECT
        DISTINCT 1 
    FROM
        `project.dataset_%s.sharding_table_*`
    WHERE
        _TABLE_SUFFIX = '%d'
""",'a',20240101
) INTO Y;

IF Y> 0 THEN ~ END IF;

複数のデータセットがあり、それぞれシャーディングテーブルとなっている(例えば、GA4からBigQueryに日々エクスポートされるテーブルなど)場合でなおかつ、複数の日付に対して処理を行う場合などに有効。
例えば、下記の疑似コードのようなイメージ。

span = 今日 - 2024/1/1
for a in [データセットa, データセットb]:
    FORMAT('''
    for i in span:
        aとiを使って、シャーディングテーブルを作成(or上書き)するクエリを記述
        例えば、データセット%sのテーブル%dを使う
    ''', a, CAST(FROMAT_DATE(%Y%m%d, 今日-i日)AS INT64)
    )

上述したテーブルの存在判定をしないと、SQL次第では下記の状況でエラーを吐く。
・データセットaとデータセットbいずれかについて、2024/1/1~今日の日付のシャーディングテーブルが存在しない場合

例えば、下記のような場合が考えられる。
・そもそもデータセットaが、20240301以降のシャーディングテーブルしかない場合
・何らかの原因で、20240101以降ほとんど存在しているが20230201のみ存在しない場合

個人的に、EXECUTE IMMEDIATE FORMAT の結果を INTO VARIABLE で変数に格納できることを知らなかったのでメモ。

公式ドキュメント:
https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#execute_immediate

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?