概要
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を見つけたら共有していこうと思います!
コメント