【BigQuery】STRING型のデータをDATE型にINSERTする

BigQuery

概要

2つのテーブル間でデータを連携するために、INSERTの仕方を実践します。

型が異なると変換の処理が必要なので、今回は頻出のSTRING→ DATEに着目して説明します。

状況

テーブルAからテーブルBにデータを抽出して、INSERTしようとしました。

が、このようなエラーが起こり対応が必要になりました。

Query column 1 has type STRING which cannot be inserted into column insert_time, which has type DATE at [2:1]

準備

BigQueryで実際に動かすためのテスト用テーブル、データを下記のクエリで準備します。

-- データ取得元
CREATE TABLE test_dataset.date_test1(
   insert_time STRING,
   column1 STRING,
   column2 STRING
);

-- データ投入先
CREATE TABLE test_dataset.date_test2(
   insert_time DATE,
   column1 STRING,
   column2 STRING
);

-- テストデータ
INSERT INTO test_dataset.date_test1
VALUES('2024/03/04', 'column1_data', 'column2_data');

INSERT INTO test_dataset.date_test1
VALUES('2024-03-04', 'column1_data', 'column2_data');

このようにデータが入ればOKです。

対処

yyyy-mm-ddの変換(型変換)

STRING「yyyy-mm-dd」は、見た目は同じですが、DATE型に入れるには変換しないといけません。

下記のクエリで変換処理をした上でINSERTします。

INSERT INTO test_dataset.date_test2
SELECT 
    PARSE_DATE('%Y-%m-%d', insert_time) AS insert_time,
    column1,
    column2
FROM test_dataset.date_test1
WHERE insert_time = '2024-03-04'
;

このようにデータが入れば、変換がしてINSERTができていることになります。

yyyy/mm/ddの変換

STRING型の異なる形式の日付データをDATE型のカラムにINSERTしてみます。

INSERT INTO test_dataset.date_test2
SELECT 
    PARSE_DATE('%Y/%m/%d', insert_time) AS insert_time,
    column1,
    column2
FROM test_dataset.date_test1
WHERE insert_time = '2024/03/04'
;

このようにデータが入れば、変換がしてINSERTができていることになります。

まとめ

いかがでしたでしょうか。

型変換をして、INSERTする処理をシンプルな構造で実践してみました。

TIMESTAMPやDATE、 DATETIME等のデータを扱う処理に応用できる考え方です。

ぜひ覚えておきたいですね。

また良いTipsを見つけたら共有していこうと思います!

コメント

タイトルとURLをコピーしました