bq queryコマンドにdestination_tableオプションを渡すとSELECT結果をテーブルにすることができます。
また、この時にdestination_schemaオプションも同時に渡すと、テーブルのスキーマを設定できます。
ただし、この機能は壊れたJSONを渡したときの挙動に注意が必要です。
例えば、以下のような壊れたJSONを渡した時に、bqコマンドは失敗しますが、クエリは実行されdestination_tableに指定したテーブルは生成されてしまいます。
また、destination_schemaに対して存在しないファイルを渡した場合も同様にテーブルが生成されてしまいます。
[
{
"name": "col1",
"type": "INTEGER",
"mode": "NULLABLE"
そのため、例えばJSONファイルの中でColumn level Security機能のためのpolicy tagを付与するような場合は、tagが付与されていないテーブルはが作られてしまいます。
この挙動が問題になる場合は、JSONファイルが壊れていないかどうかをbqコマンドの実行前に確認するようにしましょう。
なお、この問題はIssueトラッカーには上がっていますが、現時点ではまだ修正されていないようです。