BigQueryのカラムタイプ変更

BigQueryのカラム変更はREQUIREDをNULLABLEにする以外は出来ません
テーブル スキーマの手動変更

作り直すしかないんですが、分割テーブルだともう一手間必要ですよという話

例えば以下のように分割テーブルを作るとします

bq mk --dataset test
bq mk --table \
    --time_partitioning_type DAY \
    test.first

データを投入

echo -e "1\thoge" > /tmp/data.tsv
echo -e "2\thuga" >> /tmp/data.tsv
echo -e "3\tabcd" >> /tmp/data.tsv

bq load --source_format=CSV --field_delimiter="\t" \
    'test.first$20200501' /tmp/data.tsv id:NUMERIC,description:STRING

bq load --source_format=CSV --field_delimiter="\t" \
    'test.first$20200502' /tmp/data.tsv id:NUMERIC,description:STRING

取り込み時間別に分割されているのが分かります

echo "#standardSQL" > /tmp/query.sql
echo 'select  _PARTITIONTIME as pt, count(*) as count from test.first group by _PARTITIONTIME order by pt;' >> /tmp/query.sql
cat /tmp/query.sql | bq query 

+---------------------+-------+
|         pt          | count |
+---------------------+-------+
| 2020-05-01 00:00:00 |     3 |
| 2020-05-02 00:00:00 |     3 |
+---------------------+-------+

この時idカラムをSTRINGに変えたくなった場合、作り直すしかないんですが
こうやって作ると全部同じ取り込み時間になってしまいます

echo "#standardSQL" > /tmp/query.sql
echo 'select CAST(id AS STRING) as id, description from test.first;' >> /tmp/query.sql

cat /tmp/query.sql | 
    bq query --append_table --schema_update_option=ALLOW_FIELD_ADDITION \
    --destination_table 'test.second' \
    --time_partitioning_type DAY

echo "#standardSQL" > /tmp/query.sql
echo 'select  _PARTITIONTIME as pt, count(*) as count from test.second group by _PARTITIONTIME order by pt;' >> /tmp/query.sql
cat /tmp/query.sql | bq query 

すべて同じ現在の時間に取り込まれています

+---------------------+-------+
|         pt          | count |
+---------------------+-------+
| 2020-05-08 00:00:00 |     6 |
+---------------------+-------+

なので時間別に取り込みしていく必要があります

echo "#standardSQL" > /tmp/query.sql
echo 'select  _PARTITIONTIME as pt, count(*) as count from test.third group by _PARTITIONTIME order by pt;' >> /tmp/query.sql
cat /tmp/query.sql | bq query 

元と同じになりました

+---------------------+-------+
|         pt          | count |
+---------------------+-------+
| 2020-05-01 00:00:00 |     3 |
| 2020-05-02 00:00:00 |     3 |
+---------------------+-------+